这篇文章中,我们将实现一部分的game函数。
在上一篇文章中,我们将数组创建在main函数中有些许不妥,于是我将其转移到了game函数。
下一步便是对于两种函数进行初始化,使得其打印出来我们想要的棋盘。
void game()
{
//创建数组
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
initboard(mine, ROWS, COLS,'#');
initboard(show, ROWS, COLS, '*');
printboard(mine, ROW, COL);
printboard(show, ROW, COL);
}
void initboard(char board[ROWS][COLS], int row, int col, char set)
{
int x = 0;
int y = 0;
for (x = 0; x < ROWS; x++)
{
for (y = 0; y < COLS; y++)
{
board[x][y] = set;
//printf("%c ", set);
}
//printf("\n");
}
}
void printboard(char board[ROWS][COLS], int row, int col)
{
int x = 1;
int y = 1;
for (x = 0; x < row; x++)
{
printf("%2d", x);
}
printf(" %2d", row);
printf("\n");
for (x = 1; x <= ROW; x++)
{
printf("%2d", x);
for (y = 1; y <= COL; y++)
{
printf(" %c", board[x][y]);
}
printf("\n");
}
}
先创建initboard函数,通过两个for循环嵌套将我们想要的字符放入数组中。
在printboard函数中,先同样两个for循环打印出数组,然后再添加上行和列的序号,方便玩家找到位置。
接下来该放入雷进入mine数组。
void set_mine(char mine[ROWS][COLS], int row, int col ,int set)
{
int i = 0;
while (i < 10)
{
int x = rand() % 10;//随机生成0-10的数
int y = rand() % 10;
mine[x +1][y + 1] = '@';//加1为了让数不放在未显示的外围
i++;
}
}
srand((unsigned)time(NULL));//放在int main()里面,要在game函数之前
放置雷的时候我们不能好几局游戏放在相同的位置,于是随机函数便派上了用场。
接下来开始写排查雷的函数,
void check_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int* mode)
{
int x; int y;
printf("请输入选择的坐标(行 列):\n");
scanf("%d %d", &x, &y);//玩家输入排查的坐标
if (mine[x][y] == '@')
{
*mode = 1;
return;//1代表游戏失败
}
else if (mine[x][y] == '#')
{
//get_mine_count(mine,show,ROW,COL,&mode);
//计算排查的格子周围有多少雷
int count = 0;
int i = 0;
int j = 0;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (mine[i][j] == '@')
count++;
}
}
show[x][y] = count+'0';
return;
}
}