C語(yǔ)言實(shí)現(xiàn)掃雷游戲詳解
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
功能設(shè)計(jì)
掃雷大家應(yīng)該都玩過(guò),這是一個(gè)十分經(jīng)典的游戲,今天我將給大家講解如何用C語(yǔ)言實(shí)現(xiàn)掃雷,我的這個(gè)掃雷有如下幾個(gè)功能:
1、顯示該點(diǎn)周?chē)椎膫€(gè)數(shù)
2、第一次下子,不炸死
3、坐標(biāo)周?chē)鷽](méi)雷,可以實(shí)現(xiàn)展開(kāi)
4、游戲結(jié)束后展示玩家用時(shí)
效果展示
話不多說(shuō),先附上效果圖:



設(shè)計(jì)思路
我們只要輸入坐標(biāo)就可以掃雷了,是不是很有趣?
其實(shí)要想實(shí)現(xiàn)這也不難,我們要用幾個(gè)算法模塊來(lái)模擬游戲規(guī)則,需要用函數(shù)來(lái)調(diào)用各個(gè)模塊使游戲跑起來(lái)。
那么第一步我們就要構(gòu)思一個(gè)棋盤(pán),看見(jiàn)上面第一張圖沒(méi),在開(kāi)始游戲的界面我打印了兩個(gè)棋盤(pán),有0和1的棋盤(pán)是給我們?cè)O(shè)計(jì)者看的,它可以顯示出當(dāng)前雷的真實(shí)分布,這有利于我們測(cè)試代碼的正確性,而全是 * 的棋盤(pán)是給玩家掃雷用的。
那我們就需要用二維數(shù)組來(lái)打印兩個(gè)棋盤(pán),假如我們要打印10X10的棋盤(pán),那我們的二維數(shù)組元素也要為10X10個(gè)嗎?,不能,因?yàn)槲覀冊(cè)谠O(shè)計(jì)算法時(shí)需要統(tǒng)計(jì)坐標(biāo)周?chē)?個(gè)方位雷的個(gè)數(shù),假如要統(tǒng)計(jì)邊界坐標(biāo)周?chē)椎膫€(gè)數(shù),那么就會(huì)有數(shù)組越界的問(wèn)題,那我們就要在10X10的邊界多上一圈元素,也就要定義12X12的數(shù)組元素,這些元素我們不要打印出來(lái),心里有數(shù)就行,如下圖:
#define row 12 #define col 12 show_mine[row][col];//玩家數(shù)組 real_mine[row][col];//設(shè)計(jì)者數(shù)組

我們?cè)谝粋€(gè)項(xiàng)目里建立三個(gè)源文件,如下:

1、我們打印設(shè)計(jì)者棋盤(pán)要用數(shù)組real_mine,打印玩家棋盤(pán)要用數(shù)組show_mine,兩個(gè)數(shù)組在開(kāi)始必須要初始化,在設(shè)計(jì)者棋盤(pán)中字符0代表不是雷,字符1代表雷,先初始化兩個(gè)數(shù)組
代碼如下:
void init_mine()//初始化兩個(gè)雷陣
{
int i = 0;
int j = 0;
for (int i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
show_mine[i][j] = '*';
real_mine[i][j] = '0';
}
}
}
2、打印兩個(gè)雷陣(不要忘了打印橫豎序號(hào)以便確定坐標(biāo))
void print_player()//打印玩家棋盤(pán)
{
int i = 0;
int j = 0;
printf("0 ");
for (i = 1; i <row-1; i++)
{
printf("%d ", i);//打印橫標(biāo)(0--10)
}
printf("\n");
for (i = 1; i <row-2; i++)//打印豎標(biāo)(1--10)
{
printf("%d ", i);
for (j = 1; j < col-1; j++)
{
printf("%c ", show_mine[i][j]);//玩家棋盤(pán)數(shù)組
}
printf("\n");
}
printf("10 ");//開(kāi)始打印最后一行
for (i = 1; i < row-1; i++)
{
printf("%c ", show_mine[10][i]);
}
printf("\n");
}
void print_mine()//打印設(shè)計(jì)者棋盤(pán)
{
int i = 0;
int j = 0;
printf("0 ");
for (i = 1; i <row - 1; i++)
{
printf("%d ", i);//打印橫標(biāo)(0--10)
}
printf("\n");
for (i = 1; i <row - 2; i++)//打印豎標(biāo)(1--10)
{
printf("%d ", i);
for (j = 1; j < col - 1; j++)
{
printf("%c ", real_mine[i][j]);
}
printf("\n");
}
printf("10 ");//開(kāi)始打印最后一行
for (i = 1; i < row - 1; i++)
{
printf("%c ", real_mine[10][i]);
}
printf("\n");
}
3、我們?cè)诿恳淮瓮娴臅r(shí)候設(shè)計(jì)者棋盤(pán)中的雷分布都必須不相同,使用隨機(jī)數(shù)生成橫豎坐標(biāo)確定布雷坐標(biāo),代碼如下:
void set_mine()//給設(shè)計(jì)者棋盤(pán)布雷
{
int x = 0;
int y = 0;
int count = COUNT;//雷總數(shù)
while (count)//雷布完后跳出循環(huán)
{
int x = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (real_mine[x][y] == '0')//找不是雷的地方布雷
{
real_mine[x][y] = '1';
count--;
}
}
}
4、為了統(tǒng)計(jì)當(dāng)前坐標(biāo)周?chē)椎膫€(gè)數(shù),定義一個(gè)函數(shù)實(shí)現(xiàn):
int count_mine(int x, int y)//檢測(cè)周?chē)?個(gè)區(qū)域雷的個(gè)數(shù)
{
int count = 0;
if (real_mine[x - 1][y - 1] == '1')
count++;
if (real_mine[x - 1][y] == '1')
count++;
if (real_mine[x - 1][y + 1] == '1')
count++;
if (real_mine[x][y - 1] == '1')
count++;
if (real_mine[x][y + 1] == '1')
count++;
if (real_mine[x + 1][y - 1] == '1')
count++;
if (real_mine[x + 1][y] == '1')
count++;
if (real_mine[x + 1][y + 1] == '1')
count++;
return count;
}
5、為了確保第一次不被雷炸死,我們需要定義個(gè)函數(shù)來(lái)實(shí)現(xiàn),如果第一次選到雷就將這顆雷放在其他不是雷的地方,代碼如下:
void safe_mine()//避免第一次炸死
{
int x = 0;
int y = 0;
char ch = 0;
int count = 0;
int ret = 1;
printf("輸入坐標(biāo)掃雷\n");
while (1)
{
scanf("%d%d", &x, &y);//只能輸入1到10,輸入錯(cuò)誤重新輸入
if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判斷輸入坐標(biāo)是否有誤
{
if (real_mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
{
real_mine[x][y] = '0';
char ch = count_mine(x, y);
show_mine[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
while (ret)//在其余有空的地方設(shè)置一個(gè)雷
{
int x = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (real_mine[x][y] == '0')//找不是雷的地方布雷
{
real_mine[x][y] = '1';
ret--;
break;
}
}break;//跳出此函數(shù)
}
if (real_mine[x][y] == '0')
{
char ch = count_mine(x, y);
show_mine[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
break;
}
}
else//坐標(biāo)錯(cuò)誤
{
printf("輸入錯(cuò)誤重新輸入\n");
}
}
}
6、為了實(shí)現(xiàn)展開(kāi)功能,需要展開(kāi)函數(shù)模塊(展開(kāi)的坐標(biāo)還要顯示其坐標(biāo)周?chē)睦讛?shù)),如下:
void open_mine(int x, int y)//坐標(biāo)周?chē)归_(kāi)函數(shù)
{
if (real_mine[x - 1][y - 1]== '0')
{
show_mine[x - 1][y - 1] = count_mine(x - 1, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x - 1][y] == '0')
{
show_mine[x - 1][y] = count_mine(x - 1, y) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x - 1][y + 1] == '0')
{
show_mine[x - 1][y + 1] = count_mine(x - 1, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x][y - 1] == '0')
{
show_mine[x][y - 1] = count_mine(x, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x][y + 1] == '0')
{
show_mine[x][y + 1] = count_mine(x, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y - 1] == '0')
{
show_mine[x + 1][y - 1] = count_mine(x + 1, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y] == '0')
{
show_mine[x + 1][y] = count_mine(x + 1, y) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y + 1] == '0')
{
show_mine[x + 1][y + 1] = count_mine(x + 1, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
}
7、掃雷函數(shù)是一個(gè)重要的模塊,代碼如下:
int sweep_mine()//掃雷函數(shù),踩到雷返回1,沒(méi)有踩到雷返回0
{
int x = 0;
int y = 0;
int count = 0;
printf("輸入坐標(biāo)掃雷\n");
scanf("%d%d", &x, &y);//只能輸入1到10
if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
{
if (real_mine[x][y] == '0')//沒(méi)踩到雷
{
char ch = count_mine(x,y);
show_mine[x][y] = ch+'0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
if (count_show_mine() == COUNT)//判斷剩余未知區(qū)域的個(gè)數(shù),個(gè)數(shù)為雷數(shù)時(shí)玩家贏
{
print_mine();
printf("玩家贏!\n\n");
return 0;
}
}
else if (real_mine[x][y]=='1')//踩到雷
{
return 1;
}
}
else
{
printf("輸入錯(cuò)誤重新輸入\n");
}
return 0;//沒(méi)踩到雷
}
到最后需要確定游戲勝利的條件,我們要統(tǒng)計(jì)當(dāng)前狀態(tài)玩家棋盤(pán)中顯示的剩余 * 的個(gè)數(shù),如果個(gè)數(shù)等于總雷數(shù)時(shí)說(shuō)明掃雷完成,游戲勝利,定義一個(gè)函數(shù)實(shí)現(xiàn):
int count_show_mine()//判斷剩余未知區(qū)域的個(gè)數(shù),個(gè)數(shù)為雷數(shù)時(shí)玩家贏
{
int count = 0;
int i = 0;
int j = 0;
for (i = 1; i <= row - 2; i++)
{
for (j = 1; j <= col - 2; j++)
{
if (show_mine[i][j] == '*')
{
count++;
}
}
}
return count;
}
我們將以上函數(shù)的定義放在 game.c 文件中
以上就是我們要實(shí)現(xiàn)掃雷的模塊,要想把這些模塊整合起來(lái)運(yùn)行,就需要一個(gè)游戲執(zhí)行函數(shù)來(lái)調(diào)用這些模塊,定義個(gè)game()函數(shù)實(shí)現(xiàn),代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
double start, finish;
void game()
{
int ret = 0;
init_mine();//初始化玩家棋盤(pán)和設(shè)計(jì)者棋盤(pán)
set_mine();//給設(shè)計(jì)者棋盤(pán)布雷
print_mine();//打印設(shè)計(jì)者棋盤(pán)(可不打印)
printf("\n");
print_player();//打印玩家棋盤(pán)
start = clock();
safe_mine();//避免第一次被炸死
if (count_show_mine() == COUNT)//一步就贏的情況
{
print_mine();
printf("玩家贏!\n\n");
return ;
}print_player();打印玩家棋盤(pán)
while (1)//循環(huán)掃雷
{
int ret=sweep_mine();//掃雷,踩到雷返回1,沒(méi)有踩到雷返回0
if (count_show_mine() == COUNT)//若玩家棋盤(pán)的'*'個(gè)數(shù)為雷數(shù)時(shí),掃雷完成,游戲勝利
{
print_mine();//打印設(shè)計(jì)者棋盤(pán)
printf("玩家贏!\n\n");
finish = clock();//取結(jié)束時(shí)間
printf("用時(shí)%d 秒\n",(int) (finish - start) / CLOCKS_PER_SEC);
break;
}
if (ret)//判斷是否踩到雷
{
printf("被雷炸死\t");
finish = clock();//取結(jié)束時(shí)間
printf("用時(shí)%d 秒\n", (int)(finish - start) / CLOCKS_PER_SEC);
print_mine();//打印設(shè)計(jì)者雷陣查看雷的分布
break;
}print_player();//打印玩家棋盤(pán)
}
}
int main()
{
srand((unsigned int)time(NULL));//產(chǎn)生隨機(jī)數(shù)生成器
int input = 0;
muen();//菜單
do
{
scanf("%d", &input);
switch (input)
{
case 1:game();
break;
case 0:exit(1);//退出游戲
break;
default:
printf("輸入錯(cuò)誤,重新輸入\n");
break;
}
muen();
printf("contiue?\n");
} while (1);//循環(huán)玩游戲
system("pause");
return 0;
}
在頭文件game.h中聲明各種函數(shù):
game.h
#ifndef __GAME_H__ #define __GAME__H__ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define row 12 #define col 12 #define COUNT 10//棋盤(pán)中雷的總數(shù) extern char show_mine[row][col];//展示數(shù)組 extern char real_mine[row][col];//布雷數(shù)組 void muen();//菜單函數(shù) void init_mine();//初始化數(shù)組函數(shù) void set_mine();//布雷函數(shù) int count_mine();//統(tǒng)計(jì)周?chē)椎膫€(gè)數(shù) void print_player();//打印玩家棋盤(pán) void print_mine();//打印設(shè)計(jì)者棋盤(pán) int sweep_mine();//掃雷函數(shù) void safe_mine();//避免第一次被雷炸死的函數(shù) void open_mine(int x, int y);//展開(kāi)函數(shù) int count_show_mine(); ///判斷玩家棋盤(pán)剩余未知區(qū)域的個(gè)數(shù) #endif //__GAME_H__
將上面這個(gè)函數(shù)放在main.c文件中
以上我們便完成了掃雷的所有C語(yǔ)言代碼,接下來(lái)我們測(cè)驗(yàn)一下:
1、檢測(cè)第一次是否能不被炸死
2、檢測(cè)周?chē)鷽](méi)雷可以展開(kāi)

總結(jié)
測(cè)試顯示我們的代碼沒(méi)有問(wèn)題,我們總結(jié)一下,這個(gè)程序的難點(diǎn)的就是如何實(shí)現(xiàn)展開(kāi)和和保證第一次不被炸死,如果你仔細(xì)理解以上的程序,你就會(huì)明白其中的原理,包括為什么要在數(shù)組元素周?chē)嘁蝗υ?,這些模塊都是游戲的核心,等你掌握了這個(gè)程序,你的邏輯思維能力就會(huì)有很大的提高!
附game.c文件源碼:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
char show_mine[row][col] = { 0 };
char real_mine[row][col] = { 0 };
void muen()
{
printf("*******************************\n");
printf("*****1.play 0.exit*******\n");
printf("*******************************\n");
}
void init_mine()//初始化兩個(gè)棋盤(pán)
{
int i = 0;
int j = 0;
for (int i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
show_mine[i][j] = '*';
real_mine[i][j] = '0';
}
}
}
void print_player()//打印玩家棋盤(pán)
{
int i = 0;
int j = 0;
printf("0 ");
for (i = 1; i <row-1; i++)
{
printf("%d ", i);//打印橫標(biāo)(0--10)
}
printf("\n");
for (i = 1; i <row-2; i++)//打印豎標(biāo)(1--10)
{
printf("%d ", i);
for (j = 1; j < col-1; j++)
{
printf("%c ", show_mine[i][j]);//玩家棋盤(pán)數(shù)組
}
printf("\n");
}
printf("10 ");//開(kāi)始打印最后一行
for (i = 1; i < row-1; i++)
{
printf("%c ", show_mine[10][i]);
}
printf("\n");
}
void print_mine()//打印設(shè)計(jì)者棋盤(pán)
{
int i = 0;
int j = 0;
printf("0 ");
for (i = 1; i <row - 1; i++)
{
printf("%d ", i);//打印橫標(biāo)(0--10)
}
printf("\n");
for (i = 1; i <row - 2; i++)//打印豎標(biāo)(1--10)
{
printf("%d ", i);
for (j = 1; j < col - 1; j++)
{
printf("%c ", real_mine[i][j]);
}
printf("\n");
}
printf("10 ");//開(kāi)始打印最后一行
for (i = 1; i < row - 1; i++)
{
printf("%c ", real_mine[10][i]);
}
printf("\n");
}
void set_mine()//給設(shè)計(jì)者棋盤(pán)布雷
{
int x = 0;
int y = 0;
int count = COUNT;//雷總數(shù)
while (count)//雷布完后跳出循環(huán)
{
int x = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (real_mine[x][y] == '0')//找不是雷的地方布雷
{
real_mine[x][y] = '1';
count--;
}
}
}
int count_mine(int x, int y)//檢測(cè)周?chē)?個(gè)區(qū)域雷的個(gè)數(shù)
{
int count = 0;
if (real_mine[x - 1][y - 1] == '1')
count++;
if (real_mine[x - 1][y] == '1')
count++;
if (real_mine[x - 1][y + 1] == '1')
count++;
if (real_mine[x][y - 1] == '1')
count++;
if (real_mine[x][y + 1] == '1')
count++;
if (real_mine[x + 1][y - 1] == '1')
count++;
if (real_mine[x + 1][y] == '1')
count++;
if (real_mine[x + 1][y + 1] == '1')
count++;
return count;
}
void safe_mine()//避免第一次炸死
{
int x = 0;
int y = 0;
char ch = 0;
int count = 0;
int ret = 1;
printf("輸入坐標(biāo)掃雷\n");
while (1)
{
scanf("%d%d", &x, &y);//只能輸入1到10,輸入錯(cuò)誤重新輸入
if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判斷輸入坐標(biāo)是否有誤
{
if (real_mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
{
real_mine[x][y] = '0';
char ch = count_mine(x, y);
show_mine[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
while (ret)//在其余有空的地方設(shè)置一個(gè)雷
{
int x = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
int y = rand() % 10 + 1;//產(chǎn)生1到10的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
if (real_mine[x][y] == '0')//找不是雷的地方布雷
{
real_mine[x][y] = '1';
ret--;
break;
}
}break;//跳出此函數(shù)
}
if (real_mine[x][y] == '0')
{
char ch = count_mine(x, y);
show_mine[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
break;
}
}
else//坐標(biāo)錯(cuò)誤
{
printf("輸入錯(cuò)誤重新輸入\n");
}
}
}
int sweep_mine()//掃雷函數(shù),踩到雷返回1,沒(méi)有踩到雷返回0
{
int x = 0;
int y = 0;
int count = 0;
printf("輸入坐標(biāo)掃雷\n");
scanf("%d%d", &x, &y);//只能輸入1到10
if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
{
if (real_mine[x][y] == '0')//沒(méi)踩到雷
{
char ch = count_mine(x,y);
show_mine[x][y] = ch+'0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
open_mine(x, y);
if (count_show_mine() == COUNT)//判斷剩余未知區(qū)域的個(gè)數(shù),個(gè)數(shù)為雷數(shù)時(shí)玩家贏
{
print_mine();
printf("玩家贏!\n\n");
return 0;
}
}
else if (real_mine[x][y]=='1')//踩到雷
{
return 1;
}
}
else
{
printf("輸入錯(cuò)誤重新輸入\n");
}
return 0;//沒(méi)踩到雷
}
void open_mine(int x, int y)//坐標(biāo)周?chē)归_(kāi)函數(shù)
{
if (real_mine[x - 1][y - 1]== '0')
{
show_mine[x - 1][y - 1] = count_mine(x - 1, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x - 1][y] == '0')
{
show_mine[x - 1][y] = count_mine(x - 1, y) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x - 1][y + 1] == '0')
{
show_mine[x - 1][y + 1] = count_mine(x - 1, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x][y - 1] == '0')
{
show_mine[x][y - 1] = count_mine(x, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x][y + 1] == '0')
{
show_mine[x][y + 1] = count_mine(x, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y - 1] == '0')
{
show_mine[x + 1][y - 1] = count_mine(x + 1, y - 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y] == '0')
{
show_mine[x + 1][y] = count_mine(x + 1, y) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
if (real_mine[x + 1][y + 1] == '0')
{
show_mine[x + 1][y + 1] = count_mine(x + 1, y + 1) + '0';//顯示該坐標(biāo)周?chē)讛?shù)
}
}
int count_show_mine()//判斷剩余未知區(qū)域的個(gè)數(shù),個(gè)數(shù)為雷數(shù)時(shí)玩家贏
{
int count = 0;
int i = 0;
int j = 0;
for (i = 1; i <= row - 2; i++)
{
for (j = 1; j <= col - 2; j++)
{
if (show_mine[i][j] == '*')
{
count++;
}
}
}
return count;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易訂餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
c語(yǔ)言中static和extern的用法詳細(xì)解析
以下是對(duì)c語(yǔ)言中static和extern的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-09-09
C語(yǔ)言實(shí)現(xiàn)冒泡排序的思路以及過(guò)程
冒泡排序是最簡(jiǎn)單的排序方法,理解起來(lái)容易。雖然它的計(jì)算步驟比較多,不是最快的,但它是最基本的,初學(xué)者一定要掌握。本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值2021-09-09
一文詳解C語(yǔ)言char類(lèi)型中的存儲(chǔ)
C語(yǔ)言中的char是用于聲明單個(gè)字符的關(guān)鍵字,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言char類(lèi)型中存儲(chǔ)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開(kāi)發(fā)環(huán)境(圖文教程)
這篇文章主要介紹了Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開(kāi)發(fā)環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

