中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

C語言實(shí)現(xiàn)掃雷(自動(dòng)排查),遞歸展開-創(chuàng)新互聯(lián)

1992年4月6日,掃雷和紙牌、空當(dāng)接龍等小游戲搭載在Windows 3.1系統(tǒng)中與用戶見面,主要目的是讓用戶訓(xùn)練使用鼠標(biāo)。這個(gè)游戲的玩法很簡單,有初級、中級、高級和自定義等模式,雷區(qū)中隨機(jī)布置一定數(shù)量的地雷,玩家需要盡快找出所有不是地雷的方塊,但不許踩到地雷

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)簡陽,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

掃雷:當(dāng)選擇排除的坐標(biāo)沒有設(shè)置雷,就會(huì)顯示出周圍有幾個(gè)雷,若是周圍八個(gè)方向都沒有雷的話就開始自動(dòng)展開,依次判斷周圍的八個(gè)坐標(biāo)

但這里有一個(gè)邊界問題:如果排除的是如圖的四個(gè)位置,那么往周圍八個(gè)坐標(biāo)進(jìn)行遍歷的時(shí)候就有數(shù)組越界的風(fēng)險(xiǎn),這里有兩個(gè)解決方法:

1:當(dāng)遇上邊界的時(shí)候進(jìn)行判斷
2:把棋盤設(shè)置大一些,加入是一個(gè)9*9的棋盤,那么我們可以開一個(gè)11*11的數(shù)組,超出的部分全部設(shè)置為0,這樣就算遍歷的時(shí)候統(tǒng)計(jì)雷的個(gè)數(shù)也不會(huì)影響結(jié)果,也不會(huì)造成數(shù)組越界

由于我們使用的是 C語言,不能使用typedef pairPII來將一個(gè)數(shù)組里存放兩個(gè)元素,也就是當(dāng)用戶排雷的時(shí)候看到的是:

但如果是這樣,就無法知道哪里有雷哪里沒有雷了

所以可以開兩個(gè)數(shù)組,一個(gè)存雷的位置,一個(gè)展示給用戶

首先進(jìn)行初始化棋盤:

void InitBoard(char board[ROWS][COLS],int row, int col,char set)
{
	int i = 0;
	printf("\n");
	for (i = 0; i< row; i++) 
	{
		int j = 0;
		for (j = 0; j< col; j++)
		{
			board[i][j] = set;
		}
	}
}

set就是要在該棋盤要設(shè)置的參數(shù),比如‘*’? ‘0’這些

比較重要的就是如何實(shí)現(xiàn)自動(dòng)排雷,遞歸展開

如圖,如果以紅色圈圈為中心的位置,周圍八個(gè)坐標(biāo)圍成的正方形都沒有雷的話,就自動(dòng)展開,并且該位置的元素設(shè)置為 ‘ ’ (空格),這里以展開藍(lán)色位置為例子,藍(lán)色坐標(biāo)可以展開的藍(lán)色框框的區(qū)域,如果使用遞歸實(shí)現(xiàn)展開的話這里就會(huì)有一個(gè)問題,紅色圈圈位置遞歸之后,藍(lán)色圈圈位置遞歸的過程中又遞歸到了紅色圈圈的位置,所以就會(huì)造成遞歸死循環(huán)的情況,所以可以添加一些條件:

if (show[i][j] == '*')//為*則為沒有排查過的,可以展開,防止死遞歸
{
			Spread(mine, show, i, j);
}
test.c文件
#include"game.h"
void menue() {
	printf("******************************\n");
	printf("************1.play************\n");
	printf("************0.exit************\n");
	printf("******************************\n");
}

void game() {
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };
	//初始化棋盤
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show, ROWS, COLS,'*');
	//打印棋盤
	DisplayBoard(show, ROW, COL);
	setmine(mine, ROW, COL);
	DisplayBoard(mine,ROW,COL);
	printf("\n");
	//排查雷
	FindMine(mine, show, ROW, COL);
}

void test() {
	srand((unsigned int)time(NULL));
	int input = 0;
	do {
		menue();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input) {
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲 Success!");
			break;
		default :
			printf("選擇錯(cuò)誤,請重新選擇!\n");
			break;
		}
	} while (input);
}

int main(void) {
	test();
	return 0;
}
game.c文件
#pragma once
#include"game.h"
void InitBoard(char board[ROWS][COLS],int row, int col,char set)
{
	int i = 0;
	printf("\n");
	for (i = 0; i< row; i++) 
	{
		int j = 0;
		for (j = 0; j< col; j++)
		{
			board[i][j] = set;
		}
	}
}

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	for (int j = 0; j<= col; j++)
	{
		printf("%d ", j);
	}
	printf("\n");
	for (i = 1; i<= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j<= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

//設(shè)置雷
void setmine(char mine[ROWS][COLS], int row, int col)
{
	//假設(shè)布置10個(gè)雷
	int count = EASY_COUNT;
	while (count)
	{
		//生成隨機(jī)下標(biāo)
		int x = rand() % row + 1;//1->9
		int y = rand() % col + 1;//1->9
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

int get_mine_count(char show[ROWS][COLS], int x, int y)
{
	return (show[x - 1][y - 1] + show[x - 1][y] + show[x - 1][y + 1] + show[x][y - 1] +
		show[x][y + 1] + show[x + 1][y - 1] + show[x + 1][y] + show[x + 1][y + 1] - 8 * '0');
}

void Spread(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)
{
	int n = get_mine_count(mine, x, y);
	//邊界條件,防止數(shù)組越界
	if (x >= 1 && x<= ROW && y >= 1 && y<= COL)
	{
		if (n == 0)//需要展開
		{
			show[x][y] = ' ';//該點(diǎn)周圍沒有雷就設(shè)置為空格
			for (int i = x - 1; i<= x + 1; i++) {
				for (int j = y - 1; j<= y + 1; j++) {
					if (show[i][j] == '*')//為*則為沒有排查過的,可以展開,防止死遞歸
					{
						Spread(mine, show, i, j);
					}
				}
			}
		}
		else {
			show[x][y] = n + '0';//字符轉(zhuǎn)為數(shù)字
		}
	}
}

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0, y = 0,win=0;
	while (win");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{
			if (show[x][y] != '*')
			{
				printf("該坐標(biāo)已經(jīng)被排查過了\n");
				continue;
			}
			if (mine[x][y] == '1')
			{
				printf("很遺憾,你被炸死了!\n");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else 
			{
				Spread(mine, show,x, y);
				win++;
				DisplayBoard(show, ROW, COL);
			}
		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜你,排雷成功!\n");
	}
}
game.h文件
#define ROWS 11
#define COLS 11
#define ROW 9
#define COL 9
#define EASY_COUNT 10
#include#include#include//初始化棋盤
void InitBoard(char mine[ROWS][COLS],int row,int col,char set);

//打印棋盤
void DisplayBoard(char board[ROWS][COLS], int row, int col);

//設(shè)置雷
void setmine(char mine[ROWS][COLS],int row, int col);

//獲取雷的個(gè)數(shù)
int get_mine_count(char show[ROWS][COLS], int x, int y);

//展開
void Spread(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y);

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:C語言實(shí)現(xiàn)掃雷(自動(dòng)排查),遞歸展開-創(chuàng)新互聯(lián)
分享鏈接:http://m.2m8n56k.cn/article40/dhhpho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)網(wǎng)站維護(hù)手機(jī)網(wǎng)站建設(shè)服務(wù)器托管虛擬主機(jī)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
主站蜘蛛池模板: 亚洲国产精品综合久久一线 | 亚洲第一区视频 | 国产成人亚洲精品 | 97国产成人精品免费视频 | 国产精品国产三级国产a | 久久88香港三级 | 日韩毛片高清免费 | 乱人伦中文字幕视频 | 欧美 另类 精品一区视频 | 久久精品成人欧美大片免费 | 美女张开腿让男人操 | 成人在线视频一区 | 九九视频只有精品六 | 亚洲欧美自拍视频 | 国产精品拍自在线观看 | 波多野吉衣 免费一区 | 欧美片能看的一级毛片 | 国产精品特级毛片一区二区三区 | 亚洲精品国产综合一线久久 | 免费三级网 | 亚洲国产精品67194成人 | 日本a级三级三级三级久久 日本a级特黄三级三级三级 | 精品久久免费视频 | 性亚洲精品 | 亚洲精品视频在线 | 中文字幕亚洲不卡在线亚瑟 | 亚洲午夜大片 | 美女舒服好紧太爽了视频 | 欧美一区亚洲二区 | 国产美女午夜精品福利视频 | 久久精品久久精品久久 | 自拍 欧美 在线 综合 另类 | 一区二三区国产 | 中国一级性生活片 | 国产色视频在线观看免费 | 97久久精品国产精品青草 | 亚洲欧美精品中文字幕 | 亚洲天堂成人 | 色综合天天综合网看在线影院 | 91热视频在线观看 | 男女福利社 |