用C语言实现扫雷游戏

扫雷游戏相信大家都玩过把,那么怎样用C语言实现呢?

我们想要用代码来实现一定要先理清思路。

第一步,提出问题,扫雷游戏整个流程是怎么完成的?

1.生成棋盘,在里面随机布置10个雷(9 X 9的棋盘),棋盘上每个位置都是覆盖的,都是看不见里面是什么的。

2.我们要开始游戏了,随机点开了一个不是雷的格子,格子会统计以它为中心的九宫格内有多少雷,并显示在我们点开的各种上。

3.如果点到雷,游戏结束。如果我们成功点到最后剩下10格子,那么这十个格子必定是雷,游戏结束,排雷成功。

以上就是对扫雷游戏过程的简单描述。

第二步,分析问题,对上述过程分析,找出解决办法

1.生成棋盘,棋盘是9X9的,我们可以用数组来储存我们需要的数据。棋盘上要储存的数据有:该点是不是雷,该点周围的雷有多少。方法:随机在棋盘上放入10个1,其他位置是0,方便统计雷的个数。

2.棋盘格子在未点开时是覆盖住的。因此,我们可以使用另一个数组,给数组全部填上(*),表示该点是被覆盖的状态。当我们点开其中一个不是雷的格子时,自动定位到存储数据数组的同一位置,遍历该位置周围的数据,统计雷的个数,随后将统计的个数赋给覆盖数组的同一位置,将原来的*替换掉。

3.在实际操作后发现在统计个数时有一种特殊情况,在统计棋盘边边上的位置时发现九宫格有些位置无法遍历。方法:多开一些数组,在原有的基础上在开:“一圈”,让这一圈的值全部是0就可。

第三步,代码的实现

以下展示的代码是游戏的核心部分,一些简单内容自行发挥。

#define Rs 11
#define Ls 11

1.初始化数组的函数

void intboard(char arr[Rs][Ls], int rs, int ls,char t)
{
	for(int i=0;i

2.放置雷

void setmine(char arr[Rs][Ls], int rs, int ls)
{
	int cout = 10;   //雷的个数
	while (cout)   //0不是雷,1是雷
	{
		int x = rand() % (rs - 2) + 1;
		int y = rand() % (ls - 2) + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';
			cout--;
		}
	}
}

3.排查雷(核心部分),不难理解

void findmine(char mine[Rs][Ls], char show[Rs][Ls], int rs, int ls)
{
	int x, y;
	int win = 0;
	while (win< (rs - 2) * (ls - 2) - num)
	{
		printf("请输入要排查的坐标->");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x < (rs - 1) && y >= 1 && y < (ls - 1))
		{
			if (show[x][y] == '*')
			{
				if (mine[x][y] == '1')
				{
					printf("你排到雷啦,游戏结束\n");
					print(mine, Rs, Ls);
					Sleep(1900);
					break;
				}
				else
				{
					system("cls");
					int count = minenum(mine, x, y);
					show[x][y] = count + '0';
					print(show, Rs, Ls);
					win++;
				}
			}
			else printf("请勿重复输入坐标\n");
		}
		else
		{
			printf("坐标输入错误!请重新输入\n");
		}
	}
	if (win == (rs - 2) * (ls - 2) - num)
	{
		system("cls");
		print(show, Rs, Ls);
		printf("恭喜你排雷成功!!!!\n");
		Sleep(1500);
	}
	
}

4.统计雷的个数

直接暴力求解,把周围的数组全部遍历一遍

int minenum(char mine[Rs][Ls], int x, int y)
{
	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');
}

以上函数就是扫雷游戏实现的关键,剩下的就是把这些函数拼装在一起组成程序。

源码:
链接:https://pan.baidu.com/s/1hp4mGK9E4ak09iunsuCREQ?pwd=8ws1 
提取码:8ws1

如果觉得不错的话支持一下,谢谢大家^-^

你可能感兴趣的:(C语言,游戏,c语言)