实现效果如图:
代码如下:
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#define WIDTH 1680 //宽度
#define HEIGTH 820 //高度
#define STR_SIZE 20 //字符串长度
#define STR_NUM 128 //字符串最大值
#define STR_WIDTH 15//字符串所占宽度
//数字雨结构体
struct Rain
{
int x, y;
int speed;
char str[STR_SIZE];
}rain[STR_NUM];
//创建随机字符串
char CreateCh()
{
char temp = 0;
int flag = rand() & 3;
if (flag == 0)
temp = rand() % 26+'a';
else if(flag == 1)
temp = rand() % 26+'A';
else
temp = rand() % 10+'0';
return temp;
}
//字符串初始化
void GameInit()
{
//字符串位置初始化
for (int i = 0; i < STR_NUM; i++)
{
rain[i].x = i * STR_WIDTH;
rain[i].y = rand() % HEIGTH;
rain[i].speed = rand() % 5 + 5;
}
//赋予字符串
for (int i = 0; i < STR_NUM; i++)
{
for (int j = 0; j < STR_SIZE; j++)
{
rain[i].str[j] = CreateCh();
}
}
}
//字符串条形绘制
void GameDraw()
{
cleardevice();
for (int i = 0; i < STR_NUM; i++)
{
for (int j = 0; j < STR_SIZE; j++)
{
outtextxy(rain[i].x,rain[i].y-STR_WIDTH*j,rain[i].str[j]);//rain[i].y-STR_WIDTH*j-->成条形字符串
settextcolor(RGB(0, 255 - 13 * j,0));
}
}
}
//字符串掉落
void GamePlay()
{
for (int i = 0; i < STR_NUM; i++)
{
rain[i].y += rain[i].speed;
//rain[i].y-STR_SIZE*STR_WIDTH-->使每串字符串到底结束
if (rain[i].y-STR_SIZE*STR_WIDTH > HEIGTH)
{
rain[i].y = 0;
}
}
}
//字符串掉落过程字符随机改变
void ChangeCh()
{
for (int i = 0; i < STR_NUM; i++)
{
rain[rand() % STR_NUM].str[rand() % STR_SIZE] = CreateCh();
}
}
int main()
{
initgraph(WIDTH, HEIGTH);
GameInit();//字符串初始化
DWORD t1, t2;//定义两个获取系统时间变量
t1 = t2 = GetTickCount();//获取系统时间
while (1)
{
BeginBatchDraw();//开始批量绘制
GameDraw();//绘制字符串于界面
ChangeCh();//随机改变字符串
if (t2 - t1 > 20)
{
GamePlay();//掉落时间为20ms
t1 = t2;
}
t2 = GetTickCount();
EndBatchDraw();
}
closegraph();
return 0;
}
**
过程步骤:
**