C语言实现简易扫雷2.0

前提概要:本扫雷未实现自动展开功能,此功能需要用到递归,待深入学习后可以尝试实现。

扫雷游戏1.0的功能说明:

• 使⽤控制台实现经典的扫雷游戏

• 游戏可以通过菜单实现继续玩或者退出游戏

• 可以排查雷 ◦ 如果位置不是雷,就显⽰周围有⼏个雷

◦ 如果位置是雷,就炸死游戏结束 所有⾮雷都找出来,排雷成功,游戏结束

2.0拓展:

1.实现难度选择(三个难度:

简单9*9棋盘,10个雷

◦中等16*16棋盘,40个雷

 困难30*16棋盘,99个雷)

2.不断的输出执行回产生很多输出字符,且字符移动不适宜长久游玩。故试图加入静态优化。

正文:

1.理论分析

扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些 信息。很容易我们就会想到用二维数组去存储信息。假定在雷场数组mine中,“1”为有雷,”0“为无雷。

这样,我们就可以通过1与0去判断是否有雷。

但是我们肯定不会向玩家展示雷场真实情况,此时我们需要另外一个同大小的数组show,作为展示雷场,全部用”*“号覆盖。在玩家排雷后又展示周围雷数情况。所以为了方便,数组类型均采用字符为好,避免强制转换带来的麻烦。

mine雷场信息像这样:

show展示雷场像这样:

在判断雷数是,会采用右图的机制,寻找所选坐标周围8个位置里的雷数并反馈。                                                           但是存在一个问题,那在边缘的位置会有越界,需要再加判断,程序冗杂。                         所以,我们可以在原有数组上在加大一圈并全部填充0,这样就解决了越界问题。

我们整体的流程如上图:

然后我们将函数声明放在名为“game.h”的头文件里,函数定义放在“game.c”的源文件里。

最后在“start.c”源文件中调用自定义头文件:

就可以先写出大致步骤,然后再去深入细化函数。

我写的扫雷2.0源码:Game_study——SaoLei · 有栖未花/历程 - 码云 - 开源中国 (gitee.com)

随机布雷就用rand还有srand就好了。

关于难度选择影响变量,我们只需要在头文件里声明,在game.c文件里判断并赋值全局变量,然后再在start.c里用extern调用外部字符就可以在三个文件中统一变量。方便好用。

视图优化就引入

然后就可以调用

删掉前面没用的视图。完成视图静态,不会上下乱窜。

这里公开代码原图,供参考:

start.c:

game.h:

game.c:

最终效果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值