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语句是因为在玩家进入游戏后,菜单至少需要出现一次供玩家选择。
到这里,扫雷游戏就完成啦!
感谢各位的阅读,请各位点点赞,小凡在这里给大家磕一个!!!