代码架构:
1、初始化窗口(窗口大小信息)
2、描绘雨点信息(颜色,数字)
3、初始化雨(雨点位置变化)
4、下雨操作(坐标更新)
5、更新窗口(场景描绘)
#include<stdio.h>
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
void init_window();
void hua_rain(int n);
void down_rain();
void date_windows();
void init_rain();
预备工作:
定义雨点结构体:主要包含坐标信息、雨点数量。
1、初始化窗口信息。
2、描绘雨点信息。
3、初始化雨(雨点位置变化)
#define rain_num 100
#define WIN_HEIGHT 640
#define WIN_WIDTH 1080
typedef struct Rain
{
int x;
int y;
}rain;
rain rains[rain_num];
void init_window()
{
system("title 黑客帝国-代码雨");
initgraph(WIN_WIDTH, WIN_HEIGHT);
}
void init_rain()
{
for (int i = 0; i < rain_num; i++)
{
rains[i].x = rand() % WIN_WIDTH;
rains[i].y = rand() % WIN_HEIGHT;
}
}
void hua_rain(int n)
{
for (int i = 0; i < n; i++)
{
settextcolor(RGB(0, 255, 0));
outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
}
}
4、下雨操作:
雨点 X , Y 坐标变换,重复实验得到数据 Y+=25; X+=1;
让雨点在窗口内坐标不断变化----从而实现雨点下落。
void down_rain()
{
for (int i = 0; i < rain_num; i++)
{
hua_rain(i);
rains[i].y += 25;
rains[i].x += 1;
if (rains[i].y > WIN_HEIGHT)
{
rains[i].x = rand() % WIN_WIDTH;
rains[i].y = rand() % 50;
}
}
}
5、更新窗口(场景描绘):
BeginBatchDraw():开始工作区----EndBatchDraw():结束工作区
GetTickCount是一种函数。GetTickCount返回 从操作系统启动所经过(elapsed)的毫秒数,它的是DWORD。
void date_windows()
{
BeginBatchDraw();
DWORD t1, t2;
t1 = GetTickCount64();
while (1)
{
t2 = GetTickCount64();
if (t2 - t1 > 20)
{
cleardevice();
down_rain();
EndBatchDraw();
t1 = t2;
}
}
}
总结代码:
int main()
{
srand(time(NULL));
init_window();
init_rain();
date_windows();
return 0;
}
效果呈现:

以下就是全部源码分享了:
#include<stdio.h>
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#define rain_num 100
#define WIN_HEIGHT 640
#define WIN_WIDTH 1080
typedef struct Rain
{
int x;
int y;
}rain;
rain rains[rain_num];
void hua_rain(int n)
{
for (int i = 0; i < n; i++)
{
settextcolor(RGB(0, 255, 0));
outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
}
}
void init_window()
{
system("title 黑客帝国-代码雨");
initgraph(WIN_WIDTH, WIN_HEIGHT);
}
void down_rain()
{
for (int i = 0; i < rain_num; i++)
{
hua_rain(i);
rains[i].y += 25;
rains[i].x += 1;
if (rains[i].y > WIN_HEIGHT)
{
rains[i].x = rand() % WIN_WIDTH;
rains[i].y = rand() % 50;
}
}
}
void date_windows()
{
BeginBatchDraw();
DWORD t1, t2;
t1 = GetTickCount64();
while (1)
{
t2 = GetTickCount64();
if (t2 - t1 > 20)
{
cleardevice();
down_rain();
EndBatchDraw();
t1 = t2;
}
}
}
void init_rain()
{
for (int i = 0; i < rain_num; i++)
{
rains[i].x = rand() % WIN_WIDTH;
rains[i].y = rand() % WIN_HEIGHT;
}
}
int main()
{
srand(time(NULL));
init_window();
init_rain();
date_windows();
return 0;
}