一 井字棋游戏整体逻辑
1.首先打印一个 3 * 3 的空白棋盘,然后根据输入在棋盘上打印棋子,最后根据井字棋规则输出赢家。
那么怎么才能打印空白棋盘呢,看到3 * 3的棋盘,我首先想到了棋盘的样子和二维数组在我们想象中的样子一样(实际上二维数组在内存中是连续的空间,并非一排一排的),所以我们可以用二维数组代替棋盘中的格子,落子后在对应位置存储一个“棋子”,然后根据井字棋规则判断数组内对应的位置是否为同一棋子即可。
void PrintBoard(char arr[ROW][COL], int row, int col)//打印棋盘
{
for (int i = 0; i < row ; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %c ", arr[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
for (int j = 0; j < col ; j++)
{
if (i < row - 1)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
}
if(i < row - 1)
printf("\n");
}
}
代码如上,首先将数组与行数列数传入函数,采用两个for循环嵌套打印数组内容并同时打印棋盘分隔线,效果如下:
你可能发现,你打印的并非如上图所示,而是每格中都是 ?,因为你缺少了重要的一步:数组初始化。
2.数组初始化,顾名思义,游戏刚开始时,你必须将数组内的所有内容重置为空格,这样才能打印出上述效果,很简单,与打印相同,采用两个for循环嵌套,即可完成,如下:
void InitBoard(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
3.棋盘打印好了自然就该下棋了,下棋的逻辑很简单&#