C语言小白适合入门的项目——扫雷
編譯軟件:VS/VC
安裝圖形庫 www.easyx.cn
素材 ?幾張圖片
1.分析代碼需要
? ?呈現一個效果
? ?響應點擊的位置 翻開合適的區域
? ?判斷當前游戲是否結束
2.數據存儲
?? ?地圖 --->每個元素視為一個數字--->多個數字--->數組
?? ??? ??? ?二維地圖--->二維數組 ?整數數組
?? ?輸贏 --> 輸 ?踩到雷 ?輸
?? ??? ??? ?所有的雷排除 ?游戲贏 ?存一下當前走的步數 方便判斷游戲輸贏?? ?
3. 游戲的步驟
?? ??? ?3.1 初始化界面
?? ??? ?3.2 等待用戶點擊 根據點擊的內容做不同的操作
?? ??? ??? ?點擊到空白 ?翻開周圍的一片
?? ??? ??? ?點擊到數字 那么翻開這個就行
?? ??? ??? ?點擊的雷 ?游戲直接結束(輸)
?? ??? ?3.3 翻開一個之后 重新畫圖
?? ??? ??? ?判斷游戲是否結束
?? ??? ??? ?要么等待下一次點擊 要么 游戲結束?
? ? ? ? ? ? 地圖當中有數字 ?0 1 2 3 4 5表示周圍雷的個數
? ? ? ? ? ? 表示雷 換一個數字 避免沖突
? ? ? ? ? ? 9表示一個雷
? ? ? ? ? ? 對于這個游戲而言 ?剛剛開始的時候 全部是沒有翻開的狀態 ?貼圖都貼 空白圖
? ? ? ? ? ? 翻開之后 才會貼12 34
? ? ? ? ? ? 0~9 ?視為沒有翻開的狀態
? ? ? ? ? ? 翻開之后 ?0+10 ?10
? ? ? ? ? ?1+10 ? 11 ?表示翻開之后的1
4.程序源代碼:
#include<stdio.h> #include<easyx.h>//需要安裝圖形庫 #include<stdlib.h> //隨機數函數 srand rand #include<time.h> //隨機數種子 需要用到的time函數 int map[10][10] = { 0 };//全局數組 存放游戲地圖的全局數據 IMAGE img[10];//多張圖片 所以用數組來存 //只有一張定義一個IMAGE變量就行//準備給數組賦值 void init() {//賦初值 隨機往里面放幾個雷 //用一個數字 代表雷 9表示雷//隨機一個行一個列 隨機數 得到隨機數 可能超過范圍 使用求余運算符//rand()%10 得到0~9之間的隨機數int x, y;for (int i = 0; i < 10; ) //循環次數 表示放了幾次{x = rand() % 10;y = rand() % 10;if (map[x][y] != 9){map[x][y] = 9;//給一個隨機的位置賦值為9++i; //統計雷的個數}}//得到雷周圍的數字 兩種方式//給雷周圍的元素加1 找到一個元素看周圍幾個雷 那么這個值就是多少for ( i = 0; i < 10; ++i){for ( int j = 0; j < 10; ++j){if ( 9==map[i][j] )//找到一個雷{//周圍的幾個位置加1//if (i - 1 >= 0 && j - 1 >= 0 && map[i - 1][j - 1] != 9)map[i - 1][j - 1]++;//左上//if (i - 1 >= 0 && map[i - 1][j] != 9)map[i - 1][j]++;//上方//需要做的事情 判斷是否越界 然后是否是雷 看需不需要加1//遍歷周圍的元素 加1for (int m = i - 1; m <= i + 1; ++m){for (int n = j - 1; n <= j + 1; ++n){if (m >= 0 && m < 10 && n >= 0 && n < 10 && map[m][n] != 9)//判斷是否越界 判斷是否是雷{map[m][n]++;}}}}}}//加載所有素材的圖片loadimage(&img[0], "res/0.jpg", 60, 60);loadimage(&img[1], "res/1.jpg", 60, 60);loadimage(&img[2], "res/2.jpg", 60, 60);loadimage(&img[3], "res/3.jpg", 60, 60);loadimage(&img[4], "res/4.jpg", 60, 60);loadimage(&img[5], "res/5.jpg", 60, 60);loadimage(&img[6], "res/6.jpg", 60, 60);loadimage(&img[7], "res/標記.jpg", 60, 60);loadimage(&img[8], "res/空.jpg", 60, 60);loadimage(&img[9], "res/雷.jpg", 60, 60); }void drawMap() //之前 printf-->換成貼圖 {for (int i = 0; i < 10; ++i){for (int j = 0; j < 10; ++j){//printf("%d\t", map[i][j]);if (map[i][j] <= 9){putimage(j * 60, i * 60, &img[8]);continue;}switch (map[i][j]){case 10:putimage(j * 60, i * 60, &img[0]); break;case 11:putimage(j * 60, i * 60, &img[1]); break;case 12:putimage(j * 60, i * 60, &img[2]); break;case 13:putimage(j * 60, i * 60, &img[3]); break;case 14:putimage(j * 60, i * 60, &img[4]); break;case 15:putimage(j * 60, i * 60, &img[5]); break;case 16:putimage(j * 60, i * 60, &img[6]); break;case 19:putimage(j * 60, i * 60, &img[9]); break; //雷}}//printf("\n");} }//數組 0 1 2 --6 直接貼數字 // 9 貼雷void play()//鼠標點擊 {MOUSEMSG msg;// 定義變量 存放鼠標信息msg = GetMouseMsg();//接受鼠標消息switch (msg.uMsg)//判斷鼠標消息{case WM_LBUTTONDOWN://表示左鍵按下//判斷按下的位置是什么int i = msg.y / 60;int j = msg.x / 60;//對應的數組下標if (map[i][j] >= 10) break;//翻開過 直接結束else if (map[i][j] == 9){//雷map[i][j] += 10;}else if (map[i][j] == 0){//翻開周圍的一片for (int m = i - 1; m <= i + 1; ++m){for (int n = j - 1; n <= j + 1; ++n){if (m >= 0 && m < 10 && n >= 0 && n < 10 && map[m][n] <= 9){map[m][n] += 10;//翻開}}}}else{map[i][j] += 10;}break;} }//判斷輸贏 輸贏 判斷結果 0 表示輸 1表示贏 2表示可以繼續 int win() {//輸表示出現一個翻開的雷//判斷有沒有存在沒有翻開的數字int nums = 0;//統計沒有翻開的數字的個數for (int i = 0; i < 10; ++i){for (int j = 0; j < 10; ++j){if (map[i][j] == 19) return 0;//表示有翻開的雷 游戲結束if (map[i][j] <= 6) nums++;//每次遇到沒有翻開的數字 nums加1}}if (nums == 0) return 1;//所有的數字已經翻開并且沒有踩到雷return 2; } int main() {//圖形庫 做界面initgraph(600,600); //新建窗口 圖片大小 60*60srand((unsigned)time(NULL));//設置隨機數種子 保證生成的數字隨機//rand();//生成隨機數 沒有負數init();drawMap();int wins;while (1){play();drawMap();wins = win();if (wins == 1){//贏MessageBox(GetHWnd(), "Good", "GG", MB_OK);break;}else if (wins == 0){//輸MessageBox(GetHWnd(), "SORRY", "BAD", MB_OK);break;}}//getchar();closegraph();//關閉窗口return 0; }5.顯示效果及運用的圖片:
6.總結:
? ?這款掃雷游戲非常適合剛剛入門的小白朋友們,它能使小白更加了解循環以及數組的運用。希望這個小項目對大家有幫助,這里我加用了圖形庫,是界面更加優化與美觀,需要完成的朋友們請在做項目前先下好C語言的圖形庫哦!即:EasyX。如果各位小白朋友們想進一步了解C/C++的話,歡迎大家進群交流哦!群號我會在評論下方給出。
總結
以上是生活随笔為你收集整理的C语言小白适合入门的项目——扫雷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux——常用指令
- 下一篇: Zabbix配置模板监控指定服务器主机