EasyX实现字符雨动画

#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;

}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值