C/C++项目源码——数字雨DigitalRain
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sublime Text 2 注册码/破
- 下一篇: 尚硅谷前端视频总结(一)