C/C++项目源码——数字雨DigitalRain
目录
一、函数段
二、完整代码
三、运行效果
一、函数段
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相关推荐
- c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!
序言 今天的资源特意是为大三.大四的童鞋准备的, 整理了一波有关于C语言开发的游戏.系统.效果.小项目的源码!!源码!!源码!! 小编之前发过一波毕业项目的资源, 还没有获取的伙伴,直接申请进群就能获 ...
- 140款Android开源优秀项目源码
140款Android开源优秀项目源码 BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefresh ...
- BISTML-CRF项目源码
BILSTM-CRF项目源码 boson数据集分析 数据处理 BILSTM-CRF train 模型能力 迁移MSRA数据集 数据处理 BILSTM-CRF&&resuleCal 训练 ...
- part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛
人生苦短,我用python,随着python这些年的流行,很多人开始使用python来实现各种功能.下面推荐一些适合用来练手.大学生课程设计作业.大学生毕业设计的python小项目,尤其适合新手,源码 ...
- 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计
一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...
- 已上线运营的斗地主APP项目源码,出售(超低价)----(Android商业项目客户端)
已上线运营的斗地主APP商业项目源码,低价售于热爱学习的同行.您只需支付167元,即可拥有这套商业源码,提高您的技术开发能力.增色您的项目经历.增涨您的工资收入. 您可以运行此商业项目APK,尝试客户 ...
- 基于JavaWeb Mybatis+MVC(JSP + servlet + javabean)的高校就业管理系统(含项目源码)
基于JavaWeb Mybatis+MVC的高校就业管理系统 项目简介 基本功能简介 项目要求 概要设计 数据模型(E-R图) 数据库结构设计 主要页面展示 项目实现 创建项目 项目结构展示 项目关键 ...
- 开源项目源码分析(Kickstarter-iOS )(一)
开源项目源码分析(Kickstarter-iOS )(一) 1.Kickstarter开源项目简介 2. Kickstarter项目结构 2.1 Makefile 文件 2.2 Git submodu ...
- Spring mvc Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- Atitit. 查找linux 项目源码位置
Atitit. 查找linux 项目源码位置 1. netstat -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...
最新文章
- (DBA之路【五】)关于锁的故事
- R语言一次性读入多个csv文件实战:一次导入多个csv形成一个统一的dataframe、原生R方法、readr包、data.table
- mysql 主从复制的1032错误
- matlab v7.0,matlab下载-matlab免费版v7.0 官方版下载-6188手游网
- 鸟哥的Linux私房菜(基础篇)-第四章、安装 CentOS 5.x 与多重开机小技巧(三.1. 本练习机的规划--尤其是分割参数)
- Android 监听Home键
- ng-content的一个实际例子
- Sharepoint学习笔记---Linq to Sharepoint--查询语法
- docker --- 梳理 Dockerfile docker-compose.yml
- 常见的运行时异常与编译时异常举例
- 常用的简单的ps快捷键
- openwrt添加USB网卡驱动(SIERRA)
- 面试积累——嵌入式软件工程师面试题(非常经典)
- web安全攻防渗透+赵雨佳43
- 联想G40-70固态安装教程(实际操作经验)
- 肺管家科普:引发肺气肿的原因竟然是这些...
- Ubuntu 下如何下载GitHub里的文件 和 GRC结合hackrf 实现GMSK文本传输
- Sql语句的优化以及Sql语句优化工具
- 【时间序列】python与时间序列基本教程4(超过1.9万字 代码超过900行 包括49个图)...
- 怒爬某破Hub站资源,只为撸这个鉴黄平台
热门文章
- 最新CPC客户端安装教程,亲试有效
- bodymovin导出没有html5,AE导出Web动画插件Bodymovin 5.7.6+使用教程 For CC 2014 – CC 2020...
- 仿真软件EWB,NI软件
- SQL优化面试题及答案
- 人工智能中的专家系统
- linux vi命令的查询,linux vi命令模式详解
- Github Star 7.2K,来自百度飞桨超级好用的OCR数据合成与半自动标注工具,强烈推荐!
- Matpower软件简介和参数介绍
- cfd 网格划分c语言源程序,ICEM-CFD-网格划分入门 .doc
- 微信开发者工具 wxmi修改模版颜色_小白变大师试试免费设计工具:adaptiff