代码架构:
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 1080typedef 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;
}