C語言實現掃雷 含棋盤擴充套件

2021-10-19 05:40:08 字數 2891 閱讀 4411

利用字串和終端模擬掃雷遊戲.

組成棋盤的陣列比實際棋盤大兩個單位, 用於顯示座標軸

遞迴模擬掃雷棋盤成片顯示

利用c語言的特性分割各個功能

棋盤大小, 難度均可擴充套件

gif錄製工具: licecap

為了方便演示, 在一開始先輸出了雷的座標(1有, 0無). 可以在整體邏輯裡去掉這一段.

第一次輸入: 演示棋盤的拓展功能, 模擬掃雷點一下如果周圍沒雷則出一片的效果

第二次輸入: 演示正常周圍有雷的效果

第三次輸入: 演示碰到雷的效果.

整體邏輯, 迴圈play, 想拓展可以在標頭檔案加上不同的mode引數, 再在main裡讓使用者每次選擇.

#include

"game.h"

void

menu()

//mine為隱式棋盤, 作為一開始設定雷的標識, 1為有雷, 0為無雷

//show是顯式棋盤,輸出給使用者, *代表沒被探索過的位置點位, 數字代表輸入點位周圍的雷的數量

//第一行和第一列為座標

void

game()

intmain()

}while

(input)

;return0;

}

可以通過define不同的模式來讓使用者在開始時選擇難度

這裡只define了簡單模式, 也就是10個雷

#define row 9

#define col 9

#define rows row + 2

#define cols col + 2

#define easy_mode 10

//雷的數量

#include

#include

#include

#include

#include

//初始化棋盤

void

initboard

(char board[rows]

[cols]

,char ch)

;void

displayboard

(char board[rows]

[cols]);

//布置雷

void

setmine

(char board[rows]

[cols]

,int count)

;//排雷

void

findmine

(char mine[rows]

[cols]

,char show[rows]

[cols]

,int minecount)

;

#include

"game.h"

//初始化棋盤

void

initboard

(char board[rows]

[cols]

,char ch)}}

//輸出棋盤, 注意第一行和第一列要輸出的是座標

void

displayboard

(char board[rows]

[cols]

)putchar

('\n');

for(

int i =

1; i <= row; i++

)putchar

('\n');

}}//利用隨機數布置棋盤, row col是實際上棋盤的大小

void

setmine

(char board[rows]

[cols]

,int count)}}

//遞迴擴充套件棋盤, 模擬掃雷的點一下出一片的情況.

//每次檢查都遞迴當前點的周圍8個點位.

//每個檢查過的點位不可再檢查, 否則就是無限遞迴下去, 所以這裡show的值一直在變化

//這樣不僅輸出的時候棋盤有變化, 同時可以用show的值作為標記, 跳出遞迴.

void

getminecount

(char mine[rows]

[cols]

,char show[rows]

[cols]

,int x,

int y)

if(show[x -1]

[y -1]

=='*')if

(show[x]

[y -1]

=='*')if

(show[x +1]

[y -1]

=='*')if

(show[x +1]

[y]==

'*')

if(show[x +1]

[y +1]

=='*')if

(show[x]

[y +1]

=='*')if

(show[x -1]

[y +1]

=='*')}

else}}

//排雷, 使用者輸入座標, 如果沒碰雷, 輸出周圍雷的個數, 如果周圍沒雷, 遞迴拓展尋找範圍

//如果碰到雷跳出遊戲迴圈, 回到開始介面.

void

findmine

(char mine[rows]

[cols]

,char show[rows]

[cols]

,int minecount)

else

}else

//檢查雷是否全部排除

if(win == row * col - minecount)

}}

C語言實現掃雷

思路,建立兩個二維陣列,乙個作為雷區,乙個作為顯示區,雷區只在程式結束時顯示。每次使用者操作後重新整理顯示區的陣列成員。建立雷區二維陣列12 12,顯示區二維陣列10 10,用 0 代表安全區,1 代表雷區。雷區的陣列長度設定比顯示區的陣列長度多2,方便邊框區域計算周圍地雷數量。標頭檔案宣告 inc...

C語言實現掃雷

首先來講一講掃雷的規則 隨便點乙個格仔,會有一塊,上面的數字就代表數字周圍八個格仔會有幾個雷,是1他周圍就只有1個雷,2就有兩個雷 寫 的時候要注意構思 的框架,每個函式實現的意義在 中都有體現,首先看一下頭檔案game.h define row 9 define col 9 include inc...

c語言實現掃雷

void menu 樸實無華的選單 因為我們這裡要有乙個陣列來存放雷,乙個陣列給玩家看,所以在這裡我們用兩個陣列,給我們設定雷的我們暫且稱為my board,給玩家看的稱為y board,如下 示例 char ret 0 在這裡建立兩個陣列自己看的叫my board,將要放置雷的地方置為1,其他地方...