目录
前言
今天带来的是用C语言实现简易的扫雷游戏
二、实现步骤3
1.源文件,头文件的使用可以使代码更有条理
如下(示例):
我们通常用.c文件来设立我们的源文件,.h文件来建立我们的头文件.于是我建立了这些文件.
采用多文件能够使我们的思路更加清晰,节省代码空间
test.c----游戏的整个逻辑运行
game.h---游戏相关的函数的声明
game.c---游戏相关函数的实现
2.适当的界面优化——菜单
为了方便进行游戏的开始和结束,以及游戏失败后想接着进行游戏,使用如下代码
代码如下(示例):
3.游戏内容的实现
(1).在这里,先明确一下扫雷游戏的规则:
如图1中的数字3表示以3为中心的 3*3 的正方格的其它8个格子中有3个雷,如图2中的有一边是边界的话,那就其它5个格子中有3个雷,规则介绍完毕。
(2)棋盘的设置
有图可见,最简单的扫雷棋盘的规模是9 * 9的正方形,由此我们可以想到一个行是9,列是9的二维数组。明确了这样一个扫雷场地的实现,我们接下来就看一下对这样一个场地的初始化方式,好的一个初始化方式能让我们更加清晰地观察雷的信息和雷区的排布。
对于棋盘的初始设置,我假设:用 # 表示不是雷,* 表示雷,再用数字来表示周围雷的量。
就像如图:
但此时我们发现:
(1)在一个棋盘上,有 * ,有#,有数字,有过多的数据,对于我们一个9*9的棋盘来说,显得有些冗余和复杂。
(2)对于在一个棋盘中,执行判断周围雷的个数和是否打印数字的操作过多,代码的效率过于低下,因此这种方法不太适合。
不如直接用简单的数字来表示我们想表示的数据。
0 用来表示不是雷,1用来表示雷,
此时我想到的是,如果再能创建一个二维数组,用第二个二维数组把第一个二维数组按照对应位置进行覆盖,这样的话,我在第二个二维数组中显示数字信息来表示周围雷的个数就不会引起歧义了。
在这样一个问题完成优化后,代码执行后,数组越界又成为了我的一个难题,问题是这样的:
当我选择图中红色×处进行判断时,它下方的三个红圆圈位置形成了数组越界,因此我想到了将数组进行扩大,行和列都进行扩大的话,那么数组将变成 11×11 的二维数组。
并且外围的扩建对于数组内部9×9的这一范围不应有任何影响,所以我将外围也都放置数字0
在已经开始排查雷的时候,没有被排查到的位置可以用 * 来表示,这就完成棋盘的初始化
整个棋盘的行号和列号也可以清晰地显现出来,便于我们选利用坐标选择位置进行扫雷
运行后
(3)布置雷(随机)
对于随机生成雷,考虑使用rand()函数,rand()函数生成的范围是0~32767,
rand(),由上述可知,雷的坐标均可以用1~9的数来表示,rand()%9得到的数为0~8,
那么rand()%9+1得到的数就是1~9