井字游戏中的错误

Error in Tic-Tac-Toe Game

本文关键字:错误 游戏      更新时间:2023-10-16

在创建模拟井字游戏的程序时,我在使用此C++代码时遇到问题。游戏运行"正常",显示获胜者,验证输入等,但如果玩家"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++;"语句放在玩家"X"if块中时,它会交替出现,但我遇到了上述问题。如果您有任何建议,请给他们。谢谢。

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

所以把 int turn = 0,放在循环之外。

正如@hai_uit所说,将int turn = 0;移出循环。大多数情况下,最好在任何循环或 if 语句之外声明所有变量。

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

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

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