目录
扫雷大家应该都知道,翻开一个格子,显示的数字就是周围 8 格所含的雷数。例如,红色框框里的1周围8格就只有一个雷。
我们定义两个数组来实现,show数组存放玩家看到的棋盘,mine数组存放隐藏的雷盘
这两个数组搭配使用,就能计算某个位置周围的雷数,并且修改show数组来显示这个位置的雷数。
但是如果计算边缘格子周围的雷数时,数组会越界。
我们只要在周围留一圈就能解决这个问题
如下图所示,假设我们要玩 9x9 的大小,我们的数组大小就定义为 11x11
一、功能实现
1.雷盘初始化与打印
-
雷盘定义
-
初始化雷盘
初始化show,mine两个数组,show 存放 '*' , mine存放 '0'
void init_board(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
-
打印雷盘
//打印show雷盘
void display_board(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
//这里打印上面一行数字
printf("|");
for (j = 0; j <= col; j++)
{
printf(" %-2d |", j);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("|");
for (j = 0; j <= col; j++)
{
printf("----|");//打印两行之间的分割线
}
printf("\n");
printf("|");
printf(" %-2d |", i);//打印左边一列数字
for (j = 1; j <= col; j++)
{
printf(" %2c |",board[i][j]);//打印show数组
}
printf("\n");
}
}
效果图:
-
随机布置雷
随机布置雷,将mine中的 '0' 改为 '1'
//随机布置雷,在mine数组里随机设置COUNT个雷
void set_mine(char mine[ROWS][COLS], int row, int col)
{
int count =