扫雷C语言实现(简单版)

一、实现扫雷的基本思路

1.游戏部分创建两个二维数组,display和hide数组。hide数组是存放炸弹的数组,有炸弹是1,没有炸弹是0;display数组是用来展示地雷的数组,未知显示‘*’,排查的地方显示周围8个地方地雷总数量

2.初始化二维数组

3.实现玩家扫雷的逻辑:玩家输入一个坐标,踩雷游戏结束,未踩雷显示显示周围8个地方地雷总数量

4.排查结束,游戏胜利,玩家可重来或退出

游戏效果展示

代码思路:

1.需要两个二维数组,1个用来展示,一个用来放置地雷

//创建两个二维数组
	char display[ROW + 2][COL + 2] = { 0 };
	char hide[ROW + 2][COL + 2] = { 0 };
	
	//棋盘的初始化
	memset(display, '*', (ROW + 2) * (COL + 2));
	memset(hide, '0', (ROW + 2) * (COL + 2));
//放置地雷
//地雷是字符1 ,安全是0
void PutMine(char arr[ROW + 2][COL + 2], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 0;
	while (1)
	{
		x = rand() % row + 1;
		y = rand() % row + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';
			++count;
		}
		if (count == MineCount)
			break;
	}
}

2.玩家开始扫雷

扫雷逻辑

//玩家开始扫雷
	int x = 0;
	int y = 0;
	int win = 0;
	while (1)
	{
		printf("请输入坐标,中间加上空格:");
		scanf("%d %d", &x, &y);
		Player(display, hide, x, y);
		//判断是输赢还是继续
		int ret = IfWin(hide, x, y);
		Print(display, ROW, COL);
		printf("\n");
		++win;
		if (ret == 0)
			break;
		if (win == ROW*COL- MineCount)
		{
			printf("恭喜你,赢得游戏,退出或者再玩一次\n");
			break;
		}
	}
}
//玩家开始扫雷
void Player(char display[ROW + 2][COL + 2], char hide[ROW + 2][COL + 2], int x, int y)
{
	while (1)
	{
		//判断坐标合法性
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			//数这个坐标周围8个格子共有多少个雷
			int count = 0;
			for (int i = x - 1; i <= x + 1; i++)
			{
				for (int j = y - 1; j <= y + 1; j++)
				{
					if (i == x && j == y)
						continue;
					if (hide[i][j] == '1')
						++count;
				}
			}
			display[x][y] = count + '0';
			break;
		}
		else
		{
			printf("坐标非法,请重新输入:");
			scanf("%d %d", &x, &y);
		}
	}
}

//判断是否踩雷
//猜到雷返回0
//安全返回1

int IfWin(char hide[ROW + 2][COL + 2], int x, int y)
{
	if (hide[x][y] == '1')
	{
		printf("你踩到雷了,游戏失败\n");
		return 0;
	}
	return 1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hsifles

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

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

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

打赏作者

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

抵扣说明:

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

余额充值