由于这个游戏的相对而言有一点复杂,所以,如果要讲清楚的话篇幅较长,所以我分成两个部分来讲解这个游戏应当如何编译,请大家理解
首先,希望大家在阅读本博客之前,可以先看一下鄙人先前所写的用C语言编译三子棋游戏的博客,因为这两个游戏有一些相同之处,而且三子棋更加容易,便于理解,在你读完那一篇博客后理解扫雷游戏会更加容易
OK,接下来让我们开始讲解(这里我将默认大家已经阅读了我的关于三子棋的博客,请见谅)
我将先大概讲解一下我的编译思路,然后在后面详细的讲解如何实现我们的功能
编译思路
先让我们回顾一下扫雷游戏是一个怎样的游戏
这个是我在网上查找的扫雷游戏
我们可以看出,这个扫雷游戏,他首先需要一个方格板(我们统称为棋盘),来放置雷,同时,当你点击某一个格子后,他会告诉你周围格子的情况
他会告诉你,在周围格子中有多少个雷,并以数字的形式告诉你
OK,接下来开始我们的思路讲解
1.绘制菜单,编译游戏循环
我们首先需要编译一个菜单,让玩家选择是否要开始游戏,并且接受玩家的选择,并做出相应的反应
2.创建,初始化数组
我们需要创建两个char数组,其中一个用于存储雷(我们称之为landmine),我们让在有雷的地方的标注为‘1’,没有雷的地方标注为‘0’,另一个用于呈现整个棋盘的情况(我们称之为show),在一开始我们将整个棋盘用 ‘*’ 覆盖,当我们点一直后就会呈现解开此处方格的 ‘*’ ,并且会显现出周围格子中雷的情况,可能现在说不明白,大家可以先跳过这一部分,我后面会详细的讲解,包你明白,不过可以先看一下演示
3.绘制棋盘
通过上图的演示,大家应该明白我们只用绘制show,而不用绘制landmine(landmine是用于判断当前玩家所点击的位置是否有雷),所以我们并不需要绘制landmine,只需要在判断雷时带入landmine就可以了
4.布置雷
我们需要随机的布置雷所在的位置,要保证雷是在棋盘之中,并且是随机的
OK,我们扫雷上就讲到这里,至于后面的排查雷就放在扫雷下来讲解,那才是整个扫雷游戏中最复杂的部分
OK,开始我们这一部分的讲解
具体讲解
1.绘制菜单,编译游戏循环
老规矩,再开始编译之前,我们要创建三个文件,game.c,main.c,game.h,先在game.h中应用我们会用到的库的声明,并在main.c中编译我们游戏循环,本游戏的循环与三子棋的循环是几乎一模一样的,具体的逻辑可以看我的那一篇博客
2.创建,初始化棋盘(这里我们编译一个9×9的扫雷游戏)
初始化数组,我们要使用两个数组,原因在于,我们既需要呈现扫雷的雷区,将没有探测的位置以 ‘*’的形式覆盖,并呈现天测过的位置的周围雷的个数,又要安放雷,记录类所在的位置,判断探测的区域是否有雷,并且探测周围雷的数目,一个数组根本无法完成,所以我们需要两个数组,其中一个我们命名为landmine,用于安放雷(在这个数组之中需要我们以不同的字符来区分雷与其他),另一个为show,用于呈现,在没有探测的位置用 ‘*’ 覆盖,再探测过的位置呈现出周围雷的位置。我们的初始化就是让landmine全部为0(后面安放雷的时候将放置雷的位置变成1就可以了),show全部变成 ‘*’
难点
这里还有地点适合重要的,并且不是很容易理解的,我在这里详细的说一下,虽然我们将绘制一个9×9的扫雷游戏,但是我们将初始化一个11×11的棋盘,至于为什么,请允许我用图来为大家讲解,请看图
这样,当我们检测周围格子中雷的个数时,就可以统一的检测他周围八个格子种雷的个数
希望我给大家讲明白了,OK,如果大家还是没有理解,可以私信我,我再给你解释一下,OK,攻克了这个难点之后 我们就可以开始我们的棋盘初始化了,请大家先看代码
因为要绘制两个棋盘,并且初始化的内容不一样,我们就添加了一个变量char tick这样就可以初始化两个棋盘了(因为初始化棋盘和三子棋的差不多,我就不过多赘述了)
与三子棋的一样,我定义了五个变量,前面四个就是棋盘的行数与列数,minenum是我们设置的雷的个数
OK,初始化就到这里,接下来是棋盘的绘制部分
3.棋盘的绘制
(我们只用绘制9×9的部分,11×11只是在我们计算类的个数使用到,相当于后台中才使用)
绘制其实和三子棋的也差不多,主要就是遍历数组然后绘制出来,但是还是有两个地方是不一样的,我将详细的说明
第一点
由于我们只用绘制9×9的棋盘,所以,我们在索引时,1就真的是我们的第一列(行),但是9也真的是我们的第九列(行),这一点大家要注意,应为我们的数组是11×11的
第二点
由于9×9的个子对于我们来说还是太多了,我们很难精准的定位我们想要选择的位置,所以,我们增添一个提示很有必要,如下
这些数字可以帮助我们迅速地知道我们想要位置的坐标
具体实现的逻辑是,我们要在遍历数组之前,先输入一行0~9,然后,在遍历数组时,先输入一个行数,再往后输入数组的内容,具体的实现如下
当然,为了让 棋盘没有那么拥挤,我们输入时是,“%c ”,有一个空格可以让其更加美观
OK,绘制的工作完成了,后面的引用和声明我就不再一一展现了,在最后我会展现该游戏的所有代码
4.布置雷
这里就是随机产生十个坐标来安放雷,和我们三子棋中机器下棋的逻辑一模一样,唯一不同的是,这一次我们需要生成是个坐标,而三子棋只用生成一个坐标,OK,具体代码如下
当然,使用了rand,那么我们一定是要设置srand的
OK,这次的讲解就到此结束了,感谢大家的观看,希望可以帮助到大家,最迟明天我会把扫雷(下)的编译发出来,在那个博客中,我会附带关于这个扫雷游戏的所有代码