首页 > 编程语言 >C语言实现数字字母雨小程序

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

时间:2022-11-17 20:40:30浏览次数:44  
标签:rand 数字 int 字母 rain C语言 ++ STR SIZE


//字母数字雨
#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


标签:rand,数字,int,字母,rain,C语言,++,STR,SIZE
From: https://blog.51cto.com/u_15333750/5866123

相关文章

  • C语言类型转换
    类型转换类型转换:在C语言中,当一个运算符的几个操作数类型不同时,编译器会在进行运算之前将他们共同转化为某种一样的数据类型,一般来说编译器会先将占用内存较小的数据转化为......
  • C语言简单的猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>intmain(void){intnum=0;srand((unsigned)time(NULL));inti=rand();while(scanf("%d",&num)!=EO......
  • C语言动态内存开辟
    1.动态内存管理1.为什么存在动态内存管理当前我们知道的内存的使用方式主要是两种。1.创建一个变量inta=10;//局部变量-在栈区中开辟空间intg_a=10;//全局变量-静......
  • 【算法】用Java解出来的算法,移除链表元素,只出现一次的数字
    (算法题)1.只出现一次的数字题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线......
  • C语言编写Web服务器
    相关视频——C/C++技术教学:web网络服务器开发!纯C语言手写web服务器,仅需80行代码,制作出你的专属服务器_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜的blog,同......
  • C语言实现图书管理系统
    相关视频——C语言课程设计实战:图书管理系统!计算机专业同学的一大难题,今天用代码实战演示,手把手带你完成!_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のblog1.......
  • C语言的灵魂——指针
    相关视频——强烈推荐【强烈推荐】4小时彻底掌握C指针-顶尖程序员图文讲解-UP主亲自翻译校对(已完结)_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のblog......
  • input只能输入纯数字
    1、1~正无穷<el-inputv-model="num"style="width:120px;"onkeyup="this.value=this.value.replace(/[^[0-9]/g,'').replace(/^0[0-9]*/g,'')"ona......
  • #yyds干货盘点# 动态规划专题:字母收集
    1.简述:有一个  的矩形方阵,每个格子上面写了一个小写字母。小红站在矩形的左上角,她每次可以向右或者向下走,走到某个格子上就可以收集这个格子的字母。小红非常喜欢"love"......
  • 数字化开采|AIRIOT智慧矿山自动化生产解决方案
    由于矿山地形复杂,生产自动化水平低,安全监管技术落后,事故频发等很多因素对煤矿开采技术提出了数据化、可视化、智能化的要求。通过目前的煤矿开采现状可以发现煤矿开采过程中......