C语言—黑客数字雨特效

目录

01、实现效果

02、过程步骤

03、代码


01、实现效果

02、过程步骤

03、代码

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值