C语言--扫雷进阶版,实现周围坐标展开

进阶版只需要再简单版的基础上增加一个能实现周围坐标展开的功能,并且改变判断是否胜利的条件。

简单版在之前的发布的文章中可看到

C语言实现简易扫雷小游戏_标仔22的博客-CSDN博客

如何能够实现坐标展开呢

可以利用递归,首先先判断我们输入的坐标周围的八个坐标,如果周围八个全都不是雷,则先展开这八个坐标。展开这八个坐标后,再依次对这八个坐标每个坐标的周围八个坐标进行判断,依次类推进行判断,直至每个判断的坐标周围全部有雷才停下。

void spread(char arr[hangs][lies], char arr2[hangs][lies], int x, int y)//坐标周围展开
{
	int near_x = 0, near_y = 0;
	int count = 0;
	if (x >= 1 && x <= hang && y >= 1 && y <= lie)//判断输入的坐标是否有效
	{
		//循环该坐标周围的八个坐标
		for (near_x = -1; near_x <= 1; near_x++)
		{
			for (near_y = -1; near_y <= 1; near_y++)
			{
				if (arr2[x + near_x][y + near_y] == '#')
				{
					count = jud(arr2, x + near_x, y + near_y);
					if (count == 0)//如果该坐标周围没有雷则全部展开
					{
						if (arr[x + near_x][y + near_y] == '*')
						{
							arr[x + near_x][y + near_y] = ' ';
							//利用递归第一次扫的坐标后再判断周围八个坐标每个坐标的周围八个坐标,
							//直至判断的坐标周围有雷再停下
							spread(arr, arr2, x + near_x, y + near_y);
						}
					}
					else
					{
						arr[x + near_x][y + near_y] = count + '0';
					}
				}
			}
		}
	}
}

在简单版中,我们一步只能判断一个坐标,因此胜利的条件就是我们扫雷步数等于全部坐标数减去雷的总数即可。但由于

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值