Tic-Tac-Toe游戏中的错误

时间:2018-04-08 05:19:27

标签: c++ increment do-while tic-tac-toe

在创建模拟井字游戏的程序时,我遇到了这个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 ++;'时如果阻止,则程序只允许玩家'X'移动。当我放置'转++;'玩家'X'中的语句如果是块,它会交替出现,但我遇到了上述问题。如果您有任何建议,请给他们。感谢。

3 个答案:

答案 0 :(得分:0)

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

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

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

开头

答案 1 :(得分:0)

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

答案 2 :(得分:0)

每次循环迭代时,转弯值都会初始化为0,这就是为什么每次玩家'X'都有机会。

所以在循环外放置int turn = 0。