【C语言】扫雷v1(有待改进:排雷时无雷区域递归展开)

一、理清整体思路

扫雷整体与三子棋类似,也是需要两个源文件:main.c 和 game.c,一个头文件game.h。

main.c 游戏的整体框架

game.c 游戏具体功能的实现

game.h 游戏中所需函数和自定义常量的声明

首先想做成这样的扫雷

        首先需要创建二维数组对雷的坐标进行保存,假设在游戏中用字符0表示无雷,字符1表示有雷。然后玩家排雷时,若是安全区,则需要用字符显示周围有几个雷,假设旁边有一个雷的话,再显示字符1并存在同一个数组,则会让雷的数量混乱,所以需要创建两个数组,一个专门放雷的信息,称作mine数组,一个专门用来显示给玩家排雷称作show数组。

        然后对两个数组先进行初始化,让mine数组都为字符零,show数组都为*。

        因为在排雷时会对输入的坐标周围八个坐标进行判断是否有雷;如果输入的坐标在边缘的话会存在数组越界的问题,所以创建数组时要比真实使用的数组要多两行两列,消除排雷时数组越界的可能性。

        两个数组初始化完成后,就是对mine数组里面放雷,放在比创建数组要小的真实数组中,即除去第一行、最后一行、第一列、最后一列。

        然后进行排雷,玩家若是碰到雷,则游戏结束;若没有,则需要在show数组中显示此坐标周围有多少雷,直到所有安全区域都探明,玩家胜利游戏结束。

二、代码实现

1、创建主程序并测试

因为游戏一上来就要进入游戏显示主界面并让玩家选择,先完成游戏主体框架

先在main.c中完成主体框架​编辑

完成后测试,看是否有问题

 2、创建数组并初始化棋盘

用常量标识符使代码更有通用性
在main.c的game()中创建数组并调用初始化函数

        用常量标识符替代字符常量,只需要在头文件game.h中更改常量,即可修改整个项目里的相关常量,使代码更有通用性。

在game.c中对initial_board()进行定义

        初始化完成后还需要对棋盘进行打印,创建一个打印的函数来完成

在game.c中定义打印函数

测试程序看是否有问题

3、在mine数组中埋雷

        需要在mine真实用到的数组范围里生成地雷,用set_mine函数完成。因用到随机数生成,需要在主函数里添加时间戳。

        对埋雷数量也使用了常量标识符,方便进行修改扩展。

在game.h中设置了地雷数量的标识符

在game.c中对埋雷函数进行定义

涉及随机数生成需要一次时间戳

完成后对程序测试检查

 4、玩家排雷

玩家排雷的函数涉及到两个数组,所以参数里面两个数组都需要传参。

首先,要提醒玩家输入坐标,然后对坐标进行合法性判断,不在合法范围内请玩家重新输入;

如果在mine真实使用数组的范围内,则要判断当前坐标是否已经排查过雷,排查过则请玩家重新输入;

如果没有排查过则看此坐标是否有雷,有的话玩家死亡游戏结束。

没有雷则需要将此坐标周围八个坐标里雷的数量显示在show数组对应的坐标上,然后玩家继续排雷。

在game.c中对排雷函数的定义

完善main.c的逻辑

对整个游戏进行测试

 过段时间还需要通过递归的方式升级排雷的逻辑,达到真实游戏中一次排一片的效果。

谢谢各位佬们围观~

代码在下方链接如有需要可以自取

C语言程序设计 学习: 自学笔记+++++++

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值