学习C语言的一天(2):简易扫雷的实现

发布时间 2023-11-14 17:38:10作者: freeyang8

思路:

  1. 建立三个文件,头文件用于声明函数和保存程序的声明,源文件(1)用于函数的具体实现,源文件(2)用于主函数的实现
  2. 建立扫雷菜单。
  3. 建立2个二维数组,一个用于布置雷(下文称雷二),一个用于打印棋盘(下文称棋盘二);最终效果如下:(实际效果中保留上面的棋盘,而下面的布置雷的效果不需要打印,这里打印是。
  4. 将设置好的2组二维数组初始化,棋盘二初始化为‘*’;而雷二初始化为‘0’。
  5. 将棋盘二和雷二打印,方便查看运行效果。
  6. 在雷二布置雷,为了区分雷区和正常区,将雷设置为字符‘1’。
  7. 输入坐标,是雷就显示有失败,不是雷代码就继续运行,直到排除所有雷,代码跳回菜单。

个人认为比较困难的步骤:①第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