<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
對於C語言學習者來說,在完成C語言初級學習之後,掃雷遊戲是一個很好的知識的總結和練習。
掃雷即在一個棋盤中,隨機放入一定數量的雷,玩家通過輸入座標,得到座標上的資訊(以此點為中心四周8個格子內地雷數量的總和),來判斷此格子是否有地雷,從而依照此法排查出整個棋盤上所有的地雷。
本專案採用9*9的棋盤,放入地雷的數量可以依照個人設定。
首先宣告總的標頭檔案
#ifndef _UTILI_H_ #define _UTILI_H_ #include<stdio.h> #include<time.h> //後面需要地雷的隨機放置,需要時間函數 #endif /* _UTILI_H_ */
接下來我們需要對整個專案所有需要用的函數進行宣告,放置在一個標頭檔案中:
#ifndef _GAME_H_ //條件編譯 #define _GAME_H_ #include"utili.h" #define QUIT 0 //0退出 1 進入遊戲 #define GAME 1 #define ROW 9 //定義9*9的掃雷介面 #define COL 9 #define ROWS ROW+2 //左右兩邊加1行1列,為了統計周圍雷個數 #define COLS COL+2 #define GAME_LEVEL 20 void InitBoard(char board[ROWS][COLS], char set); //設定介面 void DisplayBoard(char board[ROWS][COLS], int row, int col); //展示介面 void SetMine(char mine[ROWS][COLS], int row, int col); //設定雷 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); //找雷 void StartGame(); #endif /* _GAME_H_ */
整個遊戲各個部分功能進行編寫程式碼,分別實現不同的功能:
#include"Game.h" void InitBoard(char board[ROWS][COLS], char set) //初始化棋盤,在後臺執行掃雷任務時 { for(int i=0; i<ROWS; ++i) //實際上是在11 * 11 的棋盤 上進行的 { for(int j=0; j<COLS; ++j) { board[i][j] = set; } } } void DisplayBoard(char board[ROWS][COLS], int row, int col) { for(int i=0; i<=row; ++i) //在介面顯示時,我們的棋盤實際展示的時9 * 9的介面 { printf("%d ", i); } printf("n"); for(int i=1; i<=row; ++i) { printf("%d ", i); for(int j=1; j<=col; ++j) { printf("%c ", board[i][j]); } printf("n"); } } void SetMine(char mine[ROWS][COLS], int row, int col) { int count = GAME_LEVEL; srand(time(0)); //通過亂數獲得棋盤上隨機的地雷放置 while(count) { int x = rand() % row + 1; //1 ~ ROW //取餘,保證放置在棋盤內 int y = rand() % col + 1; //1 ~ COL if(mine[x][y] == '0') { mine[x][y] = '1'; //有地雷的格子內0被賦值為1,但注意這個1為字元 count--; } } } int GetMineCount(char mine[ROWS][COLS], int x, int y) //獲得以格子為中心周圍8個格子地雷數 { return mine[x-1][y-1] + mine[x-1][y] + mine[x-1][y+1] + mine[x][y-1] + mine[x][y+1] + mine[x+1][y-1] + mine[x+1][y] + mine[x+1][y+1] - (8*'0'); //將字元轉換為數位 } void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int win = 0; int x, y; while(win < row*col-GAME_LEVEL) //判斷贏的條件 { printf("請輸入要排雷的位置:>"); scanf("%d %d", &x, &y); if(x<1||x>row || y<1 || y>col) { printf("輸入的排雷位置非法,請重新輸入.....n"); continue; } if(mine[x][y] == '1') { printf("很遺憾,你被Over.n"); DisplayBoard(mine, ROW, COL); break; } //統計雷的個數 int count = GetMineCount(mine, x, y); show[x][y] = count + '0'; system("cls"); DisplayBoard(show, ROW, COL); win++; } if(win >= row*col-GAME_LEVEL) { printf("恭喜你,排雷成功.n"); } } void StartGame() { //定義棋盤 char mine[ROWS][COLS]; char show[ROWS][COLS]; //初始化棋盤 InitBoard(mine, '0'); InitBoard(show, '*'); //埋雷 SetMine(mine, ROW, COL); //顯示棋盤 DisplayBoard(show, ROW, COL); //掃雷 FindMine(mine, show, ROW, COL); }
編寫主函數:
#include"Game.h" int main(int argc, char *argv[]) { int select = 1; while(select) { printf("*************************************n"); printf("* 簡 易 掃 雷 遊 戲 *n"); printf("*************************************n"); printf("* [1] Play *n"); printf("* [0] Quit *n"); printf("*************************************n"); printf("請選擇:>"); scanf("%d", &select); if(select == QUIT) break; if(select != GAME) { printf("輸入的操作有誤,請重新輸入......n"); continue; } //開始遊戲 StartGame(); } printf("遊戲結束,拜拜.n"); return 0; }
程式碼在VS2015上正常執行,整個遊戲過程沒出現問題。
遊戲還可以有許多改進的地方,如增加計時功能,點到附件無雷的格子時展示所有相鄰的無雷格子等,後續還可以豐富完善。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45