扫雷优化版

未优化版的扫雷需要1个1个输入坐标,而我们见到的扫雷是点一下展开一片,所以我们进行优化,此外,再加上标记雷和取消雷的操作

 

void range(char board[ROWS][COLS], char show[ROWS][COLS], int x, int y, int option)
{

	if (x == 0 || y == 0 || x == ROWS - 1 || y == COLS - 1) //防止访问边界
		return;
	if (show[x][y] != '*')  //防止重复访问 
	{
		return;
	}
	if (option == 1) //下棋
	{
		int num = mine_num(board, x, y);
		show[x][y] = ' ';
		if (num > 0)
		{
			show[x][y] = num + '0';
			return;
		}
		if (num == 0)//附近没雷
		{
			range(board, show, x - 1, y - 1, option);
			range(board, show, x - 1, y, option);
			range(board, show, x - 1, y + 1, option);
			range(board, show, x, y - 1, option);
			range(board, show, x, y + 1, option);
			range(board, show, x + 1, y - 1, option);
			range(board, show, x + 1, y, option);
			range(board, show, x + 1, y + 1, option);
		}
	}
	else if (option == 0)//标记雷
	{
		show[x][y] = 'X';
		

	}
	
}


void findmine(char board[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{
	int win = 0;
	while (1)
	{
		int x = 0;
		int y = 0;
		int option = 0;
		printf("\n请输入坐标->");
		scanf("%d %d", &x, &y);
		printf("\n0.标记雷\n1.扫雷\n2.取消标记雷\n请选择操作->");
		getchar();
		scanf("%d", &option);
		if (x >= 1 && x <= r && y >= 1 && y <= c)  //防止访问边界
		{
			if (show[x][y] == '*')            //未被重复访问
			{
				if (board[x][y] == '1'&&option==1)    //踩到雷
				{
						printf("\n恭喜你,踩到雷了,游戏失败\n");
						break;      //游戏结束,跳出循环

				}
				else      //游戏未结束
				{
					range(board, show, x, y, option);
					win++;
				
					
				}
			}
			else     //被重复排查
			{
				if (option == 2 && show[x][y] == 'X')   //取消标记雷
				{
					show[x][y] = '*';
				}
				if(option==1)
				printf("\n该地已被排查\n");
			}

			if (win == r * c - mine )   //胜利,跳出循环
			{
				printf("\nWIN\n");
				print(board, r, c);
				break;
			}
				
		}
		else   //访问边界,重新输入
		{
			printf("坐标非法,请重新输入\n");
		}
		print(show, r, c);

	}
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJY_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值