目的
运用数组和函数的知识在9*9的“方框”内完成一个简单的扫雷游戏
基本思路
1.由于知识的受限,所以可以用键盘输入坐标来代替鼠标点击形式的扫雷;
2首先我要找到一个9*9的空间来实现雷的摆放(二维数组);
3.在这个9*9的数组内放置雷;
4.实现排雷;
5.反馈结果给玩家;
在实现代码前发现的问题及解决方案
1.如果用9*9的二维数组来实现,在完成排雷代码的过程中会发现对于处于边缘的雷,我们不太好用代码来判断其是否为雷(情况复杂),所以可以在最外层再加一层使其变成11*11的格子,而我们只需要展示正中间9*9的格子给玩家即可;
2.如果用0来表示有雷,而1来表示没雷,会有一种歧义存在就是如果有一个各自不是雷但是周围八个格子中只有一个雷,所以会给玩家在那个格子处显示1,那么这里到底是不是有雷呢?所以我们可以用两个11*11的数组来完成。其中一个mine数组首先定义为‘0’,然后最后再填入雷,这个数组是不会给用户看的,另一个show数组全部填满‘*’,通过函数来完成判断‘*’是否为雷的操作,这个数组当然是用户来操作的。当然这里定义为两个字符数组是为了用一个函数来完成相同的操作;
代码的实现
1.菜单的完成

在这个其中最重要的是在while的括号中为什么要用input,如果输入0,那么显然不会再执行程序了,直接退出,但是input对于无论是选择再玩或者选择除了0或者1的数字,都会再执行一次循环。
2.建立两个字符数组并用函数附上初始值
这个Initboard函数最重要的部分是在传参的时候带上要赋的值
(其中easy_count是用来作为埋雷数量的一个常量)
3.用户界面的打印
然后是他的函数实现:
其中值得注意的是,在传递二维数组的时候[][]内的参数当然是要传递它创建时候的参数,并不能因为我们只需要其中9*9的格子而将两个参数变成两个9;
并且为了玩家方便输入坐标,且为了好看还可以打印出每个’*‘对应的坐标和printf("--------扫雷--------\n");这样的东西;
4.在指定的9*9区域内随机生成雷(即字符’1’)
在布置雷的函数中显然最重要的就是随机生成雷这一个过程,明显要用到rand函数的知识
要使x,y均在1-9之间,则可以用到rand()%row+1这种方法,但是不要忘记在使用rand的同时要加上srand
在完成以上代码之后可以加上一句displayboard(mine,ROW, COL);以此来检验一下是否随机生成了字符‘1’;
5.完成排雷过程
下面是它的代码实现:
其中还夹杂了一个getminecount函数
由于是字符数组,所以需要用到字符数字和数字之间的转换:数字加上‘0’=对应的字符数字等相关知识;
当然这个getminecount的思路也是很重要的,既然想要知道周围八个格子有几个字符‘1‘,那么可以用想到如果把这对八个格子分别减去一个’0‘(’1‘-’0‘=1)然后再把八个加起来就知道有几个雷了,
当然除了我上面的这种写法还可以直接把八个格子直接相加,但是未免太麻烦了,所以我 采取了循环的方式来计算;
既然是输入坐标来之后来进行一系列的判断,那么势必要用到循环来输入,那什么时候结束呢,当然需要雷的个数来判断(即while后面括号中内容的实际意义);
结尾
以上便是一个简单的扫雷游戏实现过程,充分的利用了函数与数组还有字符数字与数字之间关系的知识。当然也可以用多文件的形式进行编写。
然后以下可以看到完整的代码: