摘要:條消息語言入門三子棋語言實(shí)現(xiàn)詳細(xì)版的博客博客條消息語言入門三子棋語言實(shí)現(xiàn)詳細(xì)版的博客博客我們將雷盤初始化為統(tǒng)一的符號(hào)。
?首先我們需要一個(gè)空的雷盤,在其中隨機(jī)埋入十枚雷,當(dāng)我們排這顆雷時(shí),若此位置為雷,則游戲失敗,若不是雷,則會(huì)出現(xiàn)周圍八個(gè)方格中雷的個(gè)數(shù),我們使用數(shù)組實(shí)現(xiàn)這一目標(biāo)。
首先我們需要打印一個(gè)菜單,并且接受用戶的輸入數(shù)據(jù),判斷是否進(jìn)行游戲,如三子棋一樣,具體代碼如下:
void test(){ int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請選擇:>"); scanf("%d", &input); switch (input) { case 1: //掃雷 game(); break; case 0: printf("退出游戲/n"); break; default: printf("選擇錯(cuò)誤/n"); break; } } while (input);}
void menu(){ printf("***********************/n"); printf("***** 1. play ****/n"); printf("***** 0. exit ****/n"); printf("***********************/n");}
然后需要設(shè)置一個(gè)空盤,我們設(shè)置一個(gè)基礎(chǔ)班9*9的雷盤,(注意!!!當(dāng)我們排查的雷格在邊緣時(shí),若要統(tǒng)計(jì)周圍八個(gè)方格中雷的個(gè)數(shù),則會(huì)產(chǎn)生數(shù)組越界的問題,所以我們初始化時(shí)設(shè)置一個(gè)11*11的空盤,再在其中的9*9的空盤里設(shè)置雷),同三子棋一樣,我們?yōu)榱撕罄m(xù)代碼維護(hù)方便,我們使用define定義棋盤大小(若對三子棋有興趣可移步我的另一篇博客。(14條消息) 《C語言入門》三子棋C語言實(shí)現(xiàn)(詳細(xì)版)_m0_60756071的博客-CSDN博客)
我們將雷盤初始化為統(tǒng)一的符號(hào)。
下面是部分代碼:
#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = set; } }}
接下來我們對雷盤行列進(jìn)行編號(hào)
void DisplayBoard(char board[ROWS][COLS], int row, int col){ //1~9 int i = 0; int j = 0; //列號(hào)的打印 for (i = 0; i <= col; i++) { printf("%d ", i); } printf("/n"); for (i = 1; i <= row; i++) { printf("%d ", i);//打印行號(hào) for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("/n"); }}
這樣我們可以打印出這樣一個(gè)雷盤
?接下來我們需要在棋盤中隨機(jī)設(shè)置10顆雷,同樣利用前文代碼中提到的srand,我們使用rand()%9+1便可得到1~9的數(shù)字,正好在我們設(shè)置雷的范圍內(nèi),具體代碼如下:
void SetMine(char mine[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}
這是一個(gè)隱藏的棋盤,我們將雷設(shè)置在這里面,有雷的數(shù)組元素設(shè)置為‘1’,沒有雷的位置設(shè)置為‘0’。接下來則是玩家進(jìn)行排雷操作,我們編寫一個(gè)函數(shù),返回玩家所選位置周圍八個(gè)格子里雷的個(gè)數(shù)(也就是數(shù)組里為字符‘1’的個(gè)數(shù)),這里我們巧妙地使用"0"特殊值實(shí)現(xiàn)這一目標(biāo),具體代碼如下:
static int get_mine_count(char mine[ROWS][COLS], int x, int y){ return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * "0";}
這時(shí)候我們就進(jìn)行到了最后一步,我們將再編寫一個(gè)函數(shù),在此函數(shù)中調(diào)用上面那個(gè)函數(shù),來判斷用戶輸入坐標(biāo)后的輸贏或繼續(xù)與否。具體代碼如下:
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){ int x = 0; int y = 0; int win = 0; while (win < row * col - EASY_COUNT) { printf("請輸入要排查的坐標(biāo):>"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("很遺憾你被炸死了/n"); DisplayBoard(mine, row, col); break; } else { //計(jì)算x,y坐標(biāo)周圍有幾個(gè)雷 int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入坐標(biāo)非法,無法排雷,請重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功/n"); DisplayBoard(mine, row, col); }}
好了,到了這一步分塊代碼大致完成,我們將代碼整合到一起就可以實(shí)現(xiàn)掃雷小游戲。
完整代碼請見c語言/2021.11.21 · 吳昌盛/code - 碼云 - 開源中國 (gitee.com)
我們在掃雷游戲中巧妙地設(shè)置了更大的空盤來避免數(shù)組越界的問題,使用兩個(gè)雷盤,一個(gè)埋雷,另一個(gè)打印顯示給玩家,讓玩家排雷,在統(tǒng)計(jì)周圍雷的個(gè)數(shù)的時(shí)候巧妙的使用了return返回。
感謝大家的閱讀,歡迎各位的評(píng)論討論,也感謝各位的點(diǎn)贊,祝大家萬事如意!!!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/124095.html
摘要:上一期咱們用語言實(shí)現(xiàn)了三子棋的小游戲語言實(shí)現(xiàn)三子棋今天我們再來寫個(gè)掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實(shí)現(xiàn)了三子棋的小游戲? C語言實(shí)現(xiàn)三子棋? ? ? ?今天我們再來寫個(gè)掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:有雷則返回雷數(shù)難度設(shè)置其實(shí)實(shí)現(xiàn)思路比較簡單,可以再設(shè)置和。 知識(shí)提要(自主編寫游戲所需要的知識(shí)): 1.函數(shù)的基本實(shí)現(xiàn); 2.二維數(shù)組; 目錄 掃雷 1.基本界面的實(shí)現(xiàn) 2.初始化棋盤(二維數(shù)組) 3.棋盤的打印 4.布置雷 5.安全保護(hù) 6.雷數(shù)顯示 7.排查雷 8.標(biāo)記雷 9.展開 10...
摘要:函數(shù)游戲菜單請選擇掃雷游戲退出游戲選擇錯(cuò)誤解析函數(shù)內(nèi)部利用時(shí)間戳,形成隨機(jī)數(shù),主要目的是實(shí)現(xiàn)游戲中地雷的隨機(jī)埋放。 前言 本篇文章使用C語言實(shí)現(xiàn)簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數(shù)人都玩過或者了解過掃雷的游戲規(guī)則,但是在這里,我們在一起重溫一下掃雷的游戲規(guī)則,也更好...
摘要:玩家選擇開始游戲后,出現(xiàn)雷盤,并且隨機(jī)布置雷。雷盤的數(shù)組大小為,方便計(jì)算掃雷時(shí)周圍雷的數(shù)量,并防止數(shù)組越界。放置布置的雷的信息放置排查出雷的信息初始化雷盤初始化展示界面打印展示界面效果如下布置雷隨機(jī)在數(shù)組中讓十個(gè)變成作為雷。 目錄 前言 一、游戲思路 二、游戲框架 1.菜單界面 1.菜單:...
摘要:目錄前言前言前期的準(zhǔn)備前期的準(zhǔn)備游戲代碼的具體實(shí)現(xiàn)游戲代碼的具體實(shí)現(xiàn)完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結(jié)總結(jié)前言掃雷是一款大眾類的益智小游戲,于年發(fā)行。 目錄 前言 前期的準(zhǔn)備 游戲代碼的具體實(shí)現(xiàn) 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...
閱讀 3093·2021-11-22 09:34
閱讀 593·2021-11-22 09:34
閱讀 2436·2021-10-08 10:18
閱讀 3372·2021-09-22 15:57
閱讀 2585·2021-09-22 15:25
閱讀 2398·2019-08-30 15:54
閱讀 2092·2019-08-30 15:44
閱讀 1799·2019-08-29 11:18