最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言掃雷游戲?qū)崿F(xiàn)方法詳解(包含遞歸,變色,記錄時間等)

 更新時間:2025年12月15日 09:47:54   作者:zore_c  
掃雷游戲想必大家都有玩過吧,沒完過的話也可以試著玩一玩,這樣對寫掃雷游戲這個小游戲的化是會有一個很好的思路的,這篇文章主要介紹了C語言掃雷游戲?qū)崿F(xiàn)(包含遞歸,變色,記錄時間等)的相關(guā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é)束了

大家可自己游玩,也可改進我的代碼

本期資料來自于:

https://legacy.cplusplus.com/

到此這篇關(guān)于C語言掃雷游戲?qū)崿F(xiàn)的文章就介紹到這了,更多相關(guān)C語言掃雷游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++去除輸入行中空白的方法

    C++去除輸入行中空白的方法

    這篇文章主要介紹了C++去除輸入行中空白的方法,涉及C++針對數(shù)組的遍歷與替換的相關(guān)使用技巧,需要的朋友可以參考下
    2015-07-07
  • C/C++編寫推箱子小游戲

    C/C++編寫推箱子小游戲

    這篇文章主要為大家詳細介紹了C/C++編寫推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 全面了解#pragma once與 #ifndef的區(qū)別

    全面了解#pragma once與 #ifndef的區(qū)別

    下面小編就為大家?guī)硪黄媪私?pragma once與 #ifndef的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C語言實現(xiàn)電影管理系統(tǒng)

    C語言實現(xiàn)電影管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電影管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++ static的作用解讀

    C++ static的作用解讀

    這篇文章主要介紹了C++ static的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言中strlen()函數(shù)的使用詳解

    C語言中strlen()函數(shù)的使用詳解

    strlen函數(shù)是用來求字符串長度的函數(shù),這個函數(shù)遇到‘\0’就會停止,且這個長度不包含‘\0’,這篇文章給大家介紹了C語言中strlen()函數(shù)的使用,感興趣的朋友一起看看吧
    2024-02-02
  • C語言 實現(xiàn)歸并排序算法

    C語言 實現(xiàn)歸并排序算法

    這篇文章主要介紹了C語言 實現(xiàn)歸并排序算法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 基于一致性hash算法 C++語言的實現(xiàn)詳解

    基于一致性hash算法 C++語言的實現(xiàn)詳解

    在《基于一致性hash算法(consistent hashing)的使用詳解》一文中已經(jīng)介紹了一致性hash的基本原理,本文將會對其具體實現(xiàn)細節(jié)進行描述,并用c++語言對一致性hash進行了簡單的實現(xiàn)
    2013-05-05
  • c語言static關(guān)鍵字用法詳解

    c語言static關(guān)鍵字用法詳解

    大家好,本篇文章主要講的是c語言static關(guān)鍵字用法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • c++11之統(tǒng)一初始化(Uniform Initalization)實現(xiàn)

    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

最新評論

基隆市| 老河口市| 泰宁县| 体育| 郓城县| 长沙县| 台北县| 尚义县| 湖南省| 平顶山市| 格尔木市| 达州市| 泽普县| 威信县| 南投县| 大名县| 太康县| 靖州| 杭州市| 平武县| 上饶县| 马关县| 平阴县| 潞西市| 镇巴县| 惠水县| 巴彦淖尔市| 江达县| 彰化县| 大关县| 进贤县| 乌鲁木齐市| 六盘水市| 镇沅| 石城县| 资兴市| 杭锦后旗| 梅州市| 闻喜县| 都江堰市| 迁安市|