其他分享
首页 > 其他分享> > 2021-06-14

2021-06-14

作者:互联网

// 黑客帝国数字雨特效.cpp
#include “stdafx.h”
#include <stdio.h>
#include <graphics.h> //图形库头文件
#include <Windows.h>
#define WIDTH 960 //宏定义,定义宽和高
#define HEIGTH 640
#define STR_SIZE 20 //数字雨数组最大存储
#define STR_NUM 128 //1920/15=128 数字雨的串数
#define STR_WIDTH 15 //雨的距离15,字符宽度
struct Rain //雨的结构
{
int x;//数字雨横向位置
int y;//y坐标
int speed;//下降速度
char str[STR_SIZE];//数字雨数组
}rain[STR_NUM];//结构体数组
char CreateCh(){ //随机产生一个字符
char temp=0;
int flag=rand()%3; //rand随机产生0~3的数字:0、1、2,所以概率每个都是1/3。
switch (flag)
{
case 0:temp=rand()%26+‘a’;break;
case 1:temp=rand()%26+‘A’;break;
default:temp=rand()%10+‘0’;break;
}
return temp;
}
void GameInit(){ //初始化
//初始化基础数据
for(int i=0;i<STR_NUM;++i){
rain[i].x=iSTR_WIDTH;
rain[i].y=rand()%HEIGTH; //y坐标产生在屏幕任意位置都可以,就模上规定屏幕的宽度。
rain[i].speed=rand()%5+5; //速度不可能为零吧!这样就是最低速度5,最高速度10。
}
//初始化字符串
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]); //输出
settextcolor(RGB(0,255-13j,0));
}
}
}
void RainDrop(){ //下雨
for(int i=0;i<STR_NUM;++i){
rain[i].y+=rain[i].speed;
if(rain[i].y-STR_WIDTH
STR_SIZE>HEIGTH){ //如果尾巴(rain[i].y-STR_WIDTH*STR_SIZE)下落到地面,重新回到头顶上
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);//创建窗口
srand(GetTickCount());
GameInit();
DWORD t1,t2;
t1=t2=GetTickCount(); //从操作系统启动到现在所经过的毫秒数
`



`while (true)
{
BeginBatchDraw();//双缓冲绘图开始,先在内存里画好。防止闪瞎狗眼
//任何绘图操作都将暂时不输出到屏幕上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出
GameDraw();
ChangeCh();
if(t2-t1>20){ //超过20毫秒时。区别:使RainDrop()下落延时20毫秒
RainDrop();
t1=t2;
}
t2=GetTickCount(); //t2再重新获取一下时间
EndBatchDraw();//内存已画好,开始显示。
// Sleep(20); //单位是毫秒,20毫秒。使整个程序暂停20毫秒以后从这里开始继续运行。并不好,会有卡顿感,不建议使用。区别:使整个程序延时20毫秒
}
getchar();
closegraph();//关闭窗口
return 0;
}

x + y = z x+y=z x+y=z

标签:rand,06,14,int,rain,毫秒,2021,STR,20
来源: https://blog.csdn.net/m0_59292457/article/details/117906140