思路:
- 建立三个文件,头文件用于声明函数和保存程序的声明,源文件(1)用于函数的具体实现,源文件(2)用于主函数的实现
- 建立扫雷菜单。
- 建立2个二维数组,一个用于布置雷(下文称雷二),一个用于打印棋盘(下文称棋盘二);最终效果如下:(实际效果中保留上面的棋盘,而下面的布置雷的效果不需要打印,这里打印是。
- 将设置好的2组二维数组初始化,棋盘二初始化为‘*’;而雷二初始化为‘0’。
- 将棋盘二和雷二打印,方便查看运行效果。
- 在雷二布置雷,为了区分雷区和正常区,将雷设置为字符‘1’。
- 输入坐标,是雷就显示有失败,不是雷代码就继续运行,直到排除所有雷,代码跳回菜单。
个人认为比较困难的步骤:①第4步中将棋盘初始化:创建函数时需要创建四个形参,
第一个接收二维数组,第二、三个接收行和列,第四个接收初始化的形状,如图
void Iniboard(char shuzhu[ROWS][COLS], int rows, int cols, char set)
Iniboard(mine,ROWS ,COLS,'0'); Iniboard(display,ROWS,COLS,'*');
个人认为比较困难的步骤: ②若坐标为安全区,如何显示周围雷区的个数:建立函数,找到安全区周围未知区的坐标,利用‘1’和‘0’的ASCLL码值
字符‘1’的ASCLL码值为49,字符‘0’的ASCLL码值为48,安全区周围未知区的坐标对应的字符分别减去‘0’,(字符相减既ASCLL码值相减)结果相加,既可得到周围雷区的个数,再使用关键字static修饰此函数。 如图:
static int get_mine_count(char mine[ROWS][COLS],int x,int y) { return mine[x - 1][y - 1] + mine[x][y - 1] + mine[x - 1][y + 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] + mine[x - 1][y] - 8 * '0'; }
遇到的问题:①报错显示文件中有多个重定的符号 而实际代码没有书写错误。(如下图)
②多个文件跳转容易混淆函数之间的关系。
解决方式:①将报错中显示的源文件移除,重新创建一个源文件,将内容添加进新源文件
②勤敲代码,多写备注
最终效果如图:(实际运行中不需要打印布置雷的二维数组)
使用软件:Visual studio 2022
日期:2023-11-14