相信扫雷都是大家初学c语言中最刻骨铭心的记忆,如今博主我大体已经学完了c语言,依旧感觉独自完成这个项目之后受益匪浅,今天和大家分享一下这个简易版的扫雷游戏该怎么去做
话不多说,我们马上开始
1.创建
首先我们把它当做一个简易的项目去做,那么其中肯定涉及到很多代码,甚至是大量的函数,因此我们想初步创建三个文件
分别是:game.c:用来存放函数的主体
game.h:用来声明函数和定义宏
test.c :用来测试,主函数调用
2.构建主体框架
我们想,完成一个项目最关键的应该就是确定大体的框架
扫雷作为一个游戏,在我们能力范围内,首先需要的是肯定是菜单,然后就是进入游戏的逻辑
那么这个框架我们就这样实现
游戏的选择自然而然要细心考虑到三种情况,使用switch语句实现,do_while语句实现循环,毕竟我们不可能玩一次,这里让我们忽略掉srand函数的调用。
3.完善game主体函数
有了框架,接下来扫雷游戏的关键就是game函数的逻辑完善,我们一步一步来分析。
我们想要玩游戏,像我们之前在学校老旧机房里玩的扫雷游戏,至少得有个正儿八经的棋盘吧。
那我们先从第一步开始,完善好棋盘的逻辑。
(1)棋盘的创建和初始化
我们开始想要创建简单点的棋盘,9*9大小的,那第一时间想到的肯定是二维数组,这里我们不如给未来留条路,当我们想要改变棋盘大小的时候还能轻松改变,那么我们就定义一个宏。
<1>第一个问题
然后我们再想创建一个棋盘真的可以吗?我们假如一开始棋盘都是未知的,可以将其初始化为 ‘*’ ,但当我们想要向里面插入雷的时候,假设将其改为‘1’,那如果要显示周围有几个雷的时候,又该怎么显示呢,这个逻辑下创建两个棋盘似乎是最合适的,一个观察雷的的个数(相当于给开发人员看的),一个用来玩(给玩家看的)。
<2>第二个问题
然后我们再想,我们该玩家怎么去扫雷,输入坐标的形式似乎是比较合理的;还有就是当我们显示周围有几个雷的时候,如果这个雷在边上,或者角上,如何选择性的只访问创建数组范围内的格数,从而避免非法访问呢。似乎依靠强解很难处理,那我们不如换个思路,创建一个大一圈的数组,也就是11*11的数组,诶,就能避免非法访问这个问题了。
<3>解决问题
定义宏
创建数组并且初始化
初始化函数就是简单的嵌套for循环
然后我们打印棋盘,并且标注上相应的坐标,函数实现如下
OK,棋盘的部分我们似乎已经搞定了,继续完善。
(2)布置雷
假设我们要布置十个雷,那么我们要注意两个地方
第一:要随机放置雷
第二:不要把雷放在同一个位置上
第一点我们就需要使用rand%9+1 可以产生1~9之间的数字
第二点我们需要判断一下,避免将雷重复放在同一个位置上。
函数实现如下:
(3)排雷
最后一步就是排雷
<1>第一点:输入坐标
我们要考虑到输入坐标的合法性,坐标要在1~9范围之间,进行选择一次
我们要考虑到输入的坐标是否已经被排查过了,进行第二次选择
接下来,第三次选择就是
1,选到雷被炸死
2,未选到雷直到排净所有不是雷的坐标,游戏胜利
因此我们知道这是一个循环,循环结束的条件就是排净所有不是雷的坐标
其中被炸死会跳出循环,排净所有的坐标也会跳出循环,因此循环外再判断
最后一次,第四次选择,完成。
<2>还有最后一个细解,就是得到这个坐标周围雷的个数
那么在mine这个数组中,周围一圈加起来就是雷的个数,只不过是字符的数字,-8*‘0’即可得到整形,同理整形加上“0”也就可以得到相应的字符数字。
函数实现如下:
4.完结撒花
实现结果给大家看一下
感谢大家的观看,共勉
标签:函数,创建,简易版,扫雷,坐标,包会,棋盘,我们 From: https://blog.csdn.net/gycdn/article/details/144011382