C語言掃雷游戲?qū)崿F(xiàn)方法詳解(包含遞歸,變色,記錄時間等)
前言:
本期需要用到大量自定義函數(shù)
可以很好的練習(xí)函數(shù)
代碼內(nèi)均有注釋可查看
最終代碼放在結(jié)尾
一、掃雷游戲簡介
勝利條件:
你需要在不點錯雷的情況下盡可能快的將所有的雷都標(biāo)記出來,
如果你點錯,就得重新開始,所以掃雷也有一定的運氣成分。
如何操作:
可翻開這一格,也可標(biāo)記地雷
你點出了一個數(shù)字,
是1,就說明它周圍的8的格子里有1個雷,
是2就有兩個雷,是3就有三個雷···以此類推。
但如果你標(biāo)記錯了雷,那就會"boom!"一切重新開始。

OK,知道了游戲規(guī)則,那么該如何設(shè)計游戲呢?
二、掃雷游戲的設(shè)計思路
1.創(chuàng)建游戲菜單。
2.初始化棋盤。
3.隨機布置雷。
4.打印出棋盤。
5.操作:排查雷,標(biāo)記雷,或取消標(biāo)記雷。
7.循環(huán),直到游戲結(jié)束。
8.當(dāng)然其中的細節(jié)處還有很多,帶著你一步一步實現(xiàn)。
三、代碼的逐步實現(xiàn)
1.創(chuàng)建頭文件以及源文件
在我們寫代碼時,若代碼很長很復(fù)雜
可以設(shè)置多個文件來拆分代碼
我這里創(chuàng)造了三個文件:
頭文件—game.h
用來放函數(shù)的聲明和一些庫函數(shù)的頭文件
源文件–game.c
用來放函數(shù)的定義
(游戲代碼的主體)
源文件–main.c
用來放主函數(shù)
這樣條理就很清晰也不會亂

當(dāng)然,當(dāng)聲明寫在game.h中時,不要忘記在源文件調(diào)用game.h
在源文件頂部寫上#include“game.h"就行啦
如下
#include"game.h"
2.創(chuàng)建主函數(shù)main
寫出創(chuàng)建游戲主體
這里我用了一個do while循環(huán)來判斷是否繼續(xù)游戲
int main()
{
do
{
char x = 0;
menu();
//打印菜單
scanf("%d", &g);
switch (g)
{
case 1:
game();
//進入游戲
break;
case 0:
printf("退出\n");
//退出游戲
break;
default:
printf("輸入錯誤,請重新輸入\n");
break;
}
} while (g);
return 0;
}
3.創(chuàng)建游戲菜單
這沒什么好說的,創(chuàng)建一個菜單
當(dāng)然大家也可以設(shè)計出更好看的菜單
void menu()//打印菜單
{
printf("**********************\n");
printf("****** 掃 雷 ******\n");
printf("**********************\n");
printf("***** 1.開 始 *****\n");
printf("***** 0.退 出 *****\n");
printf("**********************\n");
printf("請輸入 1 或 2 \n\n");
printf("請輸入:>> ");
}
4、初始化棋盤
首先,掃雷是一個9*9的矩形
那我們可以想到用二維數(shù)組來放置雷
用” * “來表示雷,用” 0 “來表示非雷
排查雷的時候就判斷周圍有幾個雷就顯示數(shù)字幾
但是有一個問題,如果我要排查邊框的雷的時候,如下:
此時就會出現(xiàn)數(shù)組的越界訪問的問題
故為了防止越界,我們在設(shè)計的時候,需給數(shù)組擴大一圈
雷布置在中間的9 * 9的格子內(nèi),但是周圍擴大一圈,這樣就解決了越界的問題。
所以我們將存放數(shù)據(jù)的數(shù)組創(chuàng)建成11 * 11最合適

還有,我們需要將排查出的雷的數(shù)量信息記錄存儲,并打印出來作為排雷的重要參考信息。但是雷的個數(shù)信息存放在哪里呢?如果存放在布置雷的數(shù)組中,這樣雷的信息和雷的個數(shù)信息就會產(chǎn)生混淆和打印上的困難。
所以,我們需要設(shè)置兩個棋盤,給?個棋盤(mine)存放布置好的雷的信息,再給另外?個棋盤(show)存放排查出的雷的信息。這樣就互不干擾了,把雷布置到mine數(shù)組,在mine數(shù)組中排查雷,排查出雷的數(shù)據(jù)存放在show數(shù)組,并且打印出來。
還有一點,這兩個數(shù)組既要存放字符" * ",又要存放數(shù)字
故我們可以設(shè)置字符數(shù)組來存放信息
OK,現(xiàn)在就可以開始寫代碼了
在game.h頭文件寫到:
#define ROW 9 #define COL 9 //定義9*9小邊框 #define ROWS ROW+2 #define COLS COL+2 //定義11*11大邊框 void SetBoard(char board[ROWS][COLS], int rows, int cols, char set); //聲明SetBoard函數(shù)(初始化棋盤)
在game.c源文件中寫到:
void SetBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
在main.c源文件中寫到:
char mine[ROWS][COLS];//放置雷 char show[ROWS][COLS];//展示信息 //定義數(shù)組大小 SetBoard(mine, ROWS, COLS, '0');//放置雷 SetBoard(show, ROWS, COLS, '*');//展示信息 //初始化數(shù)組,傳入要初始化的值
5、放置雷(隨機數(shù)的應(yīng)用)
這里需要注意,每一把游戲的雷位置是隨機的
故我們要在這里設(shè)置一個隨機數(shù)來隨機擺放雷
要使用到rand函數(shù),頭文件為<stdlib.d>
rand的具體使用方法詳見【C語言】rand函數(shù)的應(yīng)用(隨機數(shù)的生成)
還可以去c++官網(wǎng)查看:https://legacy.cplusplus.com/
因為是在 9 * 9 的框中放置雷
故我們將 i 和 j 設(shè)置成0到8的隨機數(shù)就可以了
還要注意,已經(jīng)放置雷的格子就不能放雷了
創(chuàng)建自定義函數(shù)SetMine來放置雷
在game.h頭文件寫到:
#define EASY_COUNT 10 //設(shè)置雷的個數(shù)(10個) void SetMine(char mine[ROWS][COLS], int row, int col); //聲明SetMine函數(shù)(放置雷)
在game.c源文件中寫到:
void SetMine(char mine[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
//規(guī)定放置雷的個數(shù)
srand((unsigned int)time(NULL));
//生成隨機數(shù)
while (count)
{
int i = rand() % row + 1;//生成1-9隨機數(shù)
int j = rand() % col + 1;//生成1-9隨機數(shù)
if (mine[i][j] != '*')//若此處沒雷就放置雷
{
mine[i][j] = '*';
count--;
}
}
}
在main.c源文件中寫到:
SetMine(mine, ROW, COL); //放置雷
6、打印棋盤(設(shè)置多彩顏色)
為了使棋盤更加美觀,我們還可以增加顏色元素
如下,1,2,3,4的顏色各不相同
創(chuàng)建自定義函數(shù)DisplayBoard來打印棋盤

這里我們用到了顏色定義函數(shù):
這樣可以同時設(shè)置多種顏色
對于不同數(shù)字展現(xiàn)不同顏色
void setColor(int color)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
void red() { setColor(12); }
void green() { setColor(10); }
void yellow() { setColor(14); }
void blue() { setColor(9); }
void purple() { setColor(13); }
void cyan() { setColor(11); }
void white() { setColor(15); }
void reset() { setColor(7); }
在game.h頭文件寫到:
void DisplayBoard(char board[ROWS][COLS], int row, int col); //聲明DisplayBoard函數(shù)(打印棋盤)
在game.c源文件中寫到:
void setColor(int color)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
void red() { setColor(12); }
void green() { setColor(10); }
void yellow() { setColor(14); }
void blue() { setColor(9); }
void purple() { setColor(13); }
void cyan() { setColor(11); }
void white() { setColor(15); }
void reset() { setColor(7); }
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
printf("-------掃雷--------\n");
printf(" ");
int i = 1;
for (i = 1; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d ", i);
int j = 1;
for (j = 1; j <= col; j++)
{
switch (board[i][j])
{
case '0':
cyan();
break;
case '1':
blue();
break;
case '2':
yellow();
break;
case '3':
purple();
break;
case '4':
case '5':
case '6':
case '7':
case '8':
case 'F':
red();
break;
}
printf("%c ", board[i][j]);
reset();
}
printf("\n");
}
}
在main.c源文件中寫到:
DisplayBoard(show, ROW, COL); //打印棋盤
打印顏色后的運行結(jié)果:
這樣就有了多種顏色,使棋盤更加美觀

7、正式開始掃雷游戲
( 1 ) 規(guī)則
首先我們要打印出我們的規(guī)則,讓玩家能更好的操作
可以排查雷,可以標(biāo)記雷,也可以取消標(biāo)記雷
如下:
printf("1·排查地雷:請輸入要排查的坐標(biāo)例如‘2 4',第二行第四列\(zhòng)n");
printf("2·標(biāo)記地雷:輸入要標(biāo)記雷的坐標(biāo)例如‘2+4',注意要加'+'\n");
printf("3·取消標(biāo)記:輸入要取消標(biāo)記雷的坐標(biāo)例如‘2-4',注意要加'-'\n");
printf("請輸入:");
( 2 ) 踩雷時
當(dāng)排雷時,若踩雷了,要退出游戲,
并且打印出雷的位置,至少讓玩家知道自己是怎么死的
創(chuàng)建自定義函數(shù)DisplayBoard2來打印死亡后的棋盤
if (mine[x][y] == '*')
{
printf("\a很遺憾,\a您踩雷了,\a游戲結(jié)束\a\n");
DisplayBoard2(mine, ROW, COL);
break;
}
而且,為了更好區(qū)分出雷,雷我用了紅色顏色
void DisplayBoard2(char board[ROWS][COLS], int row, int col)
{
printf("-------掃雷--------\n");
printf(" ");
int i = 1;
for (i = 1; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d ", i);
int j = 1;
for (j = 1; j <= col; j++)
{
if (board[i][j] == '*')
{
red();
}
printf("%c ", board[i][j]);
reset();
}
printf("\n");
}
}
運行結(jié)果:

( 3 ) 沒踩雷時
若沒踩雷,就在格子上統(tǒng)計出周圍雷的個數(shù)
這里我用到了暴力統(tǒng)計
發(fā)現(xiàn)一個雷就+1
并且在棋盤上打印出信息
創(chuàng)建自定義函數(shù)GetMineCount來獲取周圍雷的個數(shù)
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
int i, j;
int count = 0;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (mine[i][j] == '*')
{
count++;
}
}
}
return count;
}
int count = GetMineCount(mine, x, y); show[x][y] = count + '0';
( 4 ) 四周沒雷時(函數(shù)遞歸)
在我們排雷時,若周圍9格均沒雷
就會返回0,但是此時周圍可以確定沒雷
再一一輸入排查就太浪費時間了
而在傳統(tǒng)掃雷中,周圍沒雷就會 ” 炸 “ 開一片
如下:

為了達到這種效果,我們可以用到函數(shù)歸遞
周圍沒雷時,自動排除周圍,若周圍還是0(沒雷),就再自動排除周圍
以此往復(fù),知道沒有可以自動排除的區(qū)塊
創(chuàng)建自定義函數(shù)Chain來炸開周圍格子
代碼實現(xiàn):
if (count == 0) Chain(mine, show, x, y, ROWS); //歸遞ROWS(邊長)次
void Chain(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y,int g)
{
int i = x - 1, j = y - 1;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (show[i][j] == '*' && i >= 1 && i <= ROW && j >= 1 && j <= COL)
//1.當(dāng)show[i][j]=="*"時再進入防止死循環(huán) 2.設(shè)置邊界防止越界訪問
{
show[i][j] = GetMineCount(mine, i, j) + '0';
if (show[i][j] == '0' && g)//當(dāng)g==0時退出
{
g--;
Chain(mine, show, i, j, g);
//設(shè)置歸遞g次,這里設(shè)置成棋盤邊長
}
}
}
}
}
最后再打印出操作完后的棋盤
(上面提到了就不贅述了)
( 5 ) 標(biāo)記和取消標(biāo)記
我這里用 x + y 表示標(biāo)記雷,用 x - y 表示取消標(biāo)記雷
標(biāo)記就把格子改成紅色F,取消就復(fù)原就行了
創(chuàng)建自定義函數(shù)Sign來標(biāo)記雷
創(chuàng)建自定義函數(shù)Unsign來取消標(biāo)記雷
else if (s == '+' && x >= 1 && x <= row && y >= 1 && y <= col) Sign(show, x, y); else if (s == '-' && x >= 1 && x <= row && y >= 1 && y <= col) Unsign(show, x, y);
void Sign(char show[ROWS][COLS], int x, int y)
{
if (show[x][y] == '*')
show[x][y] = 'F';
DisplayBoard(show, ROW, COL);
}
void Unsign(char show[ROWS][COLS], int x, int y)
{
if (show[x][y] == 'F')
show[x][y] = '*';
DisplayBoard(show, ROW, COL);
}
( 6 ) 游戲結(jié)束(所有雷已找出)
當(dāng)排查了除了雷的所有格子時,游戲結(jié)束(算上自動排查)
創(chuàng)建自定義函數(shù)Judge判斷是否掃完雷
若掃完雷時,返回0,否則返回1。
flag = Judge(show, ROW, COL);
int Judge(char show[ROWS][COLS], int row, int col)
{
int i, j, count = 0;
for (i = 1; i <= row; i++)
{
for (j = 1; j <= col; j++)
{
if (show[i][j] != '*')
{
count++;//逐個計數(shù)
if (count == row * col - EASY_COUNT)
//當(dāng)所有除了雷的所有格子掃完時
return 0;
}
}
}
return 1;
}
if (flag == 0)
{
printf("恭喜你掃雷成功!!!\n");
}
8、記錄游戲時間
以上 7、正式開始掃雷游戲的所有代碼是整個游戲過程
我們把他們合到一起(不包含自定義函數(shù))
創(chuàng)建自定義函數(shù)FindMine表示整個游戲過程
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
char s;
int x, y, flag = 1;
while (flag)
{
printf("1·排查地雷:請輸入要排查的坐標(biāo)例如‘2 4',第二行第四列\(zhòng)n");
printf("2·標(biāo)記地雷:輸入要標(biāo)記雷的坐標(biāo)例如‘2+4',注意要加'+'\n");
printf("3·取消標(biāo)記:輸入要取消標(biāo)記雷的坐標(biāo)例如‘2-4',注意要加'-'\n");
printf("請輸入:");
scanf("%d%c%d", &x, &s, &y);
printf("\n\n");
if (s == ' ' && x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '*')
{
printf("\a很遺憾,\a您踩雷了,\a游戲結(jié)束\a\n");
DisplayBoard2(mine, ROW, COL);
break;
}
else
{
int count = GetMineCount(mine, x, y);
show[x][y] = count + '0';
if (count == 0)
Chain(mine, show, x, y, ROWS);
DisplayBoard(show, ROW, COL);
flag = Judge(show, ROW, COL);
}
}
else if (s == '+' && x >= 1 && x <= row && y >= 1 && y <= col)
Sign(show, x, y);
else if (s == '-' && x >= 1 && x <= row && y >= 1 && y <= col)
Unsign(show, x, y);
else
{
printf("輸入錯誤,坐標(biāo)范圍X(1-9) Y(1-9),請重新輸入\n");
}
}
if (flag == 0)
{
printf("恭喜你掃雷成功!!!\n");
}
}
若要記錄整個游戲時間,就是自定義函數(shù)FindMine這整個代碼時間
可以在主函數(shù)中寫:
clock_t start = clock();//記錄游戲時間
{
FindMine(mine, show, ROW, COL);
}
double time = (double)(clock() - start) / CLOCKS_PER_SEC;
printf("您一共用時: %.2f 秒\n\n\n", time);
這樣就可以記下游戲時間了,精度為0.01秒
注意:記時代碼要包含頭文件<windows.h>
運行結(jié)果:(雖然這里沒成功掃雷)

四、掃雷游戲完整代碼
在game.h頭文件寫到:
(頭文件的聲明)
(以及用來放函數(shù)的聲明和一些庫函數(shù)的頭文件)
#pragma once #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define ROW 9 #define COL 9 //定義9*9小邊框 #define ROWS ROW+2 #define COLS COL+2 //定義11*11大邊框 #define EASY_COUNT 10 //設(shè)置雷的個數(shù) void SetBoard(char board[ROWS][COLS], int rows, int cols, char set); //聲明SetBoard函數(shù)(初始化棋盤) void SetMine(char mine[ROWS][COLS], int row, int col); //聲明SetMine(函數(shù)(放置雷) void DisplayBoard(char board[ROWS][COLS], int row, int col); //聲明DisplayBoard函數(shù)(打印棋盤) void DisplayBoard2(char board[ROWS][COLS], int row, int col); //聲明DisplayBoard2函數(shù)(打印失敗棋盤) void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); //聲明函數(shù)FindMine(整個游戲過程)
在game.c源文件中寫到:
(游戲主要代碼)
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void setColor(int color)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
void red() { setColor(12); }
void green() { setColor(10); }
void yellow() { setColor(14); }
void blue() { setColor(9); }
void purple() { setColor(13); }
void cyan() { setColor(11); }
void white() { setColor(15); }
void reset() { setColor(7); }
void menu()//打印菜單
{
printf("**********************\n");
printf("****** 掃 雷 ******\n");
printf("**********************\n");
printf("***** 1.開 始 *****\n");
printf("***** 0.退 出 *****\n");
printf("**********************\n");
printf("請輸入 1 或 2 \n\n");
printf("請輸入:>> ");
}
void SetBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
void SetMine(char mine[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
//規(guī)定放置雷的個數(shù)
srand((unsigned int)time(NULL));
//生成隨機數(shù)
while (count)
{
int i = rand() % row + 1;//生成1-9隨機數(shù)
int j = rand() % col + 1;//生成1-9隨機數(shù)
if (mine[i][j] != '*')//若此處沒雷就放置雷
{
mine[i][j] = '*';
count--;
}
}
}
void DisplayBoard2(char board[ROWS][COLS], int row, int col)
{
printf("-------掃雷--------\n");
printf(" ");
int i = 1;
for (i = 1; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d ", i);
int j = 1;
for (j = 1; j <= col; j++)
{
if (board[i][j] == '*')
{
red();
}
printf("%c ", board[i][j]);
reset();
}
printf("\n");
}
}
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
printf("-------掃雷--------\n");
printf(" ");
int i = 1;
for (i = 1; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d ", i);
int j = 1;
for (j = 1; j <= col; j++)
{
switch (board[i][j])
{
case '0':
cyan();
break;
case '1':
blue();
break;
case '2':
yellow();
break;
case '3':
purple();
break;
case '4':
case '5':
case '6':
case '7':
case '8':
case 'F':
red();
break;
}
printf("%c ", board[i][j]);
reset();
}
printf("\n");
}
}
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
int i, j;
int count = 0;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (mine[i][j] == '*')
{
count++;
}
}
}
return count;
}
void Chain(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y,int g)
{
int i = x - 1, j = y - 1;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (show[i][j] == '*' && i >= 1 && i <= ROW && j >= 1 && j <= COL)
{
show[i][j] = GetMineCount(mine, i, j) + '0';
if (show[i][j] == '0' && g)
{
g--;
Chain(mine, show, i, j, g);
}
}
}
}
}
int Judge(char show[ROWS][COLS], int row, int col)
{
int i, j, count = 0;
for (i = 1; i <= row; i++)
{
for (j = 1; j <= col; j++)
{
if (show[i][j] != '*')
{
count++;
if (count == row * col - EASY_COUNT)
return 0;
}
}
}
return 1;
}
void Sign(char show[ROWS][COLS], int x, int y)
{
if (show[x][y] == '*')
show[x][y] = 'F';
DisplayBoard(show, ROW, COL);
}
void Unsign(char show[ROWS][COLS], int x, int y)
{
if (show[x][y] == 'F')
show[x][y] = '*';
DisplayBoard(show, ROW, COL);
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
char s;
int x, y, flag = 1;
while (flag)
{
printf("1·排查地雷:請輸入要排查的坐標(biāo)例如‘2 4',第二行第四列\(zhòng)n");
printf("2·標(biāo)記地雷:輸入要標(biāo)記雷的坐標(biāo)例如‘2+4',注意要加'+'\n");
printf("3·取消標(biāo)記:輸入要取消標(biāo)記雷的坐標(biāo)例如‘2-4',注意要加'-'\n");
printf("請輸入:");
scanf("%d%c%d", &x, &s, &y);
printf("\n\n");
if (s == ' ' && x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '*')
{
printf("\a很遺憾,\a您踩雷了,\a游戲結(jié)束\a\n");
DisplayBoard2(mine, ROW, COL);
break;
}
else
{
int count = GetMineCount(mine, x, y);
show[x][y] = count + '0';
if (count == 0)
Chain(mine, show, x, y, ROWS);
DisplayBoard(show, ROW, COL);
flag = Judge(show, ROW, COL);
}
}
else if (s == '+' && x >= 1 && x <= row && y >= 1 && y <= col)
Sign(show, x, y);
else if (s == '-' && x >= 1 && x <= row && y >= 1 && y <= col)
Unsign(show, x, y);
else
{
printf("輸入錯誤,坐標(biāo)范圍X(1-9) Y(1-9),請重新輸入\n");
}
}
if (flag == 0)
{
printf("恭喜你掃雷成功!!!\n");
}
}
在main.c源文件中寫到:
(游戲主體框架)
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
int g;
void game()
{
char mine[ROWS][COLS];
char show[ROWS][COLS];
//定義數(shù)組大小
SetBoard(mine, ROWS, COLS, '0');//放置雷
SetBoard(show, ROWS, COLS, '*');//展示信息
//初始化數(shù)組,傳入要初始化的值
SetMine(mine, ROW, COL);
//放置雷
DisplayBoard(show, ROW, COL);
//打印棋盤
/*DisplayBoard(mine, ROW, COL); */
clock_t start = clock();//記錄游戲時間
{
FindMine(mine, show, ROW, COL);
}
double time = (double)(clock() - start) / CLOCKS_PER_SEC;
printf("您一共用時: %.2f 秒\n\n\n", time);
}
int main()
{
do
{
char x = 0;
menu();
//打印菜單
scanf("%d", &g);
switch (g)
{
case 1:
game();
//進入游戲
break;
case 0:
printf("退出\n");
//退出游戲
break;
default:
printf("輸入錯誤,請重新輸入\n");
break;
}
} while (g);
return 0;
}
五、結(jié)語
OK,本期的掃雷代碼到這里就結(jié)束了
大家可自己游玩,也可改進我的代碼
本期資料來自于:

到此這篇關(guān)于C語言掃雷游戲?qū)崿F(xiàn)的文章就介紹到這了,更多相關(guān)C語言掃雷游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
全面了解#pragma once與 #ifndef的區(qū)別
下面小編就為大家?guī)硪黄媪私?pragma once與 #ifndef的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
c++11之統(tǒng)一初始化(Uniform Initalization)實現(xiàn)
本文主要介紹了c++11之統(tǒng)一初始化(Uniform Initalization)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-02-02

