首先写扫雷游戏我们需要先了解扫雷游戏的逻辑。
这是扫雷游戏的棋盘,难度越大格子越多,相应的雷的数量也就越多。游戏开始时,选择一个格子点击,如果所选择的格子没有雷就会在所选中的格子给1出一个数字表示这个格子周围雷的数量。知道找出所有雷的位置后游戏胜利。若选中有雷的格子则游戏失败。
接下来我们开始写实现这个游戏的代码。
为了便于区分我们将代码分为三个板块。分别为game.c(用来写具体的游戏代码),test.c(用来表示游戏的大体逻辑)game.h(用来包含头文件)。
首先我们写一个菜单的打印为玩家进入游戏提供选择。
因为玩家在玩完一局游戏后可能还要继续玩,因此我们在main函数内用do...while循环可让一局游戏后继续玩。
接下来我们来到游戏代码game(),我们需要一个棋盘用来存放雷
如图我们在存放雷的棋盘用0表示无雷,用1表示雷。在玩家选择一个格子查询时如果没有雷自动向周围的八个格子查询雷的数量,因此会出现一个问题,在对最上,下,左,右一行查询时会越界,因此我们对存放雷的棋盘应在周围多处出来一行。以9*9的棋盘为例,你需要一个11*11的棋盘。同时还需要一个为用户展示的棋盘。
在game.h中我们将所需要用的参数定义好(方便我们后期更改),其中easy_count为雷的数量。
定两个棋盘其中mine用于布置雷,show棋盘为玩家展示。并定义函数Intboard对两个棋盘初始化。mine棋盘先全为0没有布置雷,向玩家展示的棋盘为*。
这样我们的两个棋盘就初始化好了。接下来就可以定义一个SetMine()对mine棋盘内安装雷。
我们通过随机数的方式来选取棋盘坐标安装雷,x与y随机范围为1~9,成功安装10(count)个雷后结束。
写一个Displayboard()来进行对玩家展示show棋盘供玩家选择排雷位置,同时打印了行号和列号。
这样我们就可以写玩家排雷的代码 FindMine()。
首先棋盘大小为(1~9),所以玩家输入的坐标也应该在这个范围内才合法。因为展示棋盘都是*,所以玩家输入的坐标满足1~9,则说明已经排过了雷。如果没有则在mine棋盘内对玩家输入的坐标进行判断是否为内,如果是雷则游戏结束,如果不是我们将这个坐标周围的位置类的数量进行判断,通过一个get_mine_count来统计数量。
这边通过把周围坐标字符‘1’和‘0’转成数字1和0相加就是雷的数量。展示时在将数转成字符后打印棋盘给玩家看并继续进行游戏。设置的计数器win当成功选中一个不是雷的位置后就加1,但加到9*9-10(没有雷的位置的个数)后,游戏胜利。
到此游戏的大概逻辑和代码已经完成。当然这个代码非常的粗糙和简略,但已经可以实现基础的运行了。还可以对游戏增加标记雷的功能,以及在排到周围都没有雷的情况下代码自动向周围一直排知道出现排到周围有雷的位置停下。
下面附上完整的代码