扫雷
创作不易,还请观众老爷耐心看完儿!
目录
1.扫雷框架
2.初始化棋盘
这是用户看到的棋盘,9*9大小,需要自己去排查雷
为了程序员更好地去控制扫雷,我们需要两个数组
- 程序员看的雷区数组 -- 里面存放着雷的位置 -- 11*11大小
- 用户看的展示数组 -- 全是*号,需要用户去排查 -- 11*11大小
使这两个数组一样大的原因:是为了使我们后面设计的接口函数更加兼容,即使展示的数组本质是11*11大小,但是我们打印的时候打印9*9就可以了
为了可以提高代码可维护性和兼容性,我们将数组的行数和列数,使用宏来替换
#define ROWS 11
#define COLS 11
#define ROW 9
#define COL 9
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < cols; ++j)
{
board[i][j] = set;
}
}
}
我们将如果初始化的内容以字符的形式作为参数传进去,上述代码就可以很好地解决了兼容性,这一个函数可以解决雷区棋盘和展示用户的棋盘的初始化。
3.打印棋盘
打印棋盘大家可以充分发挥自己的艺术细胞,根据自己的喜好去设置棋盘的打印格式。下面博主提供两种。
格式1:
void print_mineline(int row)//打印分割线
{
for (int i = 0; i < row; ++i)
{
if (i == row / 2)
{
printf("扫雷");
}
printf("==");
}
printf("\n");
}
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
print_mineline(row);//先打印一行分割线
//打印列号
for (int j = 0; j <= col; ++j)
{
if (0 == j)//将列对齐
{
printf(" ");
continue;
}
printf("%d ", j);
}
printf("\n");
for (int i = 1; i <= row; ++i)
{
printf("%d ", i);
for (int j = 1; j <= col; ++j)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
print_mineline(row);//最后再打印一行分割线
printf("\n");
}
效果:
格式2:
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
//打印列号
for (int j = 0; j <= col; ++j)
{
if (j == 0)
{
printf(" ");
continue;
}
printf(" %d ", j);
}
printf("\n\n");
for (int i = 1; i <= row; ++i)
{
//打印列号
//1.打印第一部分
printf(" %d ", i);
for (int j = 1; j <= col; ++j)
{
printf (" %c ", board[i][j]);
if (j <= col -1)
printf("|");
}
printf("\n");
//2.打印第二部分
if (i <= row - 1)
{
printf(" ");
for (int j = 1; j <= col; ++j)
{
printf("---");
if (j <= col - 1)
printf("+");
}
}
printf("\n");
}
}
效果:
但是格式2的缺点是如果棋盘是9*9以上大小,那么存在一些对齐问题,当然厉害的同学可以改善一下。这是提供的两个思路