目录
- 一、项目描述和最终的效果展示
- 二、静态的代码雨
- 三、一场动态的代码雨
- 四、实现代码雨动画
一、项目描述和最终的效果展示
项目: 让字符从上到下依次的下落,呈现出代码雨。
最终效果图如下所示:
二、静态的代码雨
代码如下:
#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;
}
效果图如下: