扫雷游戏C语言代码实现(上)
文章目录
一、问题描述
游戏说明
- 使⽤控制台实现经典的扫雷游戏
- 游戏可以通过菜单实现继续玩或者退出游戏
- 扫雷的棋盘是9*9的格⼦
- 默认随机布置10个雷
- 可以排查雷——通过输入坐标
- 如果位置不是雷,该坐标就会显示周围的雷的数量
- 如果位置是雷,就炸死游戏结束
- 把除10个雷之外的所有非雷坐标都找出来,排雷成功,游戏结束
二、思路分析
1. 数据结构
通过两个数组来实现,
一个数组用来存储棋盘本身的数据,这个数组暂且称为mine
一个用来对外展示,这个数组暂且称为show
mine数组
我们需要在9*9的棋盘上布置雷的信息和排查雷,所以需要创建⼀个9*9的数组来存放 信息。如果这个位置布置雷,我们就存放1,没有布置雷就存放0.
但是这个时候也存在一个问题,当我们要排查的坐标处于数组的边缘时,计算周围雷的数量就可能产生越界和出错,为了防止这种行为发生,我们创建一个11*11的数组并初始化,但是实际使用中依然使用9*9的范围
show数组
在游戏排雷的过程中对外展示,初始界面暂且全部设置为'*',每次排查一个坐标时,就将该位置改为周围一圈雷的数量
至于为什么要创建两个数组来分别存储数据和对外展示,
假设我们排查了某 ⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录 存储,并打印出来,作为排雷的重要参考信息的。那这个雷的个数信息存放在哪⾥呢?如果存放在布 置雷的数组中,这样雷的信息和雷的个数信息就可能或产⽣混淆和打印上的困难,这个时候就产生了歧义——到底1表示该位置是雷呢,还是说该位置的周围有一个雷的?
所以为了防止这种情况发生,我们将两组数据分开来单独存放
2. 文件结构
通过三个文件来实现(为了方便后期的修改和调试)
这里
我们使用game.h来存放函数的声明
使用game.c来实现函数完整的定义
使用test.c包含main函数和函数的调用
三、分步实现过程
游戏的框架——主函数的实现
进入程序首先要出现一个菜单以及对游戏的说明,这里我们用一个函数封装来实现,暂且称为
1. menu函数——游戏菜单
游戏菜单说明开始游戏和结束游戏的方式,进入程序的第一步就要展现出来,这里我们把它放在game.c文件,并在game.h文件声明,test.c的main函数中调用,(以下皆同,不再重复)
使用printf函数不要忘记包含stdio.h头文件
为了代码更加简便,我们将所有头文件都放在game.h头文件中,再在主程序test.c中包含game.h头文件
包含自己创建的头文件的方式是 #include"game.h" 放在双引号内部
接下里是
2. main函数的实现框架
刚刚我们完成了菜单的打印,接下来就要创建一个整型变量来存储用户输入的值,并对此做出反应,这里用一个switch语句来实现——分别在输入1的时候开始游戏,输入0的时候结束游戏,在输入其他值的时候做出 出错提醒
关于switch语句这篇文章有更详细的介绍
但是如果要想要多次游戏的话,就需要将switch分支语句和menu函数放在一个循环里实现,但是第一次进入程序的时候,我们必须保证能至少进行一次判断,这里使用do while循环就比较合适
而且将输入的值作为循环是否执行的条件恰到好处
来看一下效果
现在,游戏的整体框架在main函数的部分就已经完成了,接下来我们将游戏过程封装在一个函数game()函数中来实现,来逐步完成细节
- 点赞
- 收藏
- 关注作者
评论(0)