目录

一、函数段

二、完整代码

三、运行效果


一、函数段

1、显示图形界面

(1)安装EasyX图形库,官网地址:EasyX Graphics Library for C++

(2)图形库头文件

#include<graphics.h>

(3)宏定义 设置图形化界面大小

#define WIDTH 960  //窗口宽度
#define HEIGTH 640  //窗口高度

(4)图形化窗口的使用

initgraph(WIDTH, HEIGTH);  //打开图形化窗口
getchar();
closegraph();  //关闭图像化窗口

2、数字雨的结构体struct

(1)定义属性代码段

struct Rain
{int x;  //数字雨横向位置int y;  //y坐标int speed;  //下降速度char str[STR_SIZE];  //数字雨数组
}rain[STR_NUM];

3、随机字符

(1)随机数生成数字雨,srand()需要头文件#include<Windows.h>

srand(GetTickCount());  //利用ASCII码值随机生成,GetTickCount();直接获取电脑开机到现在的毫秒数

(2)switch语句或if-else if语句随机生成数字0、1、2,且产生概率相同

4、初始化

(1)初始化基础数据

(2)初始化字符串

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;  // 5至10}for (int i = 0; i < STR_NUM; i++){for (int j = 0; j < STR_SIZE; j++){rain[i].str[j] = CreateCh();}}
}

5、输出字符

(1)字符串颜色设置

settextcolor(RGB(255.0 / STR_SIZE * i, 255.0 / STR_SIZE * j, 0));
//settextcolor(RGB(0, 255 - 13 * j, 0));

6、字符移动

7、变换字符

8、主函数main()

(1)如何解决字符下降速度较快问题

方法一:if()条件判断语句实现

DWORD t1, t2;
t1 = t2 = GetTickCount();
while
{if (t2 - t1 > 20)  //使游戏下落延时{GamePlay();t1 = t2;}t2 = GetTickCount();
}

方法二:Sleep()函数实现,功能: 等待一段时间

#include<Windows.h>  //适用于Windows系统
#include <unistd.h>  //适用于Linux系统Sleep(20);  //使整个程序延时

(2)图形化界面的打开与关闭

initgraph(WIDTH, HEIGTH);  //打开图形化窗口
closegraph();  //关闭图像化窗口

二、完整代码

#include<stdio.h>
#include<math.h>
#include<graphics.h>  //图形化界面头文件
#include<Windows.h>
#define WIDTH 960  //窗口宽度
#define HEIGTH 640  //窗口高度
#define STR_SIZE 20  //字符串数组的最大存储长度
#define STR_NUM 128  //字符串数量
#define STR_WIDTH 15  //字符串宽度// 数字雨的结构体
struct Rain
{int x;  //数字雨横向位置int y;  //y坐标int speed;  //下降速度char str[STR_SIZE];  //数字雨数组
}rain[STR_NUM];//随机字符
char CreateCh()
{int flag = rand() % 3;  //随机产生数字0、1、2,且产生概率相同switch (flag){case 0:return rand() % 26 + 'A';break;case 1:return rand() % 26 + 'a';break;case 2:return rand() % 10 + '0';break;default:break;}}//初始化
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;  // 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++){settextcolor(RGB(255.0 / STR_SIZE * i, 255.0 / STR_SIZE * j, 0));//settextcolor(RGB(0, 255 - 13 * j, 0));outtextxy(rain[i].x, rain[i].y + j * STR_WIDTH, rain[i].str[j]);//使用rain[i].y + j * STR_WIDTH输出一串随机字符}}
}//字符移动
void GamePlay()
{for (int i = 0; i < STR_NUM; i++){rain[i].y += rain[i].speed;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);  //打开图形化窗口srand(GetTickCount());  //利用ASCII码值随机生成,GetTickCount();直接获取电脑开机到现在的毫秒数GameInit();DWORD t1, t2;t1 = t2 = GetTickCount();while (1){BeginBatchDraw();GameDraw();ChangeCh();if (t2 - t1 > 20)  //使游戏下落延时{GamePlay();t1 = t2;}t2 = GetTickCount();EndBatchDraw();//Sleep(20);  //使整个程序延时}getchar();closegraph();  //关闭图像化窗口return 0;
}

三、运行效果

PS:可以自己试着运行一下,感受数字雨的动态效果

注意:

(1)如何解决字符串频闪问题

BeginBatchDraw();
EndBatchDraw();

(2)如何解决不兼容问题

方法:项目-属性-配置属性-常规-字符集-使用多字节字符集

C/C++项目源码——数字雨DigitalRain相关推荐

  1. c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!

    序言 今天的资源特意是为大三.大四的童鞋准备的, 整理了一波有关于C语言开发的游戏.系统.效果.小项目的源码!!源码!!源码!! 小编之前发过一波毕业项目的资源, 还没有获取的伙伴,直接申请进群就能获 ...

  2. 140款Android开源优秀项目源码

    140款Android开源优秀项目源码 BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefresh ...

  3. BISTML-CRF项目源码

    BILSTM-CRF项目源码 boson数据集分析 数据处理 BILSTM-CRF train 模型能力 迁移MSRA数据集 数据处理 BILSTM-CRF&&resuleCal 训练 ...

  4. part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛

    人生苦短,我用python,随着python这些年的流行,很多人开始使用python来实现各种功能.下面推荐一些适合用来练手.大学生课程设计作业.大学生毕业设计的python小项目,尤其适合新手,源码 ...

  5. 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...

  6. 已上线运营的斗地主APP项目源码,出售(超低价)----(Android商业项目客户端)

    已上线运营的斗地主APP商业项目源码,低价售于热爱学习的同行.您只需支付167元,即可拥有这套商业源码,提高您的技术开发能力.增色您的项目经历.增涨您的工资收入. 您可以运行此商业项目APK,尝试客户 ...

  7. 基于JavaWeb Mybatis+MVC(JSP + servlet + javabean)的高校就业管理系统(含项目源码)

    基于JavaWeb Mybatis+MVC的高校就业管理系统 项目简介 基本功能简介 项目要求 概要设计 数据模型(E-R图) 数据库结构设计 主要页面展示 项目实现 创建项目 项目结构展示 项目关键 ...

  8. 开源项目源码分析(Kickstarter-iOS )(一)

    开源项目源码分析(Kickstarter-iOS )(一) 1.Kickstarter开源项目简介 2. Kickstarter项目结构 2.1 Makefile 文件 2.2 Git submodu ...

  9. Spring mvc Data Redis—Pub/Sub(附Web项目源码)

    一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...

  10. Atitit. 查找linux 项目源码位置

    Atitit. 查找linux 项目源码位置 1. netstat   -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...

最新文章

  1. (DBA之路【五】)关于锁的故事
  2. R语言一次性读入多个csv文件实战:一次导入多个csv形成一个统一的dataframe、原生R方法、readr包、data.table
  3. mysql 主从复制的1032错误
  4. matlab v7.0,matlab下载-matlab免费版v7.0 官方版下载-6188手游网
  5. 鸟哥的Linux私房菜(基础篇)-第四章、安装 CentOS 5.x 与多重开机小技巧(三.1. 本练习机的规划--尤其是分割参数)
  6. Android 监听Home键
  7. ng-content的一个实际例子
  8. Sharepoint学习笔记---Linq to Sharepoint--查询语法
  9. docker --- 梳理 Dockerfile docker-compose.yml
  10. 常见的运行时异常与编译时异常举例
  11. 常用的简单的ps快捷键
  12. openwrt添加USB网卡驱动(SIERRA)
  13. 面试积累——嵌入式软件工程师面试题(非常经典)
  14. web安全攻防渗透+赵雨佳43
  15. 联想G40-70固态安装教程(实际操作经验)
  16. 肺管家科普:引发肺气肿的原因竟然是这些...
  17. Ubuntu 下如何下载GitHub里的文件 和 GRC结合hackrf 实现GMSK文本传输
  18. Sql语句的优化以及Sql语句优化工具
  19. 【时间序列】python与时间序列基本教程4(超过1.9万字 代码超过900行 包括49个图)...
  20. 怒爬某破Hub站资源,只为撸这个鉴黄平台

热门文章

  1. 最新CPC客户端安装教程,亲试有效
  2. bodymovin导出没有html5,AE导出Web动画插件Bodymovin 5.7.6+使用教程 For CC 2014 – CC 2020...
  3. 仿真软件EWB,NI软件
  4. SQL优化面试题及答案
  5. 人工智能中的专家系统
  6. linux vi命令的查询,linux vi命令模式详解
  7. Github Star 7.2K,来自百度飞桨超级好用的OCR数据合成与半自动标注工具,强烈推荐!
  8. Matpower软件简介和参数介绍
  9. cfd 网格划分c语言源程序,ICEM-CFD-网格划分入门 .doc
  10. 微信开发者工具 wxmi修改模版颜色_小白变大师试试免费设计工具:adaptiff