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

时间:2015-05-18 02:58:26

标签: c++ eclipse tic-tac-toe

所以我试图让这个简单的多人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

1 个答案:

答案 0 :(得分:0)

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