C++中的TicTacToe不起作用?请帮忙

TicTacToe in C++ won't work? Help please

本文关键字:不起作用 中的 TicTacToe C++      更新时间:2023-10-16

所以我试图让这个简单的多人TicTacToe游戏在eclipse (c++版本)中工作,但似乎每当我运行我的程序时,只有在TicTacToe的顶部行人们才能获胜。

下面是我的代码:

#include <iostream>
using namespace std;
string board[3][3]; // creates the game board
void draw(int player, int num)
{
    num--;
    int row = num/3;
    int col = num%3;
    if ( player == 1 ) board[row][col] = "X";
    else board[row][col] = "O";
}// end draw method
bool checkWin(int num)
{
    bool win = false;
    if (num == 1 || num == 2 || num == 3)
    {
        if ( board[0][0] == board[0][1] && board[0][0] == board[0][2])
            return true;
    }
    if (num == 4 || num == 5 || num == 6)
    {
        if ( board[1][0] == board[1][1] && board[1][0] == board[1][2])
            return true;
    }
    if (num == 7 || num == 8 || num == 9)
    {
        if ( board[2][0] == board[2][1] && board[2][0] == board[2][2])
            return true;
    }
    if (num == 1 || num == 4 || num == 7)
    {
        if ( board[0][0] == board[1][0] && board[0][0] == board[2][0])
            return true;
    }
    if (num == 2 || num == 5 || num == 8)
    {
        if ( board[0][1] == board[1][1] && board[0][1] == board[2][1])
            return true;
    }
    if (num == 3 || num == 6 || num == 9)
    {
        if ( board[0][2] == board[1][2] && board[0][2] == board[2][2])
            return true;
    }
    if (num == 1 || num == 5 || num == 9)
    {
        if ( board[0][0] == board[1][1] && board[0][0] == board[2][2])
            return true;
    }
    if (num == 3 || num == 5 || num == 7)
    {
        if ( board[0][2] == board[1][1] && board[0][2] == board[2][0])
            return true;
    }
    return win;
} // end checkWin method
int main()
{
    cout << "C++ TIC TAC TOE GAME" << endl;
    cout << "The board is labeled from 1-9 in row-major order." << endl;
    bool winner = false;
    int turns = 0;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            board[i][j] = "-";
            cout << board[i][j] << " ";
        }
        cout << endl; // "enters" to next line
    } // prints the game board 2d array
    while (winner == false && turns < 9)
    {
        int player = 0;
        int placedAt = 0;
        if ( turns % 2 == 0 )
        {
            int num1;
            cout << "Player 1 enter what space to place X: ";
            cin >> num1;
            player = 1;
            draw(player,num1);
            placedAt = num1;
        }
        else
        {
            int num2;
            cout << "Player 2 enter what space to place O: ";
            cin >> num2;
            player = 2;
            draw(player,num2);
            placedAt = num2;
        }
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                cout << board[i][j] << " ";
            }
            cout << endl; // "enters" to next line
        } // prints the game board 2d array
        winner = checkWin(placedAt);
        if (winner == true)
        {
            cout << endl << "Player " << player << " WINS!";
        }
        turns++;
        cout << endl;
    } // end while loop
    if (winner == false) cout << endl << "NO ONE WON!";
    return 0;
} // end main method

string board[3][3];改为char board[3][3];, "X"改为'X'

下面更正后的代码应该可以正常编译。

#include <iostream>
using namespace std;
char board[3][3]; // creates the game board
void draw(int player, int num)
{
    num--;
    int row = num/3;
    int col = num%3;
    if ( player == 1 ) board[row][col] = 'X';
    else board[row][col] = 'O';
}// end draw method
bool checkWin(int num)
{
    bool win = false;
    if (num == 1 || num == 2 || num == 3)
    {
        if ( board[0][0] == board[0][1] && board[0][0] == board[0][2])
            return true;
    }
    if (num == 4 || num == 5 || num == 6)
    {
        if ( board[1][0] == board[1][1] && board[1][0] == board[1][2])
            return true;
    }
    if (num == 7 || num == 8 || num == 9)
    {
        if ( board[2][0] == board[2][1] && board[2][0] == board[2][2])
            return true;
    }
    if (num == 1 || num == 4 || num == 7)
    {
        if ( board[0][0] == board[1][0] && board[0][0] == board[2][0])
            return true;
    }
    if (num == 2 || num == 5 || num == 8)
    {
        if ( board[0][1] == board[1][1] && board[0][1] == board[2][1])
            return true;
    }
    if (num == 3 || num == 6 || num == 9)
    {
        if ( board[0][2] == board[1][2] && board[0][2] == board[2][2])
            return true;
    }
    if (num == 1 || num == 5 || num == 9)
    {
        if ( board[0][0] == board[1][1] && board[0][0] == board[2][2])
            return true;
    }
    if (num == 3 || num == 5 || num == 7)
    {
        if ( board[0][2] == board[1][1] && board[0][2] == board[2][0])
            return true;
    }
    return win;
} // end checkWin method
int main()
{
    cout << "C++ TIC TAC TOE GAME" << endl;
    cout << "The board is labeled from 1-9 in row-major order." << endl;
    bool winner = false;
    int turns = 0;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            board[i][j] = '-';
            cout << board[i][j] << ' ';
        }
        cout << endl; // "enters" to next line
    } // prints the game board 2d array
    while (winner == false && turns < 9)
    {
        int player = 0;
        int placedAt = 0;
        if ( turns % 2 == 0 )
        {
            int num1;
            cout << "Player 1 enter what space to place X: ";
            cin >> num1;
            player = 1;
            draw(player,num1);
            placedAt = num1;
        }
        else
        {
            int num2;
            cout << "Player 2 enter what space to place O: ";
            cin >> num2;
            player = 2;
            draw(player,num2);
            placedAt = num2;
        }
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                cout << board[i][j] << " ";
            }
            cout << endl; // "enters" to next line
        } // prints the game board 2d array
        winner = checkWin(placedAt);
        if (winner == true)
        {
            cout << endl << "Player " << player << " WINS!";
        }
        turns++;
        cout << endl;
    } // end while loop
    if (winner == false) cout << endl << "NO ONE WON!";
    return 0;
} // end main method