为什么我的 Tic Tac Toe 逻辑有时会出错?

Why does my Tic Tac Toe logic have errors sometimes?

我不熟悉在这里发布问题,如果我做错了什么,请告诉我。所以这个程序在 90% 的时间里都能正常工作,如此处所示。

但如此处所示,逻辑有时会出错。 我查看了我的代码一段时间,所以我终于屈服并寻求帮助!我的 logic() 函数似乎是准确的。我匹配了所有可能的获胜路线;行、列和对角线。出于某种原因,如果顶行是 -> 'X' | 'O' | 'X' -> 它宣布玩家一 (x) 获胜。有什么想法吗?

 #include <iostream>
    #include <iomanip>

using namespace std;

void drawBoard();
char board[3][3] = {'1','2','3','4','5','6','7','8','9'};   // 3x3 board
char player = 'X';
void game();
void toggle();
char logic();
void winner();
int main()
{
    drawBoard();
    while(1){
        game();
        drawBoard();
        toggle();
        if(logic() == 'X')
            cout << "Player 1 (X) Wins!" << endl;
        else if(logic() == 'O')
            cout << "Player 2 (O) Wins!" << endl;

    }

    return 0;
}

void drawBoard(){

    system("cls");
    cout << setw(35) << "Tic Tac Toe V 2.0! " << endl << endl;
    cout << setw(21) << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << endl;
    cout << setw(30) << " --------- " << endl;
    cout << setw(21) << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << endl;
    cout << setw(30) << " --------- " << endl;
    cout << setw(21) << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << endl;

}

void game(){

    int input;

    cout << "Make your move..." << endl;
    cin >> input;

    if(input == 1)
        board[0][0] = player;
    else if(input == 2)
        board[0][1] = player;
    else if(input == 3)
        board[0][2] = player;
    else if(input == 4)
        board[1][0] = player;
    else if(input == 5)
        board[1][1] = player;
    else if(input == 6)
        board[1][2] = player;
    else if(input == 7)
        board[2][0] = player;
    else if(input == 8)
        board[2][1] = player;
    else if(input == 9)
        board[2][2] = player;


}

void toggle(){

    if(player == 'X')
        player = 'O';
    else
        player = 'X';

}


char logic(){
// Player 1
    /// Across
    if(board[0][0] == 'X' && board[0][1] == 'X' && board[0][2] == 'X')
        return 'X';
    else if(board[1][0] == 'X' && board[1][1] == 'X' && board[1][2] == 'X')
        return 'X';
    else if(board[2][0] == 'X' && board[2][1] == 'X' && board[2][2] == 'X')
        return 'X';
    /// Columns
    else if(board[0][0] == 'X' && board[1][0] == 'X' && board[2][0] == 'X')
        return 'X';
    else if(board[0][1] == 'X' && board[1][1] == 'X' && board[2][1] == 'X')
        return 'X';
    else if(board[0][2] == 'X' && board[1][2] == 'X' && board[2][2] == 'X')
        return 'X';
    /// Diagonals
    else if(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
        return 'X';
    else if(board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
        return 'X';

// Player 2
    /// Across
    if(board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == 'O')
        return 'O';
    else if(board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == 'O')
        return 'O';
    else if(board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == 'O')
        return 'O';
    /// Columns
    else if(board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == 'O')
        return 'O';
    else if(board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == 'O')
        return 'O';
    else if(board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == 'O')
        return 'O';
    /// Diagonals
    else if(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
        return 'O';
    else if(board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
        return 'O';
}

在函数 logic() 中,您缺少一条 return 语句,这意味着如果 none 的条件得到满足,该函数将 return 满足任何条件可能在那个寄存器中。我发现如果你在函数的末尾添加一个 return 0;,你不会得到那个行为。