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

简介: 【C】C语言实现数字字母雨小程序
//字母数字雨
#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

相关文章
|
6月前
|
C语言
【C语言】大小写字母的相互转化:多种方法解析及原理说明
【C语言】大小写字母的相互转化:多种方法解析及原理说明
455 0
|
C语言
C 语言实例 - 判断字母
用户输入一个字符,判断该字符是否为一个字母。
66 1
|
1月前
|
C语言
C语言中大小写字母的转换
C语言中大小写字母的转换
109 0
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的C语言在线评测系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的C语言在线评测系统附带文章和源代码部署视频讲解等
30 0
|
6月前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
6月前
|
C语言
每天一道C语言编程(数字转字母,字母转数字)
每天一道C语言编程(数字转字母,字母转数字)
89 0
|
6月前
|
C语言 数据安全/隐私保护 Python
C语言中大小写字母的转化
C语言中大小写字母的转化
102 0
|
6月前
|
C语言
【C语言】五种方法实现C语言中大小写字母的转化
【C语言】五种方法实现C语言中大小写字母的转化
263 0
|
6月前
|
编译器 C语言
【C语言】字母转换大小写的三种方法
【C语言】字母转换大小写的三种方法
260 0
|
存储 小程序 Linux
【Linux从入门到精通】C语言模拟实现进度条小程序
在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解。
296 1