中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

掃雷小游戲(C語言版)-創(chuàng)新互聯(lián)

文章目錄
  • 1.案例分析
  • 2.解題思路
  • 3.具體實(shí)現(xiàn)
    • 3.1文件創(chuàng)建
    • 3.2設(shè)置游戲界面
    • 3.3雷盤的初始化
    • 3.4打印雷盤
    • 3.5布雷
    • 3.6排查雷
  • 4.完整代碼
    • 4.1game.h文件
    • 4.2game.c文件
    • 4.3test.c文件

成都創(chuàng)新互聯(lián)公司始終致力于在企業(yè)網(wǎng)站建設(shè)領(lǐng)域發(fā)展。秉承“創(chuàng)新、求實(shí)、誠信、拼搏”的企業(yè)精神,致力為企業(yè)提供全面的網(wǎng)絡(luò)宣傳與技術(shù)應(yīng)用整體策劃方案,為企業(yè)提供包括“網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、微信網(wǎng)站建設(shè)、微信小程序開發(fā)商城網(wǎng)站建設(shè)、平臺網(wǎng)站建設(shè)秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。1.案例分析

掃雷是一款經(jīng)典的小游戲,讓我們用C語言來實(shí)現(xiàn)一遍吧!
如下圖所示,當(dāng)我們點(diǎn)擊一個(gè)方塊時(shí),如果該方塊下方不是雷,那么它就會顯示該方塊四周有幾個(gè)雷
如果是雷的話,游戲結(jié)束
直到玩家找出所有不是雷的方塊,游戲勝利

在這里插入圖片描述

2.解題思路

在這里插入圖片描述
在這里插入圖片描述

3.具體實(shí)現(xiàn) 3.1文件創(chuàng)建

為了養(yǎng)成良好的編程習(xí)慣,方便代碼的管理,創(chuàng)建三個(gè)文件
掃雷的實(shí)現(xiàn)需要多個(gè)模塊的功能相互串聯(lián),多個(gè)文件可以分別處理各自模塊的功能,能更好處理各個(gè)模塊之間的邏輯并且便于后期調(diào)試,也使得代碼的可讀性提高

在這里插入圖片描述在這里插入圖片描述

3.2設(shè)置游戲界面
void menu()
{printf("************************************\n");
	printf("*****1.Play           0.exit  ******\n");
	printf("************************************\n");
}

int main()
{srand((unsigned int)time(NULL));
	int input = 0;
	do
	{menu();
		printf("請選擇:");
		scanf("%d", &input);
		switch (input)
		{case 1:game();
			break;
		case 0:printf("退出\n");
			break;
		default:
			printf("選擇錯誤,請重新選擇:\n");
			break;
		}
	} while (input);
	return 0;
}

在game()函數(shù)中,調(diào)用各個(gè)功能

void game()
{char mine[ROWS][COLS] = {'0'};//存放布置好的雷的信息
	char show[ROWS][COLS] = {'*'};//存放排查的雷的信息
	//初始化
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印
	DisPlayBoard(show, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);

	//布雷
	setMine(mine, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);
	//排查雷
	FindMine(mine,show,ROW,COL);

}
3.3雷盤的初始化

在此,設(shè)置兩個(gè)雷盤
mine雷盤:只存放雷的信息在未埋雷之前,雷盤中所有位置均為‘0’
show雷盤:存放排查的雷的信息在未排查之前,雷盤中所有位置均為‘*’

//board:傳過來的雷盤
//set:雷盤中放的元素
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;
	int j = 0;
	for (i = 0; i< rows; i++)
	{for (j = 0; j< cols; j++)
		{	board[i][j] = set;
		}
	}
}
3.4打印雷盤

為了玩家方便選擇位置,在雷盤中也要標(biāo)記出行、列

void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;
	int j = 0;
	printf("----------掃雷------------\n");
	//打印行號
	for (i = 0; i<=col; i++)
	{printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i<= row; i++)
	{//打印列號
		printf("%d ", i);
		//打印內(nèi)容
		for (j = 1; j<= col; j++)
		{	printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-------------------------\n");
}
3.5布雷

雷的布置是隨機(jī)的,因此采用rand()函數(shù)產(chǎn)生1-9的隨機(jī)數(shù),來實(shí)現(xiàn)隨機(jī)坐標(biāo)布雷
雷的布置均在wine雷盤中

void setMine(char mine[ROWS][COLS], int row, int col)
{int count = easy_count;//布置10個(gè)雷
	while (count)
	{int x = rand() % row + 1;
		int y = rand() % col + 1;
		//判斷該位置是否有雷
		if (mine[x][y] == '0')
		{	mine[x][y] = '1';
			count--;
		}
		//若該位置已有雷,則重新生成隨機(jī)坐標(biāo)
	
3.6排查雷

雷的排查首先檢查該位置是不是雷
如果是雷:被炸死,游戲結(jié)束
如果不是雷:顯示該坐標(biāo)周圍雷的個(gè)數(shù)

//統(tǒng)計(jì)周圍雷的個(gè)數(shù)
static int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return  
		mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
		mine[x][y - 1] + mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]
		- 8 * '0';
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{//1.輸入排查的坐標(biāo),檢查坐標(biāo)
	//2.判斷是不是雷
		//是,很遺憾你被炸了,游戲結(jié)束,打印一下所有雷的位置
		//不是,統(tǒng)計(jì)該坐標(biāo)周圍有幾個(gè)雷,然后將雷的數(shù)量顯示在該坐標(biāo)上
	int x = 0;
	int y = 0;
	int win = 0;
	//判斷排完的位置的個(gè)數(shù) 與雷盤中安全位置的關(guān)系
	while (winprintf("請輸入你要排查的坐標(biāo):");
		scanf("%d%d", &x, &y);
		//判斷坐標(biāo)合法性
		if ((x >= 1 && x<= row) && (y >= 1 && y<= col))
		{	if (mine[x][y] == '1')
			{		printf("很遺憾,你被炸死了\n");
				//讓你死的明白,打印一下雷區(qū)
				DisPlayBoard(mine, row, col);
				break;
			}
			else
			{		//不是雷,統(tǒng)計(jì)周圍幾個(gè)雷
				int count = get_mine_count(mine, x, y);
				//由于數(shù)組中放的是字符,所以要加上‘0’
				show[x][y] = count + '0';
				DisPlayBoard(show, row, col);
				win++;
			}
		}
		else
		{	printf("坐標(biāo)不合法,請重新輸入!\n");
		}
	}
	//安全位置全部找到
	if (win == row*col - easy_count)
	{printf("恭喜你,排雷成功!\n");
		printf("雷區(qū)分布如下:\n");
		DisPlayBoard(mine, row, col);
	}
}
4.完整代碼 4.1game.h文件
#include//顯示雷盤的大小
#define ROW 9
#define COL 9
//實(shí)際雷盤的大小
#define ROWS ROW+2
#define COLS COL+2
//雷的數(shù)量
#define easy_count 79

//初始化雷盤
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印雷盤
void DisPlayBoard(char board[ROWS][COLS], int row, int col);
//布雷
void setMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
4.2game.c文件
#include"game.h"

//初始化雷盤
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;
	int j = 0;
	for (i = 0; i< rows; i++)
	{for (j = 0; j< cols; j++)
		{	board[i][j] = set;
		}
	}
}
//打印雷盤
void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;
	int j = 0;
	printf("----------掃雷------------\n");
	//打印行號
	for (i = 0; i<=col; i++)
	{printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i<= row; i++)
	{//打印列號
		printf("%d ", i);
		//打印內(nèi)容
		for (j = 1; j<= col; j++)
		{	printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-------------------------\n");
}
void setMine(char mine[ROWS][COLS], int row, int col)
{int count = easy_count;//布置10個(gè)雷
	while (count)
	{int x = rand() % row + 1;
		int y = rand() % col + 1;
		//判斷該位置是否有雷
		if (mine[x][y] == '0')
		{	mine[x][y] = '1';
			count--;
		}
		//若該位置已有雷,則重新生成隨機(jī)坐標(biāo)
	}
}
//統(tǒng)計(jì)周圍雷的個(gè)數(shù)
static int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return  
		mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
		mine[x][y - 1] + mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]
		- 8 * '0';
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{//1.輸入排查的坐標(biāo),檢查坐標(biāo)
	//2.判斷是不是雷
		//是,很遺憾你被炸了,游戲結(jié)束,打印一下所有雷的位置
		//不是,統(tǒng)計(jì)該坐標(biāo)周圍有幾個(gè)雷,然后將雷的數(shù)量顯示在該坐標(biāo)上
	int x = 0;
	int y = 0;
	int win = 0;
	//判斷排完的位置的個(gè)數(shù) 與雷盤中安全位置的關(guān)系
	while (winprintf("請輸入你要排查的坐標(biāo):");
		scanf("%d%d", &x, &y);
		//判斷坐標(biāo)合法性
		if ((x >= 1 && x<= row) && (y >= 1 && y<= col))
		{	if (mine[x][y] == '1')
			{		printf("很遺憾,你被炸死了\n");
				//讓你死的明白,打印一下雷區(qū)
				DisPlayBoard(mine, row, col);
				break;
			}
			else
			{		//不是雷,統(tǒng)計(jì)周圍幾個(gè)雷
				int count = get_mine_count(mine, x, y);
				//由于數(shù)組中放的是字符,所以要加上‘0’
				show[x][y] = count + '0';
				DisPlayBoard(show, row, col);
				win++;
			}
		}
		else
		{	printf("坐標(biāo)不合法,請重新輸入!\n");
		}
	}
	//安全位置全部找到
	if (win == row*col - easy_count)
	{printf("恭喜你,排雷成功!\n");
		printf("雷區(qū)分布如下:\n");
		DisPlayBoard(mine, row, col);
	}
}
4.3test.c文件
#include"game.h"
#include#includevoid menu()
{printf("************************************\n");
	printf("*****1.Play           0.exit  ******\n");
	printf("************************************\n");
}
void game()
{char mine[ROWS][COLS] = {'0'};//存放布置好的雷的信息
	char show[ROWS][COLS] = {'*'};//存放排查的雷的信息
	//初始化
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印
	DisPlayBoard(show, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);

	//布雷
	setMine(mine, ROW, COL);
	//DisPlayBoard(mine, ROW, COL);
	//排查雷
	FindMine(mine,show,ROW,COL);

}
int main()
{srand((unsigned int)time(NULL));
	int input = 0;
	do
	{menu();
		printf("請選擇:");
		scanf("%d", &input);
		switch (input)
		{case 1:game();
			break;
		case 0:printf("退出\n");
			break;
		default:
			printf("選擇錯誤,請重新選擇:\n");
			break;
		}
	} while (input);
	return 0;
}

歡迎大家批評指正

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

網(wǎng)站欄目:掃雷小游戲(C語言版)-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article16/eppdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、網(wǎng)站收錄、域名注冊、全網(wǎng)營銷推廣、商城網(wǎng)站

廣告

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

微信小程序開發(fā)
柳河县| 岢岚县| 江陵县| 遂宁市| 乌兰县| 玉门市| 汉寿县| 吴桥县| 沂水县| 河曲县| 石家庄市| 湖南省| 拜泉县| 略阳县| 宁津县| 蒙阴县| 客服| 西青区| 女性| 五原县| 新民市| 清原| 新宁县| 盱眙县| 高青县| 惠州市| 宜良县| 阿瓦提县| 东乡县| 昭通市| 饶河县| 广平县| 克什克腾旗| 桃源县| 镇赉县| 屯昌县| 从江县| 乌兰察布市| 耒阳市| 潢川县| 南皮县|