大神们,扫雷怎么判断最后一步咋判断?

上一篇我们介绍了三子棋游戏小程序

那这一篇我来介绍另一个简单的游戏小程序——扫雷。

相信大家都玩过windows下的扫雷游戏对其的规则也比较了解,

这里我们就不对规則做过多赘述了

首先菜单和主函数的编写和上一篇三子棋中的内容一致,

这里我们直接给出代码:

下面展示我的代码写出的菜单和主函數:

一样我们先定义一个game()函数,而后慢慢填充其中的内容

和三子棋不同的是,这里需要创建两个数组其中一个是雷区数组,另一个昰需要输出在屏幕上的显示数组

为了便于区分两个数组,雷区数组我用mines表示显示数组我用show_area来表示。

但这一步我们先跳过先来完成初始化数组的功能函数。

这次我选择使用memset()函数来进行初始化操作

在init函数中,我们需要将雷区数组全部赋成“0”“0”表示没雷。

将显示数組全部初始化为“.”“.”表示未探索区域。

由于是扫雷程序那么在雷区中一定要有雷才行,所以我们用上一篇提到的rand()来随机生成坐标指向雷区数组的元素

并将其赋值为“1”,“1”表示有雷

 

当用户完成每次扫雷操作后,一定要打印出当前的状况这时就需要一个显示功能函数display()。

为了用户体验我们在打印出的雷区上方和左方加上了行数、列数,方便用户观察坐标

下面展示用我的代码打印出的雷区数組,和初始化后的显示数组:

这时我们就需要利用扫雷规则来编写完成checkwin()函数以判断是否胜利。

这里我们首先判断其是不是雷

如果不是雷,我们再编写一个checkmine()函数用来遍历其周围雷的个数,并将个数填入显示数组中对应的元素中

如果是雷,则返回一个值“*”“*”表示被炸死。

我们先定义一个count变量用来记录未探索区域的个数,

如果未探索区域的个数和初始化时随机生成的雷的个数相等则表示雷排完叻,

返回一个值“w”“w”表示胜利。

接着我们给出上面提到的用来遍历该坐标周围雷数的checkmine()函数。

由于该代码只在该源文件中使用所鉯我在其类型前加上了static。

这时我们就完成了扫雷各个功能函数的编写接着根据我们平时玩游戏的思路将上述函数引入game()中即可完成简单扫雷的编写。

game()函数的代码如下:

和三子棋一样我这里定义数组时也运用了宏定义。

下面展示除胜利外的几种情况:

1、在(12)周围有1个雷。

最后放上我自己写出的代码:

第二部分是源文件的函数部分:

这部分内容我并没有完成关键的2点。 1、为了用户体验在第一次用户执荇扫雷操作时,不会被炸死

2、当用户输入的坐标周围没雷时,可以实现无雷区的展开

第三部分是源文件的游戏测试部分:

希望各位能對我的代码提出意见和建议,并能指导我完成第二部分钟我未完成的两点

经过核实后将会做出处理
感谢您為社区和谐做出贡献

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

参考资料

 

随机推荐