为了更好地理解多维数组,我正在编写一个tic-tac-toe程序,意思是一个3x3数组,所有元素都初始化为-1。
当行/列/对角线的所有元素都相等(且不为空,因此不同于-1)时,我试图使“获胜”条件变为真。
但是我一直在赢球……当我不应该赢球的时候,比赛就结束了。我该如何解决?
这是我的代码(的一部分):
#define GRID_SIZE 3
#define EMPTY -1
#define PLAYER0 0
#define PLAYER1 1
printf("Player %d turn: Insert the tile coordinates\n", player);
scanf("%d %d", &x, &y);
/* Update tile */
if (player == PLAYER0)
grid[x][y] = PLAYER0;
else
grid[x][y] = PLAYER1;
/* Winning diagonals? */
i = 0;
d1 = ((grid[i][i] == grid[i+1][i+1] == grid[i+2][i+2]) && (grid[i][i] != EMPTY));
d2 = ((grid[i][GRID_SIZE-i-1] == grid[i+1][GRID_SIZE-i] == grid[i+2][GRID_SIZE-i+1]) && (grid[i][GRID_SIZE-i-1] != EMPTY));
if ((d1) || (d2)) {
printf("Player %d wins!\n", player);
victory_or_draw = 1;
}
/* Winning rows or column? */
for (j = 0; j < GRID_SIZE; ++j) {
row = ((grid[i][j] == grid[i+1][j] == grid[i+2][j]) && (grid[i][j] != EMPTY));
column = ((grid[j][i] == grid[j][i+1] == grid[j][i+2]) && (grid[j][i] != EMPTY));
if ((row) || (column)) {
printf("Player %d wins!\n", player);
victory_or_draw = 1;
}
}
最佳答案
比较运算符在C中不是可传递的,因此应使用布尔“和”运算符&&
组合不同的测试。
另外,在此处发布代码时,请将其简化为一个最小的示例。您的问题与针对矩阵元素完成的事实无关。
关于c - C:对矩阵元素进行 boolean 测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27636134/