? ? ? ? 上几期我们提到了三子棋程序的实现的思路和棋盘的打印与其初始化,这篇博客主要为大家讲解玩家是如何在棋盘中进行落子的。
? ? ? ? 我们已经知道了,实际上棋盘是一个二维数组,那么我们就可以通过改变数组的元素,通过人和电脑的摆入的不同的元素,就可以实现人和电脑的下棋,并判断到底是谁胜是负。理论可行,且看代码:
void playermove(char board[ROW][COL], int row, int col)
{
printf("请输入坐标:(行在前,列在后,请用空格或回车隔开)\n");//让玩家能清楚,自己该怎么下棋
printf("AlphaGO有1s的思考时间,不要急躁\n");
printf("玩家请下棋>\n");
int x, y;
scanf("%d%d", &x, &y);//让玩家输入行号和列号
while (1)
{
if ((x >= 1 && x <= row) && (y >= 1 && y <= col))//玩家得合法的输入,所以说输入必须大于1,但小于行数和列数
{
if (board[x - 1][y - 1] == ' ')//并且在不是乱输的请况下,要确保玩家想要的那个格子没被其他元素占用
{
board[x - 1][y - 1] = '*';//都满足,则为玩家下一颗棋子
break;
}
else//如果玩家选了一个非空格(已经被占用的格子),就进行提示
{
printf("\n");
printf("已经被占用了\n");
printf("\n");
break;
}
}
else//如果玩家乱输,也对其提示
{
printf("\n");
printf("坐标非法\n");
printf("\n");
break;
}
}
}
? ? ? ? 这个代码主要是用于玩家的移动,大部分内容其实看注释内容也可以看明白,因为其实不难,但需要注意一些事情:实际上这个数组是0,1,2的三行三列,学过代码的就知道这件事情,但其实在棋盘的表示上面,或者说其他不懂这个的玩家,是认为是1,2,3这样的三行三列,所以说我们在代码的实现中,应该是对行(row)和列(col)减一的元素进行操作的(row-1,col-1)。?