小凡のC语言学习之旅——扫雷游戏

hello大家好,我是正在努力学习的编程的小凡。今天想要分享的内容是在控制台玩的一个扫雷小游戏。一起来看看吧。

首先我来解释一下我所写的这个扫雷游戏的玩法:

在游戏开始后,会生成一个9*9大小的棋盘,在这个棋盘上将会随机生成10个雷。玩家在扫雷进行扫雷时,需要输入想要探查的位置的坐标。若该位置是雷,则玩家直接寄。若该位置不是雷,则以该位置为圆心,以一为半径,统计周围有多少颗雷,并显示在所探查的位置。游戏结束的情况分两种:

1.排到雷,直接寄,游戏失败

2.排完所有雷,游戏成功

 游戏玩法在设计好后,我们就可以来实现设计。我将分为以下几个步骤:

1.制作菜单
2.游戏所使用的棋盘
3.完成雷的布置
4.游戏过程
5.游戏结束

那我们开始进行设计吧!

一.制作菜单与游戏棋盘

1.2.比较简单,这里就放到一起说。游戏开始后,首先得有一个菜单界面,让玩家选择是否游玩或者退出游戏。那我们简单的设计一个菜单。

这是菜单效果 

 为了让玩家知道我的扫雷的玩法,还可以加上一个说明

效果如下

 那么到这里,菜单的布置就差不多了,接下来,设计以下游戏的棋盘。


游戏是在一个9*9的棋盘中进行,那我们是否可以将他设计成一个9*9的二维数组 ,在这个数组中进行扫雷呢?

看起来好像是可以,但是在实践过程中,就会面临两个问题

1.根据游戏玩法,在排雷时会以探查的位置为中心,以一为半径检查周围的雷,若只是在9*9的棋盘中进行探查,就会出现数组越界访问的情况。

2.若是只在一个棋盘中进行,那么对数组的赋值就会出现混乱。

针对以上两个问题,可以这样解决

1.在初始化棋盘时,可以将棋盘初始化为11*11。在使用时,只使用其中的9*9,即行下标从1到9,列下标从1到9。

2.初始化两个11 * 11的棋盘,其中一个用于存放雷的信息,另一个用于给玩家进行游玩。


在对数组进行初始化时,数组的大小,使用宏定义。

这里我们在创建数组时选择创建的时char类型的数组。

使用宏定义,若是后续想对棋盘大小进行改变,只用在宏定义这里修改数值即可,十分方便。

在完成数组的初始化后,我们需要对两个棋盘中的元素的值进行定义 ,这里我们设计一个函数,更加方便使用。

这里,要将整个数组(11*11)全部进行初始化, 而将想要初始化的元素通过传参的方式传过去,可以简化代码。

再设计一个函数,将我们已经初始化的数组打印出来。

为方便游玩,在打印数组的同时,将行列号也一并打印出来。 

 现在,调用这两个函数看看效果。

                                 

那么到这里,1,2步就算完成了。


二.雷的分布

根据游戏玩法,设计一个函数,让他在棋盘中随机生成10个雷。

将雷的个数设置为宏定义,后续想要进行修改时更加方便。

rand生成的随机数%9余数只会在0~8之间,+1就变成了1~9之间。

我们将不是雷的元素定义为’0‘,是雷的元素定义为’1‘。

在布雷时,同一个位置不能重复放雷,如果重复放雷了,就得重新进行一次布置。

现在调用函数,并打印出来看看效果

多试几次

可以看出,已实现雷的随机分布。

将打印埋雷棋盘的函数注释掉,只保留游玩所使用的棋盘。

OK,这一步已经完成。


三.游戏过程与通关条件

根据玩法,玩家在扫雷进行扫雷时,需要输入想要探查的位置的坐标。若该位置是雷,则玩家直接寄。若该位置不是雷,则以该位置为圆心,以一为半径,统计周围有多少颗雷,并显示在所探查的位置。

那么,我们继续设计函数

将探查位置周围数字加起来,由于探查位置周围要么是'0',要么是'1',将每一个值减去'0'即可得到对用地数字值,再加起来,加起来的值为多少,即表示该位置附近有多少个雷 。

再设计一个总体的排雷函数,所有的排雷操作是对mine数组进行的。

必须是有效坐标

插入system("cls")清屏,使游玩界面不容杂

插入Sleep,使执行各项清屏操作时显得不突兀。 

不能重复排雷

 用于判断是否通关的变量

 判断是否通关的条件

 在每次探查后,将之前的棋盘清楚

最后,再将所有除菜单函数的所有函数放到一个game函数中

再设计一个主函数程序

使用do while语句是因为在玩家进入游戏后,菜单至少需要出现一次供玩家选择。

到这里,扫雷游戏就完成啦!


感谢各位的阅读,请各位点点赞,小凡在这里给大家磕一个!!! 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值