C語(yǔ)言實(shí)現(xiàn)掃雷小游戲(擴(kuò)展版可選擇游戲難度)
游戲簡(jiǎn)介
掃雷,是一款益智類小游戲。
游戲目標(biāo)是找出所有沒有地雷的方格,完成游戲;要是按了有地雷的方格,游戲失??;玩家可標(biāo)記雷的位置。游戲以完成時(shí)間來(lái)評(píng)高低。有不同的游戲難度可選擇。
實(shí)現(xiàn)的功能介紹
1.計(jì)時(shí)
2.初始化雷盤
3.打印雷盤
4.隨機(jī)設(shè)置雷的分布,可選擇游戲難易程度
5.統(tǒng)計(jì)坐標(biāo)位置周圍的雷數(shù)
6.第一次排雷不會(huì)被炸死
7.擴(kuò)展式排雷,展開周圍的非雷區(qū)
8.給所選坐標(biāo)位置做標(biāo)記,或取消標(biāo)記
該程序分為三個(gè)文件:
1.game.h :包含頭文件的引用、函數(shù)的聲明和宏定義
2.game.c :包含游戲各功能函數(shù)的具體實(shí)現(xiàn)
3.pro.c :各功能函數(shù)的調(diào)用(程序的流程)
PS:文章末尾附完整代碼 及 游戲效果圖
因?yàn)榕爬讜r(shí)要計(jì)算每個(gè)位置周圍八個(gè)位置的雷數(shù),所以在創(chuàng)建數(shù)組時(shí)要多一圈,即行列都要加2。給用戶顯示的數(shù)組不需要加。

游戲功能代碼詳解
1.計(jì)時(shí)
運(yùn)用clock函數(shù),該函數(shù)需要的頭文件為 “time.h”
函數(shù)原型:clock_t clock(void);
功能:程序從啟動(dòng)到函數(shù)調(diào)用占用CPU的時(shí)間
這個(gè)函數(shù)返回從“開啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的CPU時(shí)鐘計(jì)時(shí)單元(clock tick)數(shù),在MSDN中稱之為掛鐘時(shí)間;若掛鐘時(shí)間不可取,則返回-1。其中clock_t是用來(lái)保存時(shí)間的數(shù)據(jù)類型。
void set_time()//計(jì)時(shí)
{
printf("用時(shí):%u 秒\n", clock() / CLOCKS_PER_SEC);
}
2.初始化雷盤
這里我用到的是memset函數(shù),需要的頭文件為“memory.h”或“string.h”
函數(shù)原型:void *memset(void *s, int ch, size_t n);
功能:將s中當(dāng)前位置后面的n個(gè)字節(jié) (typedef unsigned int size_t )用 ch 替換并返回 s 。在一段內(nèi)存塊中填充某個(gè)給定的值。
void init_board(char board[ROWS][COLS], int row, int col, char c)//初始化雷盤
{
memset(board, c, row*col*sizeof(board[0][0]));
}
3.打印雷盤
運(yùn)用兩個(gè)循環(huán)體實(shí)現(xiàn)雷盤數(shù)組的賦值、行號(hào)、列號(hào)的打印。正式游戲時(shí)可以加上system(“CLS”); 清屏語(yǔ)句,每次調(diào)用時(shí)都清屏一次,使游戲畫面更簡(jiǎn)潔清晰。
我們把計(jì)時(shí)函數(shù)放在里面,每次打印雷盤時(shí)就可以顯示所用的時(shí)間。
void disp_board(char board[ROWS][COLS], int row, int col)//打印雷盤
{
int i = 0;
int j = 0;
//system("CLS");//清屏
for (i = 0; i <= row; i++)
{
printf("%2d ", i);//打印行號(hào)
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%2d ", i);//打印列號(hào)
for (j = 1; j <= col; j++)
{
printf("%2c ", board[i][j]);
}
printf("\n");
}
printf("\n");
set_time();//打印所用的時(shí)間
}
4.隨機(jī)設(shè)置雷的分布,可選擇游戲難易程度
放置雷必須是隨機(jī)的,這里用到了rand函數(shù),它和srand函數(shù)配合使用產(chǎn)生隨機(jī)數(shù)。srand(time(NULL))放在主函數(shù)中調(diào)用一次,通過(guò)系統(tǒng)時(shí)間提供的種子值,使rand函數(shù)生成不同的偽隨機(jī)數(shù)序列。
void set_mine(char board[ROWS][COLS], int row, int col,int count)//置雷
{
int x = 0;
int y = 0;
while (count)
{
x = rand() % row + 1;//隨機(jī)位置范圍1~row
y = rand() % col + 1;//隨機(jī)位置范圍1~col
if (board[x][y] == '0')//判斷是否已有雷
{
board[x][y] = '1';//有雷的位置賦為1
count--;
}
}
}
5.統(tǒng)計(jì)坐標(biāo)位置周圍的雷數(shù) 及 未掃的位置的個(gè)數(shù)
當(dāng)掃到一個(gè)沒有雷的位置時(shí),會(huì)顯示這個(gè)位置周圍一圈八個(gè)位置的含雷的總數(shù),所以我們要寫一個(gè)“數(shù)雷”函數(shù)來(lái)數(shù)。
int count_mine(char mine[ROWS][COLS], int x, int y)//數(shù)雷
{
return mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y + 1] + mine[x + 1][y + 1] + mine[x + 1][y] +
mine[x + 1][y - 1] + mine[x][y - 1] + mine[x - 1][y - 1] - 8 * '0';//數(shù)周圍一圈八個(gè)位置的雷數(shù)
}
int count_print(char print[ROWS][COLS], int row, int col)//數(shù)未掃位置
{
int count = 0;
int i = 0;
for (i = 1; i <= row; i++)
{
int j = 0;
for (j = 1; j <= col; j++)
{
if (print[i][j] == '@' ||print[i][j] == '*')
{
count++;
}
}
}
return count;
}
6.第一次排雷不會(huì)被炸死
為了增加游戲的可玩性,加入“第一次排雷不被炸死”這個(gè)函數(shù)。當(dāng)?shù)谝淮闻啪陀龅嚼讜r(shí),我們把雷偷偷挪走,隨機(jī)放在一個(gè)原本無(wú)雷的位置。
void safe_mine(char mine[ROWS][COLS],char print[ROWS][COLS],int x,int y,int row,int col)//第一次排雷不炸死
{
char ch = 0;
int ret = 1;
int number = 0;
if (mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
{
mine[x][y] = '0';
char ch = count_mine(mine, x, y);
print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
extend_board(mine, print, x, y);
while (ret)//在其余有空的地方設(shè)置一個(gè)雷
{
int x = rand() % row + 1;//產(chǎn)生1到row的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % col + 1;//產(chǎn)生1到col的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (mine[x][y] == '0')//找不是雷的地方布雷
{
mine[x][y] = '1';
disp_board(print, row, col);
//disp_board(mine, row, col);
ret--;
break;
}
}
}
}
7.擴(kuò)展式排雷,展開周圍的非雷區(qū)
當(dāng)游戲中排到一個(gè)周圍一圈都無(wú)雷的位置時(shí),運(yùn)用遞歸,實(shí)現(xiàn)擴(kuò)展展開周圍的一片無(wú)雷區(qū)。
void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y)//運(yùn)用遞歸擴(kuò)展周圍
{
int n = 0;
n = count_mine(mine, x, y);
if (n == 0)//當(dāng)該位置周圍雷數(shù)為0時(shí)擴(kuò)展
{
print[x][y] = ' ';//擴(kuò)展的位置變?yōu)椤翱崭瘛贝蛴〕鰜?lái)
if (mine[x - 1][y] == '0' && print[x - 1][y] == '@')
{
extend_board(mine, print, x - 1, y);//遞歸
}
if (mine[x + 1][y] == '0' && print[x + 1][y] == '@')
{
extend_board(mine, print, x + 1, y);
}
if (mine[x][y + 1] == '0' && print[x][y + 1] == '@')
{
extend_board(mine, print, x, y + 1);
}
if (mine[x - 1][y + 1] == '0' && print[x - 1][y + 1] == '@')
{
extend_board(mine, print, x - 1, y + 1);
}
if (mine[x + 1][y + 1] == '0' && print[x + 1][y + 1] == '@')
{
extend_board(mine, print, x + 1, y + 1);
}
if (mine[x][y - 1] == '0' && print[x][y - 1] == '@')
{
extend_board(mine, print, x, y - 1);
}
if (mine[x + 1][y - 1] == '0' && print[x + 1][y -1] == '@')
{
extend_board(mine, print, x + 1, y - 1);
}
if (mine[x - 1][y - 1] == '0' && print[x - 1][y - 1] == '@')
{
extend_board(mine, print, x - 1, y - 1);
}
}
else
print[x][y] = n + '0';
}
int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count)//排雷
{
int x = 0;
int y = 0;
int number = 0;
int ret = 0;
while (1)
{
printf("輸入坐標(biāo)掃雷\n");
scanf("%d%d", &x, &y);//玩家輸入掃雷的坐標(biāo)位置
if ((x >= 1 && x <= row) && (y >= 1 && y <= col))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
{
if (mine[x][y] == '0')//沒踩到雷
{
number++;//記錄掃雷的次數(shù)
char ch = count_mine(mine, x, y);//數(shù)雷數(shù)
print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
extend_board(mine, print, x, y);
disp_board(mine, row, col);
disp_board(print, row, col);
if (count_print(print, row, col) == count)//剩余未掃位置=雷數(shù) 時(shí)勝利
{
return 0;
}
to_sign(print);//判斷是否標(biāo)記
disp_board(print, row, col);
}
else if (mine[x][y] == '1')//踩到雷
{
if (ret == 0 && number == 0)
{
ret++;
safe_mine(mine,print,x,y,row,col);
}
else
return 1;
}
}
else
{
printf("輸入錯(cuò)誤!請(qǐng)重新輸入\n");
}
}
}
8.給所選坐標(biāo)位置做標(biāo)記,或取消標(biāo)記
掃雷游戲還有一個(gè)功能:可以給你認(rèn)為是雷的位置標(biāo)記,或者取消標(biāo)記。
我通過(guò)三個(gè)函數(shù)來(lái)實(shí)現(xiàn),一個(gè)判斷用戶是否需要標(biāo)記;一個(gè)實(shí)現(xiàn)標(biāo)記功能,將@標(biāo)記成* ;一個(gè)實(shí)現(xiàn)取消標(biāo)記功能,將* 改回@。
void to_sign(char board[ROWS][COLS])//判斷是否標(biāo)記
{
int chose_b = 0;
int x = 0;
int y = 0;
printf("是否需要標(biāo)記/取消標(biāo)記:>\n(1.標(biāo)記 ;2.取消標(biāo)記 ;3.跳過(guò)該步驟) :>");
scanf("%d", &chose_b);
do{
switch (chose_b)
{
case 1:
{
printf("請(qǐng)輸入需要標(biāo)記的位置坐標(biāo):>\n");
scanf("%d%d", &x, &y);
sign(board, x, y);
break;
}
case 2:
{
printf("請(qǐng)輸入取消標(biāo)記的位置坐標(biāo):>\n");
scanf("%d%d", &x, &y);
unsign(board, x, y);
break;
}
case 3:
{
printf("跳過(guò)此步驟。\n");
chose_b = 0;
break;
}
default:
{ printf("輸入錯(cuò)誤!\n");
chose_b = 0;
break;
}
}
chose_b = 0;
} while (chose_b);
}
void sign(char board[ROWS][COLS], int x, int y)//用‘*'標(biāo)記雷
{
if (board[x][y] == '@')
{
board[x][y] = '*';
}
}
void unsign(char board[ROWS][COLS], int x, int y)//取消標(biāo)記
{
if (board[x][y] == '*')
{
board[x][y] = '@';
}
}
附:完整代碼
game.h
#ifndef _GAME_H_ #define _GAME_H_ //用到的頭文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<windows.h> //定義打印的雷盤行、列 #define _ROW 9 #define _COL 9 #define ROW 16 #define COL 16 //定義數(shù)組的行、列 #define _ROWS _ROW+2 #define _COLS _COL+2 #define ROWS ROW+2 #define COLS COL+2 //定義難、易程度雷數(shù) #define EASY_COUNT 10 #define HARD_COUNT 40 //定義游戲中的函數(shù) void init_board(char board[ROWS][COLS],int row, int col, char c);//初始化 void disp_board(char board[ROWS][COLS],int row,int col);//打印 void set_mine(char board[ROWS][COLS], int row, int col,int count);//置雷 void safe_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y, int row, int col);//第一次排雷不炸死 int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count);//排雷 int count_mine(char mine[ROWS][COLS], int x, int y);//數(shù)雷 void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y);//擴(kuò)展 void to_sign(char board[ROWS][COLS]);//判斷是否標(biāo)記 void sign(char board[ROWS][COLS], int x, int y);//標(biāo)記 void unsign(char board[ROWS][COLS], int x, int y);//取消標(biāo)記 int count_print(char print[ROWS][COLS], int row, int col);//數(shù)未掃位置 #endif//_GAME_H_
game.c
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void set_time()//計(jì)時(shí)
{
printf("用時(shí):%u 秒\n", clock() / CLOCKS_PER_SEC);
}
void init_board(char board[ROWS][COLS], int row, int col, char c)//初始化雷盤
{
memset(board, c, row*col*sizeof(board[0][0]));
}
void disp_board(char board[ROWS][COLS], int row, int col)//打印雷盤
{
int i = 0;
int j = 0;
system("CLS");//清屏
for (i = 0; i <= row; i++)//加行號(hào)
{
printf("%2d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)//加列號(hào)
{
printf("%2d ", i);
for (j = 1; j <= col; j++)
{
printf("%2c ", board[i][j]);
}
printf("\n");
}
printf("\n");
set_time();//打印所用的時(shí)間
}
void set_mine(char board[ROWS][COLS], int row, int col,int count)//置雷
{
int x = 0;
int y = 0;
while (count)
{
x = rand() % row + 1;//隨機(jī)位置范圍1~row
y = rand() % col + 1;//隨機(jī)位置范圍1~col
if (board[x][y] == '0')//判斷是否已有雷
{
board[x][y] = '1';
count--;
}
}
}
void safe_mine(char mine[ROWS][COLS],char print[ROWS][COLS],int x,int y,int row,int col)//第一次排雷不炸死
{
char ch = 0;
int ret = 1;
int number = 0;
if (mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
{
mine[x][y] = '0';
char ch = count_mine(mine, x, y);
print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
extend_board(mine, print, x, y);
while (ret)//在其余有空的地方設(shè)置一個(gè)雷
{
int x = rand() % row + 1;//產(chǎn)生1到row的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % col + 1;//產(chǎn)生1到col的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (mine[x][y] == '0')//找不是雷的地方布雷
{
mine[x][y] = '1';
disp_board(print, row, col);
//disp_board(mine, row, col);
ret--;
break;
}
}
}
}
int count_mine(char mine[ROWS][COLS], int x, int y)//數(shù)雷
{
return mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y + 1] + mine[x + 1][y + 1] + mine[x + 1][y] +
mine[x + 1][y - 1] + mine[x][y - 1] + mine[x - 1][y - 1] - 8 * '0';//數(shù)周圍一圈八個(gè)位置的雷數(shù)
}
int count_print(char print[ROWS][COLS], int row, int col)//數(shù)未掃位置
{
int count = 0;
int i = 0;
for (i = 1; i <= row; i++)
{
int j = 0;
for (j = 1; j <= col; j++)
{
if (print[i][j] == '@' ||print[i][j] == '*')
{
count++;
}
}
}
return count;
}
void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y)//運(yùn)用遞歸擴(kuò)展周圍
{
int n = 0;
n = count_mine(mine, x, y);
if (n == 0)//當(dāng)該位置周圍雷數(shù)為0時(shí)擴(kuò)展
{
print[x][y] = ' ';//擴(kuò)展的位置變?yōu)椤翱崭瘛贝蛴〕鰜?lái)
if (mine[x - 1][y] == '0' && print[x - 1][y] == '@')
{
extend_board(mine, print, x - 1, y);//遞歸
}
if (mine[x + 1][y] == '0' && print[x + 1][y] == '@')
{
extend_board(mine, print, x + 1, y);
}
if (mine[x][y + 1] == '0' && print[x][y + 1] == '@')
{
extend_board(mine, print, x, y + 1);
}
if (mine[x - 1][y + 1] == '0' && print[x - 1][y + 1] == '@')
{
extend_board(mine, print, x - 1, y + 1);
}
if (mine[x + 1][y + 1] == '0' && print[x + 1][y + 1] == '@')
{
extend_board(mine, print, x + 1, y + 1);
}
if (mine[x][y - 1] == '0' && print[x][y - 1] == '@')
{
extend_board(mine, print, x, y - 1);
}
if (mine[x + 1][y - 1] == '0' && print[x + 1][y -1] == '@')
{
extend_board(mine, print, x + 1, y - 1);
}
if (mine[x - 1][y - 1] == '0' && print[x - 1][y - 1] == '@')
{
extend_board(mine, print, x - 1, y - 1);
}
}
else
print[x][y] = n + '0';
}
int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count)//排雷
{
int x = 0;
int y = 0;
int number = 0;
int ret = 0;
while (1)
{
printf("輸入坐標(biāo)掃雷\n");
scanf("%d%d", &x, &y);//玩家輸入掃雷的坐標(biāo)位置
if ((x >= 1 && x <= row) && (y >= 1 && y <= col))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
{
if (mine[x][y] == '0')//沒踩到雷
{
number++;//記錄掃雷的次數(shù)
char ch = count_mine(mine, x, y);//數(shù)雷數(shù)
print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
extend_board(mine, print, x, y);
// disp_board(mine, row, col);
disp_board(print, row, col);
if (count_print(print, row, col) == count)//剩余未掃位置=雷數(shù) 時(shí)勝利
{
return 0;
}
to_sign(print);//判斷是否標(biāo)記
disp_board(print, row, col);
}
else if (mine[x][y] == '1')//踩到雷
{
if (ret == 0 && number == 0)
{
ret++;
safe_mine(mine,print,x,y,row,col);
}
else
return 1;
}
}
else
{
printf("輸入錯(cuò)誤!請(qǐng)重新輸入\n");
}
}
}
void sign(char board[ROWS][COLS], int x, int y)//用‘*'標(biāo)記雷
{
if (board[x][y] == '@')
{
board[x][y] = '*';
}
}
void unsign(char board[ROWS][COLS], int x, int y)//取消標(biāo)記
{
if (board[x][y] == '*')
{
board[x][y] = '@';
}
}
void to_sign(char board[ROWS][COLS])//判斷是否標(biāo)記
{
int chose_b = 0;
int x = 0;
int y = 0;
printf("是否需要標(biāo)記/取消標(biāo)記:>\n(1.標(biāo)記 ;2.取消標(biāo)記 ;3.跳過(guò)該步驟) :>");
scanf("%d", &chose_b);
do{
switch (chose_b)
{
case 1:
{
printf("請(qǐng)輸入需要標(biāo)記的位置坐標(biāo):>\n");
scanf("%d%d", &x, &y);
sign(board, x, y);
break;
}
case 2:
{
printf("請(qǐng)輸入取消標(biāo)記的位置坐標(biāo):>\n");
scanf("%d%d", &x, &y);
unsign(board, x, y);
break;
}
case 3:
{
printf("跳過(guò)此步驟。\n");
chose_b = 0;
break;
}
default:
{ printf("輸入錯(cuò)誤!\n");
chose_b = 0;
break;
}
}
chose_b = 0;
} while (chose_b);
}
pro.c
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
{
printf("+---------------------------------+\n");
printf("+ Welcome to 掃雷世界 ! +\n");
printf("+ ο(=>ω<=)ρ⌒☆ +\n");
printf("+ 1、play +\n");
printf("+ 0、exit +\n");
printf("+---------------------------------+\n");
}
void game()
{
char mine[ROWS][COLS] = { 0 };
char print[ROWS][COLS] = { 0 };
int chose_m = 0;
int ret = 0;
printf("請(qǐng)選擇模式(1、簡(jiǎn)單 2、困難):>");//選擇游戲難易程度,產(chǎn)生不同大小的棋盤和雷數(shù)
scanf("%d", &chose_m);
switch (chose_m)
{
case 1:
{
init_board(mine, ROWS, COLS, '0');//初始化雷盤
init_board(print, ROWS, COLS, '@');
set_mine(mine, _ROW, _COL, EASY_COUNT);//布雷
// disp_board(mine, _ROW, _COL);//打印雷盤
disp_board(print, _ROW, _COL);
int ret = find_mine(mine, print, _ROW, _COL, EASY_COUNT);//掃雷,踩到雷返回1,沒有踩到雷返回0
while (1)//循環(huán)掃雷
{
if (ret == 0)//若返回0則勝利
{
disp_board(print, _ROW, _COL);
printf("WOW~ YOU WIN!\n\n");
break;
}
if (ret)//若返回1則失敗
{
disp_board(mine, _ROW, _COL);//打印雷盤
printf("GAME OVER!\n");
break;
}
disp_board(print, _ROW, _COL);//打印玩家棋盤
}
break;
}
case 2:
{
init_board(mine, ROWS, COLS, '0');//初始化雷盤
init_board(print, ROWS, COLS, '@');
set_mine(mine, ROW, COL, HARD_COUNT);//布雷
// disp_board(mine, ROW, COL);//打印雷盤
disp_board(print, ROW, COL);
while (1)//循環(huán)掃雷
{
int ret = find_mine(mine, print, ROW, COL, HARD_COUNT);//掃雷,踩到雷返回1,沒有踩到雷返回0
if (ret == 0)//若返回0勝利
{
disp_board(print, ROW, COL);
printf("WOW~ YOU WIN!\n\n");
break;
}
if (ret)//若返回1失敗
{
disp_board(mine, ROW, COL);//打印雷盤
printf("GAME OVER!\n");
break;
}
disp_board(print, ROW, COL);//打印玩家棋盤
}
break;
}
default:
{
printf("輸入錯(cuò)誤!\n");
break;
}
}
}
void text()
{
srand((unsigned int)time(NULL));//產(chǎn)生隨機(jī)值發(fā)生器
int chose = 0;//選擇是否開始游戲
do
{
menu();//菜單
printf("請(qǐng)選擇:>");
scanf("%d", &chose);
switch (chose)
{
case 1:
game();//開始游戲
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("輸入錯(cuò)誤,沒有該選項(xiàng)\n");
break;
}
} while (chose);
}
int main()
{
text();
system("pause");
return 0;
}
游戲效果圖
①開始選擇菜單、難易模式選擇
②兩種難度掃雷
↓9×9雷盤 10顆雷
↓16×16雷盤 40顆雷
③演示標(biāo)記
④GAME OVER 玩家失敗演示
⑤WIN 玩家成功演示

相關(guān)文章
C++實(shí)現(xiàn)小型復(fù)數(shù)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)小型復(fù)數(shù)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
C語(yǔ)言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))
線性表是最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡(jiǎn)單的線性表,其基本思想是用一段地址連續(xù)的儲(chǔ)存單元依次存儲(chǔ)線性表的數(shù)據(jù)元素,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下2021-10-10
C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)銀行ATM存取款功能
這個(gè)是大一時(shí)期寫的。大四的時(shí)候整理了一下(本人C語(yǔ)言學(xué)的也不太好)??隙ê芏嗖蛔愫痛嬖诼┒吹牡胤?、僅供借鑒、僅供借鑒,代碼中有大量注釋,新手看起來(lái)也沒有困難2021-11-11
opencv實(shí)現(xiàn)機(jī)器視覺檢測(cè)和計(jì)數(shù)的方法
在機(jī)器視覺中,有時(shí)需要對(duì)產(chǎn)品進(jìn)行檢測(cè)和計(jì)數(shù)。其難點(diǎn)無(wú)非是對(duì)于產(chǎn)品的圖像分割。本文就來(lái)介紹一下機(jī)器視覺檢測(cè)和計(jì)數(shù)的實(shí)現(xiàn),感興趣的可以參考一下2021-05-05
使用C++實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2024-03-03
c++實(shí)現(xiàn)獲取當(dāng)前時(shí)間(精確至秒,毫秒和微妙)
這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)獲取當(dāng)前時(shí)間(可以精確至秒,毫秒和微妙)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-11-11
C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過(guò)指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存實(shí)例分析
這篇文章主要介紹了C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過(guò)指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存,是鏈表創(chuàng)建過(guò)程中非常常見的經(jīng)典錯(cuò)誤。實(shí)例中做了較為詳盡的分析,需要的朋友可以參考下2014-09-09

