C语言实现代码雨效果
作者:辉小歌 时间:2021-11-26 18:11:20
本文实例为大家分享了C语言实现代码雨效果的具体代码,供大家参考,具体内容如下
一、项目描述和最终的效果展示
项目: 让字符从上到下依次的下落,呈现出代码雨。
最终效果图如下所示:
二、静态的代码雨
代码如下:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#define High 800//游戏画面
#define Width 1000
#define CharSize 25//每个字符显示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存储对应字符矩阵中需要输出字符的ASCII码
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符个数
?? ?int i,j,x,y;
?? ?srand((unsigned)time(NULL));//设置随机函数种子
?? ?for(i=0;i<widthNum;i++)//初始化字符矩阵
?? ?{
?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//这一列的有效字符个数
?? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//产生A~Z的随机字符
?? ?}
?? ?initgraph(Width,High);
?? ?BeginBatchDraw();
?? ?setfont(25,10,"Courier");//设置字体
?? ?setcolor(GREEN);
?? ?for(i=0;i<widthNum;i++)//输出整个字符矩阵
?? ?{
?? ??? ?x=i*CharSize;//当前字符的x坐标
?? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ?{
?? ??? ??? ?y=j*CharSize;//当前字符的y坐标
?? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//输出当前字符
?? ??? ?}
?? ?}
?? ?FlushBatchDraw();
?? ?EndBatchDraw();
?? ?getch();
?? ?closegraph();
?? ?return 0;
}
效果图如下:
三、一场动态的代码雨
代码如下:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#define High 800//游戏画面
#define Width 1000
#define CharSize 25//每个字符显示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存储对应字符矩阵中需要输出字符的ASCII码
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符个数
?? ?int i,j,x,y;
?? ?srand((unsigned)time(NULL));//设置随机函数种子
?? ?for(i=0;i<widthNum;i++)//初始化字符矩阵
?? ?{
?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//这一列的有效字符个数
?? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//产生A~Z的随机字符
?? ?}
?? ?initgraph(Width,High);
?? ?BeginBatchDraw();
?? ?setfont(25,10,"Courier");//设置字体
?? ?setcolor(RGB(0,255,0));
?? ?while(1)
?? ?{
?? ??? ?for(i=0;i<widthNum;i++)
?? ??? ?{
?? ??? ??? ?if(CNum[i]<highNum-1)//当这一列字符没有填满时
?? ??? ??? ?{
?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每个字符向下移动一格
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i];
?? ??? ??? ??? ?}
?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新随机的产生一个字符
?? ??? ??? ??? ?CNum[i]=CNum[i]+1;//这一列的字符数加1
?? ??? ??? ?}
?? ??? ?}
?? ??? ?for(i=0;i<widthNum;i++)//输出整个字符矩阵
?? ??? ?{
?? ??? ??? ?x=i*CharSize;//当前字符的x坐标
?? ??? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ??? ?{
?? ??? ??? ??? ?y=j*CharSize;//当前字符的y坐标
?? ??? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//输出当前字符
?? ??? ??? ?}
?? ??? ?}
?? ??? ?FlushBatchDraw();
?? ??? ?Sleep(200);
?? ??? ?clearrectangle(0,0,Width-1,High-1);//清空画面
?? ?}
?? ?
?? ?EndBatchDraw();
?? ?getch();
?? ?closegraph();
?? ?return 0;
}
效果图如下:
四、实现代码雨动画
代码如下:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#define High 800//游戏画面
#define Width 1000
#define CharSize 25//每个字符显示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存储对应字符矩阵中需要输出字符的ASCII码
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符个数
?? ?int ColorG[Width/CharSize];//每一列字符的颜色
?? ?int i,j,x,y;
?? ?srand((unsigned)time(NULL));//设置随机函数种子
?? ?for(i=0;i<widthNum;i++)//初始化字符矩阵
?? ?{
?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//这一列的有效字符个数
?? ??? ?ColorG[i]=255;
?? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//产生A~Z的随机字符
?? ?}
?? ?initgraph(Width,High);
?? ?BeginBatchDraw();
?? ?setfont(25,10,"Courier");//设置字体
?? ?while(1)
?? ?{
?? ??? ?for(i=0;i<widthNum;i++)
?? ??? ?{
?? ??? ??? ?if(CNum[i]<highNum-1)//当这一列字符没有填满时
?? ??? ??? ?{
?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每个字符向下移动一格
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i];
?? ??? ??? ??? ?}
?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新随机的产生一个字符
?? ??? ??? ??? ?CNum[i]=CNum[i]+1;//这一列的字符数加1
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?if(ColorG[i]>40)
?? ??? ??? ??? ??? ?ColorG[i]=ColorG[i]-20;//让满的这一列逐渐变暗
?? ??? ??? ??? ?else
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?CNum[i]=(rand()%(highNum/3))+highNum/10;//这一列字符的个数
?? ??? ??? ??? ??? ?ColorG[i]=(rand()%75)+180;//这一列字符的颜色
?? ??? ??? ??? ??? ?for(j=0;j<CNum[i];j++)//重新初始化这一列字符
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?CharRain[j][i]=(rand()%26)+65;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?for(i=0;i<widthNum;i++)//输出整个字符矩阵
?? ??? ?{
?? ??? ??? ?x=i*CharSize;//当前字符的x坐标
?? ??? ??? ?for(j=0;j<CNum[i];j++)
?? ??? ??? ?{
?? ??? ??? ??? ?y=j*CharSize;//当前字符的y坐标
?? ??? ??? ??? ?setcolor(RGB(0,ColorG[i],0));
?? ??? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//输出当前字符
?? ??? ??? ?}
?? ??? ?}
?? ??? ?FlushBatchDraw();
?? ??? ?Sleep(100);
?? ??? ?clearrectangle(0,0,Width-1,High-1);//清空画面
?? ?}
?? ?
?? ?EndBatchDraw();
?? ?getch();
?? ?closegraph();
?? ?return 0;
}
效果图如下:
来源:https://huixiaoge.blog.csdn.net/article/details/107895594
标签:C语言,代码雨
0
投稿
猜你喜欢
Java多线程yield心得分享
2023-11-29 05:58:15
spring @Conditional的使用与扩展源码分析
2022-01-09 05:52:57
C#排序算法之快速排序
2021-05-24 02:44:17
解决springMVC 跳转js css图片等静态资源无法加载的问题
2022-04-13 04:06:51
C#正则表达式转义字符介绍
2022-11-03 01:10:09
Java中方法名称和泛型相同的用法示例
2023-08-12 03:18:55
Android完美实现平滑过渡的ViewPager广告条
2023-10-01 13:05:31
WPF如何自定义ProgressBar滚动条样式
2021-08-02 13:31:44
Java异常处理try catch的基本用法
2022-11-27 11:36:15
C# 利用代理爬虫网页的实现方法
2023-02-26 18:51:43
深入理解C#中常见的委托
2022-03-23 01:05:46
javax.mail.SendFailedException: Sending failed问题原因
2021-08-07 20:00:57
Java 实战范例之员工管理系统的实现
2023-03-31 08:09:33
Android用动画显示或隐藏视图
2023-08-05 20:07:25
Java中的内部类你了解吗
2022-12-11 08:29:10
Android下保存简单网页到本地(包括简单图片链接转换)实现代码
2021-05-27 03:45:52
Cocos2d-x 3.0多线程异步加载资源实例
2022-02-08 03:26:51
MyBatis持久层框架的用法知识小结
2022-05-21 17:12:55
Android购物车项目快速开发
2021-09-11 01:28:07
Spring实战之ResourceLoader接口资源加载用法示例
2023-11-20 12:16:49