井字游戏错误

Error in Tic-Tac-Toe Game

我在创建模拟井字游戏的程序时遇到此 C++ 代码的问题。游戏 运行s "fine",显示获胜者,验证输入等,但如果玩家 'X' 获胜,玩家 'O' 仍然允许在之前进行另一次移动宣布获胜者。

do
{
    int turn = 0;

    if (turn % 2 == 0)
    {
        cout << "Player X, Row and Column: ";
        cin >> row >> column;

        while (array[(row-1)][(column-1)] != '*')
        {
            cout << "Invalid move try again \n";
            cout << "Player X, Row and Column: ";
            cin >> row >> column;
        }

        array[row-1][column-1] = 'X';
        showArray(array);
        results = checkWin(array);
    }

    if (turn % 2 != 0)
    {
        cout << "Player O, Row and Column: ";
        cin >> row >> column;

        while (array[row-1][column-1] != '*')
        {
            cout << "Invalid move try again \n";
            cout << "Player O, Row and Column: ";
            cin >> row >> column;
        }
        array[row-1][column-1] = 'O';
        showArray(array);
        results = checkWin(array);
    }
    turn++;
}while (results == 0);

我正在使用一个在两个玩家之间交替的 do-while 循环。当我将递增 'turn++;' 语句放在两个 if 块之外时,程序只允许玩家 'X' 移动。当我将 'turn++;' 语句放在 player 'X' if 块中时,它交替出现,但我 运行 进入了上述问题。如果您有任何建议,请给他们。谢谢

int turn = 0; 移出循环。例如:

int turn = 0;
do {
    doSomeThing();
    turn++;
} while(someThingHappen());

如果将 int turn = 0 放在循环中,则每个循环都将以 turn = 0

开头

如@hai_uit所说,将int turn = 0;移出循环。大多数时候,在任何循环或 if 语句之外声明所有变量是个好主意。

每次循环迭代时,回合值都会初始化为 0,这就是每次玩家 'X' 获得机会的原因。

因此将 int turn = 0 放在循环之外。