利用字串和終端模擬掃雷遊戲.
組成棋盤的陣列比實際棋盤大兩個單位, 用於顯示座標軸
遞迴模擬掃雷棋盤成片顯示
利用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,其他地方...