0

因此,我正在编写一个 C 程序,该程序将针对用户播放 TicTacTo。但是,我遇到了检查是否有赢家的功能的问题。它似乎根本不起作用。当连续有 3 个时,游戏才继续。这是相关的代码。

这是我的主要功能:

do {
    humanChoice(); // let the user make a play  
    computerChoice(); // does nothing at the moment
    gameStatus = checkWin(); // returns 1 if it finds a winner
} while(gameStatus==0);

humanChoice 在数组中用户选择的位置播放“X”。这已经过彻底测试并且可以完美运行。然后是 checkWin() 函数:

int checkWin() {

if (
    matrix[0][0] == matrix[0][1] == matrix[0][2] || // 1st row
    matrix[1][0] == matrix[1][1] == matrix[1][2] || // 2nd row
    matrix[2][0] == matrix[2][1] == matrix[2][2] || // 3rd row

    matrix[0][0] == matrix[1][0] == matrix[2][0] || // 1st column
    matrix[0][1] == matrix[1][1] == matrix[2][1] || // 2nd column
    matrix[0][2] == matrix[1][2] == matrix[2][2] || // 3rd column

    matrix[0][0] == matrix[1][1] == matrix[2][2] || // left to right diagonal
    matrix[0][2] == matrix[1][1] == matrix[2][0]    // right to left diagonal
) {
    printf("Win! Game Over!");
    return(1);
}

return(0);
}

我正在为我的“矩阵”使用以下二维数组:

char matrix[3][3];

我意识到现在程序无法区分计算机获胜和用户获胜。现在这无关紧要。我只需要它来检查一般的胜利。

你注意到什么了吗?

4

3 回答 3

3

如果左右手操作数相等,则运算==符返回。true

a == btrue当它们相等时 将返回。当它们相等时b == c将返回。true

a == b == ca == b但是,当评估为与 . 相同的值时,将返回 true c

您将要使用(a == b) && (b == c)来实现您想要实现的目标。

于 2013-10-27T19:52:44.553 回答
1

表达式 likea == b == c与 不同a == b && b == c。这就是为什么您的功能无法按预期工作的原因。

于 2013-10-27T19:49:04.183 回答
1
if (matrix[0][0] == matrix[0][1] == matrix[0][2]) ... 

不同于:

if (matrix[0][0] == matrix[0][1] && matrix[0][1] == matrix[0][2]) ...

在第一种情况下,首先评估第一个比较,使其等效于:

int b = matrix[0][0] == matrix[0][1];
if (b == matrix[0][2]) ...

比较返回0or 1,而不是正在比较的值(与赋值运算符不同,它返回已分配的值)。

于 2013-10-27T19:49:04.260 回答