简易版扫雷游戏

扫雷游戏

前言:

大家应该都听说过一款小游戏扫雷,相信大家或多或少都玩过这款游戏,今天我们来用C语言来实现一个简易版的扫雷游戏。

扫雷

在这里插入图片描述

1.扫雷的原理

基础版的扫雷就是在一个 9x9 的格子里随机放置10个雷,点击格子没有雷会周边展开直到碰到周边有雷的格子停下来。

在这里插入图片描述

简易版的扫雷是借助控制台来实现,输入坐标,没有雷时显示以当前格子为中心的九个格子的雷的数量,并不会向周边展开。

在这里插入图片描述

2.扫雷游戏代码的实现

扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。
因为我们需要在99的棋盘上布置雷的信息和排查雷,我们⾸先想到的就是创建⼀个99的数组来存放信息。

在这里插入图片描述

那如果这个位置布置雷,我们就存放1,没有布置雷就存放0.

在这里插入图片描述

假设我们排查(2,5)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数是1
但是当我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三个坐标就会越界。

在这里插入图片描述

为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的99的坐
标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。所以我们将存放数据的数组创建成11
11是⽐较合适。

在这里插入图片描述

我们在棋盘上布置了雷,棋盘上雷的信息(1)和⾮雷的信息(0),假设我们排查了某⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那么将(1)放在当前坐标上到底是有雷呢?还是周围有一个雷,这样雷的信息和雷的个数信息就可能或产⽣混淆和打印上的困难。

为了解决这个问题这⾥我们采⽤另外⼀种⽅案,我们专⻔给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不⼲扰了,把雷布置到mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查参考。

同时为了保持神秘,show数组开始时初始化为字符 ‘*’,为了保持两个数组的类型⼀致,可以使⽤同⼀套函数处理,mine数组最开始也初始化为字符’0’布置雷改成’1’

在这里插入图片描述

在这里插入图片描述
对应的数组应该是:

char mine[11][11] = {0};//⽤来存放布置好的雷的信息
char show[11][11] = {0};//⽤来存放排查出的雷的个数信息

由于代码的量较多,使用多⽂件的形式对函数的声明和定义可以有条理的编写代码。

test.c //⽂件中写游戏的测试逻辑 
game.c //⽂件中写游戏中函数的实现等
game.h //⽂件中写游戏需要的数据类型和函数声明等
首先在test.c文件中编写大体框架

参照此简易版扫雷图片
在这里插入图片描述

为了有条理的编写代码,我们将游戏封装在一个test函数中
test函数中先编写出大体框架
在这里插入图片描述
在此图中可看待一个mune函数和一个game函数
mune函数中是我们的菜单栏

在这里插入图片描述

game函数中是我们的游戏的实现

在这里插入图片描述

在创建两个数组时为了方便后续难度的添加更改数据将数组中的11改为ROWSCOLS,此时我们就要在头文件game.h中定义ROWSCOLS
在这里插入图片描述
创建数组后首先我们要将数组进行初始化
在这里插入图片描述

在棋盘初始化完成后,我么要开始布置雷
在这里插入图片描述

在布置雷是为了方便后期添加难度更改数据,在头文件game.h定义雷的个数
在这里插入图片描述

下一步就是打印棋盘
在这里插入图片描述

在打印棋盘后,就迎来了最后一步排查雷
在这里插入图片描述

在排查雷中还涉及到一个统计该坐标周围雷的函数
在这里插入图片描述
此前已说明使用多⽂件的形式编写代码,因此在头文件中包含了对于各函数的声明
在这里插入图片描述

至此简易版扫雷就完成了。

下面是扫雷的代码链接
https://gitee.com/immortal-sleep/first/tree/master/game/game

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值