#include<graphics.h>
#include<time.h>
#include<conio.h>
#pragma warning(disable:4996)
#define High 800 //画面尺寸
#define Width 1000
#define CharSize 25 //每个字符的显示的大小
int main()
{
int highNum = High / CharSize;
int widthNum = Width / CharSize;
//CahrRain储存对应字符矩阵中需要输出字符的ASCII码
unsigned 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 / 10)) + highNum / 10; //这一列的有效字符个数
for (j = 0; j < CNum[i]; j++)
{
CharRain[i][j] = (rand() % 26) + 'A'; //产生A到Z的随机ASCII码
}
}
initgraph(Width, High);
BeginBatchDraw();
setfont(CharSize, 10, _T("Courier")); //设置字体
setcolor(GREEN);
//下面每一帧,让字符向下移动,然后最上面产生新的字符
while (1)
{
for (i = 0; i < widthNum; i++)
{
if (CNum[i] < highNum - 1) //当这一列字符没有填满时
{
for (j = CNum[i] - 1; j > 0; j--)
{
CharRain[i][j + 1] = CharRain[i][j]; //每个字符向下移动一格
}
CharRain[i][0] = (rand() % 26) + 65; //最上一格产生随机ASCII码
CNum[i] = CNum[i] + 1; //这列的有效字符个数加1
}
else //这一列字符已满
{
if (ColorG[i] > 40) //满的一列颜色则逐渐变暗
{
ColorG[i] -= 20;
}
else
{
CNum[i] = (rand() % (highNum / 3)) + highNum / 10; //这列字符个数
ColorG[i] = (rand() % 75) + 180; //这列字符颜色
for (j = 0; j < CNum[i]; j++)
{
CharRain[i][j] = (rand() % 26) + 'A'; //产生A到Z的随机ASCII码
}
}
}
}
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[i][j]); //输出当前的字符
}
}
FlushBatchDraw();
Sleep(100);
clearrectangle(0, 0, Width - 1, High - 1); //清空画面中全部矩形区域
}
EndBatchDraw();
getch();
closegraph();
return 0;
}
EasyX实现字符雨动画
最新推荐文章于 2024-07-06 11:13:36 发布