C语言数组—经典扫雷游戏

目录

设计思路:

 1. 简易游戏菜单

2. 游戏棋盘初始化

3. 游戏棋盘打印

 4. 布置雷

 5. 排查雷和胜利条件

6. 递归展开排雷

游戏测试

 程序源码


看到这个经典的画面,是否会勾起你的回忆呢?

还记的xp系统里的游戏吗,蜘蛛纸牌、扫雷、五子棋等 。至今记得小时候电脑课用着没网的电脑跟小伙伴们玩着扫雷,纸牌游戏,看谁的分数高呢。今天就让我们重温经典,自己试着来完成一个扫雷的小游戏。

 想要完成一个小游戏,我们得明白这个游戏是怎么玩得,它是一个怎么样得规律

 当我们点击一个空格后,显示了一个3,这代表着在这个3周围一圈8个方格中有着3个炸弹,具体是哪3个呢就需要我们通过运气来继续点击边上得方格来进行观察了。

 大概了解了扫雷游戏是怎么玩的,它的规律是什么后,我们就来开始今天的重头戏吧。

设计思路:

将扫雷的实现过程进行拆分,并创建三个文件来存储:

    测试文件(main.c)       游戏实现文件(game.c)      头文件(game.h)

 1. 简易游戏菜单

我们在测试文件中打印一个简易菜单,并对菜单可以进行一个选择,选择1开始我们的扫雷游戏,选择0则退出游戏,如果不小心选择了其他数字,就提醒玩家选择错误,请重新选择。而且可以实现重新选择和玩完一把后还可以继续玩,

代码实现:

int main()
{
	test();//为测试模块封装一个test函数,使main函数更简洁
	return 0;
}
void test()
{
	int input = 0;
	//打印菜单
	do
	{
		menu();//菜单模块封装一个menu函数
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//游戏实现模块封装一个game函数
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (input);
}
//菜单
void menu()
{
	printf("***********************\n");
	printf("****    1. play    ****\n");
	printf("****    0. exit    ****\n");
	printf("***********************\n");
}

2. 游戏棋盘初始化

这里很明显的我们可以发现这是一个9*9的一个方格棋盘(我们也以9*9为例),所以我们需要二维数组来存放我们的棋盘,那我们该如何来存放呢,这里我大概说一下思路。

我们使用两个二维数组来存放我们的棋盘,一个(mine)数组来存放我们布置雷的棋盘,一个(check)数组来存放显示给我们进行排雷的棋盘。那这两个数组需要多大呢?

 我们想要打印的棋盘是一个9*9的棋盘,但是如果我们想要排查左下角的方格时,会发现出现了越界操作。所以为了避免越界我们就将棋盘存放设置为一个11*11的棋盘。为了使两个数组可以下标相同我们都设置成11*11的棋盘,为了方便排雷和布置我们将数组类型设置成字符类型。

为了后续增加可维护性和可以进行一个修改,我们在头文件进行宏定义行和列

 代码实现:

game.h头文件

void game()
{
	//存放布置雷
	char mine[ROWS][COLS] = { 0 };
	//存放排查雷
	char check[ROWS][COLS] = { 0 };
}

创建好存放棋盘的数组,我们就要对棋盘进行初始化,为了使两个棋盘一眼可以看出是布置雷棋盘还是排查雷棋盘,我们将mine数组初始化为‘0’,使排查雷数组更美观更有神秘感,将check数组初始化为‘*’

代码实现:

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值