【C语言】简单小游戏———扫雷,详细代码及其思路

引言

扫雷作为大部分电脑系统自带的经典游戏,大家应该都不陌生,这次我们就使用C语言编写一个简易的扫雷小游戏。

先看成果:

菜单依然是比较简陋的,0是触发退出游戏:

重点当然是1触发的开始游戏:当我们开始游戏就是显示一个九乘九的游戏地图来扫雷

雷的总数为10,输入你要扫雷的位置,他就会显示周围一圈雷的个数: 

当你不幸踩中雷,游戏会通知你:你已经输掉了,并且会打印出整个图的各个地雷的具体位置,让你心服口服。

ok,游戏展示环节结束,接下来,我们正式开始进行扫雷的编写。

开始编写 

分析需求

编码前,我们要知道我们游戏要实现哪些功能,要通过哪些方法实现,其中蕴含这什么样的逻辑。

首先是开始页面,我们通过选项‘1’开始游戏,然后就会打印出九乘九的游戏地图来供我们进行游戏;同时电脑会通过随机数的手段将十个地雷分别布置到地图中;而在显示出的地图上则会全部以 ‘*’ 作为掩饰;接着我们开始排雷,输入我们要排雷的位置,如果触发地雷,则直接宣布游戏结束并打印出这把游戏中所有雷的位置,我们可以选择再来一把或是退出游戏;如果没有触发地雷,则目的位置的 ‘*‘ 会变成周围一圈雷的数目,我们就这样根据已知信息一步一步排查出10个雷的位置,就能获得游戏的胜利,从而结束游戏。

开始编码

为了整个项目的代码看起来更具有条理性,也更容易理解,我们一共使用三个文件:test.c,game.c,game.h来实现,使其分别存放不同的代码:其中test.c用来测试整个游戏的逻辑;game.c用来存放所有用到的函数的实现;game.h用来包含所有用到的头文件,以及函数和符号的声明。

同时将game.h作为头文件包含到其他两个文件中去:

主题框架

最外层的框架,也就是我们的main函数实现的内容,实现的是最基础的菜单逻辑,即"开始游戏"与"退出游戏"。

菜单

接着是菜单函数的实现,也就是最外层表现出的东西:

开始游戏

然后是整个项目的主题,我们的“开始游戏”:在扫雷游戏的表现上,只显示一副地图,但是当我们实际制作时,却需要制作两幅地图,一副的确是实现出来供我们游戏的,而另一幅则是用来布置雷的隐藏地图。两幅地图,我们都通过数组的方式实现。

初始化地图

一开始,我们的两幅地图都需要先初始化,准备用来存放不同的东西:一幅用来布置地雷,一幅用来存放扫出来的雷的信息。

打印地图

然后便是打印出供我们游戏的地图,其中,为了方便我们在九行九列的地图上输入坐标,我们还将地图对应的行列号分别标在地图的最左边与最上方。

布置地雷

紧接着我们就需要在那副隐藏的地图上来布置地雷,为了保证游戏的可玩性,我们通过随机生成的方式布置地雷。

具体内容是:原本隐藏地图被我们全部初始化成0,但是我们通过随机数得到十个随机坐标,并将十个随机坐标中的0全部改成1,使其代表这地雷。

开始扫雷

开始扫雷主要表现为输入排雷位置,触发雷或者不触发雷的不同的返回:触发雷时,直接返回游戏失败提醒,并打印出隐藏地图,即显示出所有雷的具体位置;为触发雷,计算出隐藏地图中,输入坐标周边一圈的雷的个数,并将其显示在外在地图中,替换对应位置的 ‘*’ 。

在我们布置地雷的时候,我们可以选择直接将隐藏地图也给打印出来,方便我们测试游戏的逻辑。相对来说,扫雷的胜负判断条件还是比较简单的,只需要判断数组对应位置的字符即可,游戏的进行也是通过不断修改数组中的字符实现的。

代码汇总

test.c

game.c

game.h

相比真正的扫雷,本项目还是具有很大的优化空间的,例如当周围一圈都没有雷时,地图会直接向外扩散出去,就像这样:

可以大大节省我们的时间

最后放一张扫雷成功的图片(80个雷版):

欢迎各位大佬指点与交流!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值