Tic-Tac-Toe поможет в C ++, как сделать цикл так, чтобы игра Tic Tac Toe повторяла доску каждый раз - PullRequest
1 голос
/ 30 октября 2019

Я новичок, поэтому у меня довольно грязный код. Я не прокомментировал эту игру полностью, поэтому, если вам нужно уточнить некоторые переменные, я могу дать вам это.

(Кстати, это проект на C ++, который просит сделать игру Tic Tac Toe)

Мой главный вопрос: как мне повторить мою доску (которая обновляется каждый раз, когда кто-то делает ход в крестики-нолики)? Я не могу придумать, как это сделать, поэтому было бы полезно, если бы кто-то дал мне идей, а не прямой ответ .

Мой код ниже приведен только для того, чтобы дать вам представление очто я делаю, а также если у вас есть какие-либо предложения о том, как исправить мой код (например, организация или ошибки, вероятность возникновения которых 100%).

    #include <iostream>
    using namespace std;
    char a[3][3];//sets 3x3 matrix
    a[0][0]='1';//upper row left corner is 1
            a[0][1]='2';//upper row middle is 2
            a[0][2]='3';//upper row right corner is 3
            a[1][0]='4';//middle row left is 4
            a[1][1]='5';//middle row middle is 5
            a[1][2]='6';//middle row right is 6
            a[2][0]='7';//bottom row left is 7
            a[2][1]='8';//bottom row middle is 8
            a[2][2]='9';//bottom row right is 9




            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;




    bool match = true;//this tells the consul the match has not ended

    bool checker;//checks if you actually chose X or O
    checker=true;

    cout << "play!play!play! you'll need two people" << endl;
    cout << "decide who takes X, then press 1 to take X" << endl;
    cout << "or press 2 to take O" << endl;


    cin >> player;//so, organize will be the thing (1 or 2) that the player will put in

    char XO;//helps make X and O

            if (player == 1)
            {
                cout << "you chose X" << endl;
                XO = 'X';
            }

            else if (player == 2)
            {
                cout << "you chose O" << endl;
                XO = 'O';
            }
            else
            {
                cout << "press 1 or 2 only please" << endl;
                checker=false;
            }




        bool invalid;//if you "accidentally" put your move in an illegal square, this will help you redo a move.
        bool gameover = true;//helps differentiate between draws and wins

        int nowwestart;//starts game
        cout << "player play your move" << endl;//tells you to move it
        cin >> nowwestart;
        invalid = true;//you always make a valid move first turn.

        if (nowwestart == 1 && a[0][0] == '1')//when you place your marker on square 1, i need to tell consul that your move equals a certain square

        {
            a[0][0]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;


        }

        else if (nowwestart == 2 && a[0][1] == '2')
        {
            a[0][1]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 3 && a[0][2] == '3')
        {
            a[0][2]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 4 && a[1][0] == '4')
        {
            a[1][0]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;


        }

        else if (nowwestart == 5 && a[1][1] == '5')
        {
            a[1][1]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 6 && a[1][2] == '6')
        {
            a[1][2]=XO;         cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 7 && a[2][0] == '7')
        {
            a[2][0]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 8 && a[2][1] == '8')
        {
            a[2][1]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else if (nowwestart == 9 && a[2][2] == '9')
        {
            a[2][2]=XO;
            cout << "     |     |     " << endl;//all these "shapes" make the board.

            cout << "  " << a[0][0] << "  |  " << a[0][1] << "  |  " << a[0][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[1][0] << "  |  " << a[1][1] << "  |  " << a[1][2] << endl;

            cout << "_____|_____|_____" << endl;

            cout << "     |     |     " << endl;

            cout << "  " << a[2][0] << "  |  " << a[2][1] << "  |  " << a[2][2] << endl;

            cout << "     |     |     " << endl;

        }

        else
        {
            cout << "you made an invalid move, please do it again" << endl;
            invalid=false;//you made an illegal move :(
        }


        while(!invalid);



        match = false;//when match has ended...
        if (a[0][0] != '1')//all possible wins through square 1
        {
            if (a[0][0] == a[1][0] && a[1][0] == a[2][0])
            {
                match = true;
            }

            else if (a[0][0] == a[0][1] && a[0][1] == a[0][2])
            {
                match = true;
            }

            else if (a[0][0] == a[1][1] && a[1][1] == a[2][2])
            {
                match= true;
            }
        }

        if (a[0][1] != '2')//all possible wins through square 2
        {
            if (a[0][1] == a[1][1] && a[1][1] == a[2][1])
            {
                match = true;
            }
        }

        if (a[0][2] != '3')//all possible wins through square 3
        {
            if (a[0][2] == a[1][2] && a[1][2] == a[2][2])
            {
                match = true;
            }

            else if (a[0][2] == a[1][1] && a[1][1] == a[2][0])
            {
                match = true;
            }
        }

        if (a[1][0] != '4')//all possible wins through square 4
        {
            if (a[1][0] == a[1][1] && a[1][1] == a[1][2])
            {
                match = true;
            }
        }

        if (a[2][0] != '7')//all possible wins through square 7
        {
            if (a[2][0] == a[2][1] && a[2][1] == a[2][2])
            {
                match = true;
            }
        }

        else//anything beside win is draw
        {
            gameover=false;//no one won...
            match=true;//but the match is done anyway
        }

        if (match==true)//if the match is done
        {
            if (gameover==true)//if someone won
            {
                cout << "player" << player << "won" << player << endl;
            }

            cout << "the game has ended. play again? 1-yes, 2-false (press 2 please)" << endl;
            if (1)
            {
                match = false;//dang it, you are still playing. the borad is below.
                char a[3][3];//sets 3x3 matrix
                a[0][0]='1';//upper row left corner is 1
                a[0][1]='2';//upper row middle is 2
                a[0][2]='3';//upper row right corner is 3
                a[1][0]='4';//middle row left is 4
                a[1][1]='5';//middle row middle is 5
                a[1][2]='6';//middle row right is 6
                a[2][0]='7';//bottom row left is 7
                a[2][1]='8';//bottom row middle is 8
                a[2][2]='9';//bottom row right is 9

            }
            player = 1;
        }

        else
        {
            if (player == 1)
            {
                player = 2;
            }
            else
            {
                player = 1;
            }
        }




        while (!match);

        cout << endl;
        return 0;
}




int main()
{
    dot();
}

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете добавить цикл while и проверить, что условие не выиграно и не сыграно в ничью, например while( !bWon && !bDraw )

В цикле вы можете добавить функции к

  1. Выберите, какой игрок имеетВоспроизвести (Подсказка: каждый нечетный цикл является игрой для X и даже для O .)
  2. Один раз для входа игрока. Вы можете рассчитать, если он выиграл.
  3. Если он не выиграл, можно рассчитать, если это ничья. (Подсказка: сколько раз будет выполняться цикл?)
  4. Очистить старую плату и отобразить новую.
1 голос
/ 30 октября 2019

Вы можете зациклить всю программу с помощью пользовательского ввода. while (getline(std::cin, input). И обновите 2D-массив соответствующим символом. Я бы предложил вам использовать константу для представления X и O. Так что код будет понятен. А также я бы посоветовал вам переместить повторяющийся код в функции, что опять-таки повысит ясность.

...