前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言实现数字字母雨小程序

C语言实现数字字母雨小程序

作者头像
半生瓜的blog
发布2023-05-12 21:07:15
5950
发布2023-05-12 21:07:15
举报
文章被收录于专栏:半生瓜のblog半生瓜のblog
代码语言:javascript
复制
//字母数字雨
#include<stdio.h>
//随机数头文件
#include<stdlib.h>
//包含easyX图形库 可以使用绘图函数 以及鼠标操作
#include<graphics.h>
#include<conio.h>
#define STR_SIZE 20//没串雨的字符个数
#define RAIN_NUM 128//雨的数量
#define WIDTH 960
#define HEIGHT 640
#define STR_W 15//字符宽度
//结构体封装属性
struct rain
{
	int x;
	int y;
	int speed;
	char str[STR_SIZE];//每一串字符语
}rain[RAIN_NUM];
//每一个字符串由字符组成
//写一个函数生成字符
char createch()
{
	char ch = 0;
	//随机产生字符,使用rand函数,
	//随机中的随机
	int flag = rand() % 3;// 0 1 2
	if (flag == 0)
	{
		ch = rand() % 10 + '0';//产生0~9的随机数 加一个'0'把数字转化成字符
	}
	else if (flag == 1)
	{
		ch = rand() % 26 + 'a';//随机产生字母 大写 小写 26个字母
	}
	else
	{
		ch = rand() % 26 + 'A';
	}
	return ch;
}
//数据的初始化
void GameInit()
{
	for (int i = 0; i < RAIN_NUM; i++)
	{
		rain[i].x = i*STR_W;//每条雨之间的距离等距
		rain[i].y = rand() % HEIGHT;
		rain[i].speed = rand() % 5 +5 ;//在5 ~ 9之间
		for (int j = 0; j < STR_SIZE; j++)
		{
			rain[i].str[j] = createch();//初始化每条雨
		}

	}
}
//绘制
void GameDraw()
{
	//双缓冲绘图
	BeginBatchDraw();
	//清楚屏幕
	cleardevice();
	for (int i = 0; i < RAIN_NUM; i++)
	{
		for (int j = 0; j < STR_SIZE; j++)
		{
			//设置颜色
			settextcolor(RGB(0,255-j*13,0));//由下到上 越来越浅
			//out text xy 输出文本到指定的位置
			outtextxy(rain[i].x,rain[i].y-15*j,rain[i].str[j]);
		}
	}
	EndBatchDraw();
}
void changeCh()
{
	//找到每一个字符串
	for (int i = 0; i < RAIN_NUM; i++)
	{
		for (int j = 0; j < STR_SIZE; j++)
		{
			//让字符串的每一个字符,都有可能发生改变,但是不是同一时间发生改变。
			rain[i].str[rand() % STR_SIZE] = createch();
		}
	}
}
//让它动起来
void GamePlay()
{
	for (int i = 0; i < RAIN_NUM; i++)
	{
		rain[i].y+=rain[i].speed;
		//当它掉出屏幕后 传到上面
		if (rain[i].y-STR_SIZE*STR_W >= HEIGHT)
		{
			//让速度重新生成
			rain[i].speed = rand() % 5 + 5;
			rain[i].y = 0;
		}
		changeCh();
	}
}
//下落的过程中,数字字母不断变化
//让程序暂停 原理就是运用死循环
void stop()
{
	//判断是否有按键产生
	if (_kbhit() && _getch() == ' ')//有按键返回非0值,否则返回0	
	{
		while (_getch() != ' ');//如果没有输入空格就一直等待
		
	}
}
int main(void)
{	
	//创建一个图形窗口,init初始化 大小 参数 宽高 SHOWCONSOLE显示黑窗口
	initgraph(WIDTH, HEIGHT);
	//设置随机数种子
	srand(GetTickCount());//返回从开机到现在所经过的毫秒数,让所产生的随机数不断的变化。
	GameInit();
	while (1)
	{
		GamePlay();
		GameDraw();
		changeCh();
		stop();
	}
	getchar();
	return 0;
}

参考视频:https://www.bilibili.com/video/BV1kK411M7qo?t=5027

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档