根據以往的遊戲經驗,我們能首先可以確定掃雷遊戲勝利的規則是:翻開所有不是雷的區域才能算是勝利。
接下來我們需要確定整個程式的設計思路:第一步,此處通過構造menu()函式搭建乙個簡單的互動選單和玩家互動,用來判斷是否開始進行一局遊戲。1.首先,我們定義兩個9*9的二維數還是未翻開的狀態組。第乙個陣列用來表示雷區地圖的展開情況,即每個素組元素的位置的狀態是處於展開狀態還是未展開狀態,我們命名為showmap()。第二個陣列我們用來表示地雷的分布情況,素組中的每個元素位置都被標記為是否為地雷,我們命名為minmap()。
2.初始化兩個地圖,並將地圖列印出來。
3.玩家通過輸入二維陣列的座標進行位置輸入,翻開地圖位置。
4.判斷玩家輸入的位置是否合法。
5.判斷玩家輸入的位置是否有地雷,如果有地雷則直接宣布遊戲結束;若果沒有地雷則繼續進行遊戲。
6.如果繼續遊戲,則玩家輸入的位置處會顯示附近地雷的個數。
#define _crt_secure_no_warnings
#include
#include
//巨集定義
#define max_row 9
#define max_col 9
#define default_mine_count 10
intmenu()
intmain()
else
if(choice ==0)
else
}system
("pause");
return0;
}
第二步,對第一步中呼叫的game()函式進行構造。game()函式為核心功能函式,其主要任務是完成基本流程。
1.構建init()函式,對兩個二維陣列進行初始化操作。初始化 showmap, 將陣列所有元素全都設為 * 。初始化 minemap, 先全設為 『0』, 然後隨機生成 n 個 『1』 ,此處的』1』就代表地雷, n 的值就是 default_mine_count,也就是地雷的數量。
void
init
(char showmap[max_row]
[max_col]
,char minemap[max_row]
[max_col])}
for(
int row =
0; row < max_row; row++)}
int n = default_mine_count;
while
(n >0)
minemap[row]
[col]
='1'
; n--;}
}
2.構建printmap()函式,該函式負責列印顯示地圖,需要注意的是,大部分情況下列印的都是 showmap, 但是在 gameover 的時候, 就需要列印 minemap。
void
printmap
(char themap[max_row]
[max_col]
)printf
("\n");
printf
("--+------------------\n");
for(
int row =
0; row < max_row; row++
)printf
("\n");
}}
3.構建updateshowmap()函式,用於根據當前 輸入的(row, col) 的位置, 計算出當前位置周圍有幾個雷, 並且更新顯示到 showmap 中。
void
updateshowmap
(char showmap[max_row]
[max_col]
,char minemap[max_row]
[max_col]
,int row,
int col)
if(minemap[r]
[c]==
'1')}}
// 此時 count 裡面就已經存好了 (row, col )周圍八個格仔裡的雷的個數。
// 把這個結果寫到 showmap 中即可。
// 需要把數字 count 轉成對應的字元,例如: count 為 2, 就需要轉成 '2' (ascii 50)
showmap[row]
[col]
= count +
'0';
}
最後,我們整合以下功能函式就得到了我們的game()函式。
void
game()
;char minemap[max_row]
[max_col]=;
init
(showmap, minemap)
;int openedblockcount =0;
while(1
)if(showmap[row]
[col]
!='*'
)// 3. 判定該位置的座標是否是地雷. 如果是地雷, 直接 gameover。
if(minemap[row]
[col]
=='1'
)// 4. 如果不是地雷, 統計當前位置周圍雷的個數, 並顯示到地圖上。
updateshowmap
(showmap, minemap, row, col)
;// 5. 判定遊戲是否勝利,核心邏輯應該是判斷當前是不是把所有不是雷的位置都翻開了
//此處可以記錄翻開的格仔的個數。
openedblockcount++;if
(openedblockcount == max_row * max_col - default_mine_count)
}}
C 實現掃雷小遊戲(控制台版)
程式功能 提供三種模式 初級 中級 高階 操作模式 wsad控制游標移動,空格鍵開啟方塊 提供掃雷地圖的類 map.h ifndef map h define map h define max length 32 可以提供的地圖最大長度 define max width 18 可以提供的地圖最大寬度...
C語言實現掃雷小遊戲
我們首先說一下基本思路 首先我們需要兩個面板,乙個顯示面板,乙個雷面板,這兩個面板需要用二維陣列來實現。其次,要在雷面板中布置雷,然後需要輸入座標,排查雷,繼而判斷是否踩到雷,如果踩到雷,那麼玩家死翹翹,遊戲結束,如果沒有踩到雷,需要判斷此座標周圍雷的個數。如果最後設定雷的總個數全部被排查出來,那麼...
C語言實現掃雷小遊戲
本文將從一行行 中詳解掃雷小遊戲,對每乙個模組都使用詳細的注釋,使這個掃雷小遊戲簡單易懂。首先,簡單分析掃雷的玩法,掃雷就是在乙個棋盤中布置適當數量的雷數玩家通過對雷陣的排查,來找出雷的位置。如果玩家選擇的座標周圍無雷將自動展開這片區域,若有雷會顯示雷數。1.定義兩個適當大小的雷陣,乙個用來埋雷,判...