递归编写扫雷程序

首先我们要想写好这个游戏就必须先明白这个游戏的运行效果图:

 点击一个位置展开一片,并且标记附近雷的信息。那么我们可以用函数的思想来细分。

并由一个头文件和两个源文件来分装:

目录

 1.创建二维数组

2.初始化二维数组

3.展示雷阵

4.储存雷

5.排查雷

6.代码展示 

1.创建二维数组

我们知道初阶扫雷是9×9的格子并且还有十个雷,所以我们就创建一个9×9的数组吗?

假如说我们要排查a的位置,那么我们是不是应该看一看a周围的八个坐标的情况如何。

 那要是b位置呢?显然就行不通了,如果还是访问周围八个坐标的话,那么不久越界了嘛。

此时有两种方案:1.讨论排查的坐标是不是在最外围的。

                             2.直接扩大数组,创建一个11×11的数组。

不用说,方案2更加简便。

我们定义雷的位置为字符1,非雷的位置为字符0.(后面讲解

所以我们就创建两个一模一样的数组(好后续的信息交换

add.h头文件定义标识符常量,以便后期的更改更加简便。

2.初始化二维数组

这里我们同时将初始化为的字符也通过传参给传了过去,否则初始化的信息变成一样的就不好了。

3.展示雷阵

我们的目的是得到这样的雷阵:

 此时我们传的是9×9的序列,因为展示的也是9×9的数组,展示就是用show数组,而想要打印这样的数组就必须得用到循环,用变量 i 来循环行,用变量 j 来循环列,并且要将对应的行和列标记一下,好供用户选择。我们先将雷阵打印好再考虑对应的行数和列数。具体请参考以下代码:

4.储存雷

 布置雷就放在arr数组内部,这里我们选择随机布置雷,就运用到了时间戳,并且我们知道扫雷有简单,一般,困难三个模式,而且三个模式雷的数量也不同。

这里我们用#define定义的标识符常量,为了好作后期直接更改。

5.排查雷(运用递归)

 要想排查,也就是像最开始的图一样展开一片,我们首先得从简到繁:思考展示一个位置该如何执行。我们在show数组中选择一个坐标,此时就会统计该坐标的周围八个坐标的信息,想知道周围八个坐标的信息就得从arr数组之中寻找雷的信息,也就是说我们得将arr数组与show数组搭建起桥梁好进行信息的传递这也就是为什么说要创建两个一模一样的数组,好让两数组之间的信息能够达到一一对应的关系。

 但是我们该如何用代码进行统计周围的八个坐标呢?这就是为什么将雷用字符1来代替。这是为了更好的计算周围的八个坐标的信息,直接将周围的八个坐标对应的信息相加即可,但是字符相加会自动转换成对应的ASCLL码值相加。

但是:‘1’-‘0’=1

因此同样可以进行相互转换

 这里我是点击了坐标(1,1)展示出来的效果图。从而知道当(1,1)不是雷,周围八个坐标都不是雷并且周围坐标未经排查的时候就会进行递归展开,就类似于从一个点向周围泵开,直到显示出周围雷的信息的时候就停止递归。

但是游戏什么时候停止呢?1.选中雷了      2.排查出是个雷(也就是还剩下雷的数量个的‘*’

具体见目录六:

6.代码展示

test.c:

 

add.h:

add.c

 

 

 ​​​​​​​

 

猜你喜欢

转载自blog.csdn.net/C_Rio/article/details/128778338
今日推荐