扫雷想必大家都听说过吧?我们今天写的小游戏就是扫雷,只不过我们只使用C语言写。我们能够做到的就是实现扫雷的基本逻辑,没有图形化界面。
这次游戏程序的写法和上一次的三子棋的模式很像,也是三个文件。
接下来是游戏实现的一些详细的解释,由于很多地方是和上一期的三子棋相似的,我挑一些主要的地方讲解。
白色的是我们玩家看到的地图。我们之所以要将地图扩大一圈,是因为我们后面的数坐标周围一圈的雷时,可能会导致越界访问的问题,所以我们这样设计。这一点其实和我们上一期的三子棋的棋盘设计是一个原理。我们以最右下角的个子为例,我们数它周围的雷数,需要访问这些棕色的格子,所以如果数组不够的话,就会导致越界访问。
还有一点就是我们这次定义地图时,设计了两个棋盘,他们大小一样,但是作用不同,一个是用来存放雷的信息的,另一个是用来展示给玩家的游戏地图。
需要注意的地方有两点,第一点是我们给数组存数据时是char类型,所以记得加上,并且最好是给整个数组都初始化一下。第二点是打印数组时,为了方便玩家输入坐标,我们最好是打印一下行号和列号,具体实现方式请看源代码。
效果展示:
设置雷主要知识点就是随机数的使用,我们需要生成1-9的随机数。所以对生成的随机数采取以下措施:
记得要设置随机数生成器哟。
采用循环的方式设置雷是为了保证能够设置多个并且有效的雷,没设置成功一个雷,就离出口更近一步。具体实现请看源代码。
玩家游玩的部分,主要逻辑如下:玩家输入坐标,如果坐标合法的话,判断该坐标是否已经排查过了,如果该坐标没有排查过,再判断是否为雷,如果不是雷,就显示该坐标周围雷的个数。
需要注意的地方就是数该坐标周围雷的个数这里,我们需要用到字符的加减法,如果你想要得到整型变量时,需要加减一个,如果需要将整型转换成字符时,也是同理。
逻辑:数该坐标周围的雷数,如果为0.则将该位置变成,再依次对该坐标周围的八个格子采用同样的方式,递归出口:坐标周围的雷数不是0。
有两种代码,实现原理一样,但是递归次数不一样,代码量也不一样:
1.