为了更好地理解多维数组,我正在编写一个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/

10-11 23:02
查看更多