judge 函数
函数参数:
返回值:
int judge(int x, int y)
{
int i, j;
int t = 2 - whoseTurn % 2;
const int step[4][2]={{-1,0},{0,-1},{1,1},{1,0}};
for(int i=0;i<4;++i)
{
const int d[2]={-1,1};
int count=1;
for(int j=0;j<2;++j)
for(int k=1;k<=4;++k){
int row=x+k*d[j]*step[i][0];
int col=y+k*d[j]*step[i][1];
if( row>=1 && row<=N && col>=1 && col<=N &&
chessboard[x][y]==chessboard[row][col])
count+=1;
else
break;
}
if(count>=5)
return 1;
}
return 0;
}
在 judge
函数中有 3 个嵌套的 for
循环,其目的是判断是否存在连续五个棋子的连线。
五个棋子的连线可以是水平、垂直或对角线方向。这里,我们将采用试错法,在水平、垂直和对角线方向上搜索连续的棋子。举个例子:
在上面的棋盘上,我们将根据坐标 (9, 10) 解释判断是否存在五个棋子连线的算法。
首先,我们检查从 (9, 10) 开始是否存在一条五个棋子的对角线。过程如下:
- 从 (9, 10) 开始,我们向左上方搜索。满足条件的坐标是 (8, 9)、(7, 8) 和 (6, 7)。由于 (5, 6) 不满足条件,我们进入下一步。
- 然后,我们向右下方搜索,找到 (10, 11),这是唯一满足条件的坐标。
- 我们找到了一条直线上的五个点,所以玩家 2 获胜。
如果在对角线方向上没有五个棋子的连线,我们接着检查垂直和水平方向。如果它们都不满足获胜条件,这意味着当前玩家不能获胜,游戏将继续。