掃雷遊戲 C實現

2021-09-23 01:31:21 字數 2958 閱讀 9097

相信掃雷遊戲對於這一代的我們來說並不陌生,小學中學階段在沒有網路的學校機房可沒少玩吧?!以前,我們是以乙個使用者的角度來接觸它的,那麼,作為即將成為程式猿的我們來說,何不妨試試以開發者的角度來接觸它呢?!

————————————————————————————————————————————

先來分析一下掃雷程式的大體思路及框架:

1、要實現掃雷程式,需要有乙個在每一局中固定的埋雷陣列,表示雷的真實分布的位置

2、需要有乙個為使用者顯示所輸入的點的周圍埋雷的總數

其實,只要完成以上兩點並加以填充即可實現掃雷的簡單程式,但是,為了使程式更加的合理,我們一般對其還有以下要求:

1、第一次排雷時不能被炸

2、每次排雷過程中都會展開乙個區塊的的埋雷分布

下面,我們對其進行詳解,先看圖

我們需要定義兩個如此的二維陣列,乙個儲存雷的真實位置,另乙個儲存點的周圍雷區分布情況,並且,對於使用者而言,遊戲介面是上圖中間的藍區,因為要對邊上的點統計以其為中心所在九宮格外圍的八個座標埋雷情況,所以,如此的話,對於問題的求解更加有效!

先附圖,程式執行中真實的棋盤列印結果如下:

一、陣列的初始化

char mine[row][col];  //負責儲存埋雷座標,進行判斷或修改

char board[row][col]; //為玩家展示埋雷狀況,與玩家進行互動

//初始化兩個陣列

memset(mine, '0', sizeof(mine)); //mine中初始值為'0'

memset(board, '*', sizeof(board)); //board中初始值為'*'

二、埋雷
void setmine(char mine[col], int row, int col)

//mine中儲存的為'0' / '1',都是以字元形式儲存,最後返回的結果為字元'0' - '8'中的之一

四、遊戲進行時的主幹程式
while (1)

}break;

}if (mine[x][y] == '0')

else}}

else

} else

}

五、展開某點周圍的埋雷情況
void openmine(char mine[row][col], char board[row][col], int x, int y)  //展開選中座標周圍的空間附近埋雷情況

if (mine[x - 1][y] == '0')

if (mine[x - 1][y + 1] == '0')

if (mine[x][y - 1] == '0')

if (mine[x][y + 1] == '0')

if (mine[x + 1][y - 1] == '0')

if (mine[x + 1][y] == '0')

if (mine[x + 1][y + 1] == '0')

}

如此,就將乙個較大的程式分成乙個乙個子塊,只要用一定的遊戲邏輯將其相互銜接起來,掃雷程式就完成了,所以,務必將其間的內在邏輯聯絡搞清楚,就ok了

下面,遊戲**附上:

我將其以分檔案形式寫成的,三個檔案分別為mine.h/mine.c/main.c

標頭檔案mine.h

#ifndef _mine_h_

#define _mine_h_

#include#include#include#define row 12 //行 10+2

#define col 12 //列 10+2

#define mine_num 20 //買下雷的數目

#define total 10*10 //10*10有效的空間

#pragma warning (disable:4996)

void game();

int getrandindex(int start, int end);

void setmine(char mine[col], int row, int col);

char getmines(char mine[col], int row, int col);

void showboard(char board[col], int row, int col);

void openmine(char mine[row][col], char board[row][col], int x, int y);

#endif

主檔案main.c

#include "mine.h"

void menu() //選單函式, 顯示導向

int main()

} system("pause");

return 0;

}

遊戲檔案mine.c

#include "mine.h"

int getrandindex(int start, int end) //獲取隨機值作為雷的橫縱座標【1,10】

void setmine(char mine[col], int row, int col)

}break;

}if (mine[x][y] == '0')

else}}

else

} else

} sleep(1000);

system("cls");

}

c 實現掃雷遊戲

設計思路 定義乙個結構體,裡面存放每乙個格仔是否被翻開,已經地雷和格仔周圍地雷數量。用結構體定義乙個二維陣列,隨機放入特定數量的地雷。玩家輸入要翻開的格仔的行數和列數。用乙個函式來翻開目標格仔,如果是地雷遊戲失敗,否則用乙個函式統計目標格仔周圍的地雷數。如果周圍沒有地雷,則遞迴使用乙個函式將附近周圍...

C實現掃雷小遊戲

直接上傳 這是乙個 game.h 標頭檔案 ifndef game h define game h include include define row 9 define col 9 define count 10 define rows 11 define cols 11 void initboa...

c 實現掃雷遊戲 初學

全域性變數定義地圖和一些判斷資訊 建立三個地圖 分別表示 源地圖 顯示的效果地圖 和乙個用來判斷點位是否被選中的地圖 玩家輸入要翻開的格仔的行數和列數。用乙個函式來翻開目標格仔,如果是地雷遊戲失敗,可以選擇是否重新遊戲並且重新整理乙個新的隨機地圖,否則用乙個函式統計目標格仔周圍的地雷數。如果周圍沒有...