C語言實現控制台「掃雷」小遊戲

2021-10-10 05:50:52 字數 2992 閱讀 5608

根據以往的遊戲經驗,我們能首先可以確定掃雷遊戲勝利的規則是:翻開所有不是雷的區域才能算是勝利。

接下來我們需要確定整個程式的設計思路:

1.首先,我們定義兩個9*9的二維數還是未翻開的狀態組。第乙個陣列用來表示雷區地圖的展開情況,即每個素組元素的位置的狀態是處於展開狀態還是未展開狀態,我們命名為showmap()。第二個陣列我們用來表示地雷的分布情況,素組中的每個元素位置都被標記為是否為地雷,我們命名為minmap()。

2.初始化兩個地圖,並將地圖列印出來。

3.玩家通過輸入二維陣列的座標進行位置輸入,翻開地圖位置。

4.判斷玩家輸入的位置是否合法。

5.判斷玩家輸入的位置是否有地雷,如果有地雷則直接宣布遊戲結束;若果沒有地雷則繼續進行遊戲。

6.如果繼續遊戲,則玩家輸入的位置處會顯示附近地雷的個數。

第一步,此處通過構造menu()函式搭建乙個簡單的互動選單和玩家互動,用來判斷是否開始進行一局遊戲。

#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.定義兩個適當大小的雷陣,乙個用來埋雷,判...