-3

我已经对这个井字游戏进行了编码,对于玩家 1,它可以完美运行(呵呵)。结束游戏会检查所有工作,因此如果在空格 1、2 和 3 中输入 X,则游戏结束并要求重复等。

但是,我遇到的问题是它永远不会切换到玩家 2。它总是会要求玩家 1 进行下一步操作,因此总是会放置 X。(见下面的截图)。创建了最底部的 if 语句来执行此操作,但它似乎不起作用。如果有人能告诉我我需要添加/更改什么来让它切换播放器,我将不胜感激。(我知道代码是基本的,可能格式不正确等,但是我几天前开始学习 C++,这是我的第一个真正的项目)。我在这里先向您的帮助表示感谢!

#include <iostream>
using namespace std;

// prepare the game
bool GameOver = false;
bool Repeat = false;
bool Winner = false;
int PlayerTurn = 1;
int ChangeNumber;
char Counter = 'Z';
char Board1 = '1';
char Board2 = '2';
char Board3 = '3';
char Board4 = '4';
char Board5 = '5';
char Board6 = '6';
char Board7 = '7';
char Board8 = '8';
char Board9 = '9';

void welcome()
{
    cout << "Welcome to Tic Tac Toe! This game requires 2 players." << endl;
    cout << "Player 1 is represented by X whereas Player 2 is represented by O." << endl << endl;
}

int main()
{
    welcome();
    cout << Board1 << " - " << Board2 << " - " << Board3 << endl;
    cout << Board4 << " - " << Board5 << " - " << Board6 << endl;
    cout << Board7 << " - " << Board8 << " - " << Board9 << endl;

    do
    {
        if(PlayerTurn == 1)
        {
            cout << endl << "Player 1, it is your turn! Enter the number you wish to change! ";
            Counter = 'X';
        }
        else
        {
            cout << endl << "Player 2, it is your turn! Enter the number you wish to change! ";
            Counter = 'O';
        }

        do{
        cin >> ChangeNumber;
        switch(ChangeNumber)
        {
            case 1:
                Board1 = Counter;
                break;
            case 2:
                Board2 = Counter;
                break;
            case 3:
                Board3 = Counter;
                break;
            case 4:
                Board4 = Counter;
                break;
            case 5:
                Board5 = Counter;
                break;
            case 6:
                Board6 = Counter;
                break;
            case 7:
                Board7 = Counter;
                break;
            case 8:
                Board8 = Counter;
                break;
            case 9:
                Board9 = Counter;
                break;
            default:
                cout << "That is not a valid placement!";
                Repeat = true;
        }
        }while(Repeat == true);

        //check for end of game
        if (Board1 != '1') {
            if (Board2 == Board1 && Board3 == Board1){
                GameOver = true;
            }
            if (Board4 == Board1 && Board7 == Board1){
                GameOver = true;
            }
        }
        if (Board5 != '5'){
            if (Board1 == Board5 && Board9 == Board5){
                GameOver = true;
            }
            if (Board2 == Board5 && Board8 == Board5){
                GameOver = true;
            }
            if (Board4 == Board5 && Board6 == Board5){
                GameOver = true;
            }
            if (Board3 == Board5 && Board7 == Board5){
                GameOver = true;
            }
        }
        if (Board9 != '9') {
            if (Board3 == Board9 && Board6 == Board9){
                GameOver = true;
            }
            if (Board7 == Board9&& Board8 == Board9){
                GameOver = true;
            }
        }

        //Check not a draw
        if (Board1 != '1' && Board2 != '2' && Board1 != '3' && Board4 != '4' && Board5 != '5' && Board6 != '6' && Board7 != '7' && Board8 != '8' && Board9 != '9')
        {
            GameOver = true;
            Winner = false;
        }

        if(GameOver) {
            if(Winner){
                cout << "Player" << PlayerTurn << " wins!" << endl;
            }

        cout << Board1 << " - " << Board2 << " - " << Board3 << endl;
        cout << Board4 << " - " << Board5 << " - " << Board6 << endl;
        cout << Board7 << " - " << Board8 << " - " << Board9 << endl << endl;

        cout << "Game over!" << endl;
        cout << "Play again? y/n ";
        char PlayAgain;
        cin >> PlayAgain;

        if (PlayAgain == 'y'){
            GameOver = false;

            Board1 = '1';
            Board2 = '2';
            Board3 = '3';
            Board4 = '4';
            Board5 = '5';
            Board6 = '6';
            Board7 = '7';
            Board8 = '8';
            Board9 = '9';
        }
        PlayerTurn = 1;

        }
        else {
            if (PlayerTurn == 1){
                PlayerTurn == 2;
            } else {
                PlayerTurn == 1;
            }
        }
    }while(GameOver == false);
}

在此处输入图像描述

4

2 回答 2

4
if (PlayerTurn == 1){
            PlayerTurn == 2;

应该

if (PlayerTurn == 1){
            PlayerTurn = 2;

老实说,您可能应该做到:

PlayerTurn = PlayerTurn == 1 ? 2 : 1;
于 2013-05-10T20:54:04.533 回答
3

== 用于测试相等性;= 用于赋值。

于 2013-05-10T20:53:45.810 回答