Игра не заканчивается, когда я получаю 100 очков за компьютер - PullRequest
1 голос
/ 14 октября 2011

Странно, я написал здесь свою свинью в C ++, которую, когда пользователь или компьютер достигает 100, он выигрывает. Но проблема в том, что если я продолжу катиться и пройду больше 100, я не выиграю, если не удержусь после того, как доберусь туда. И компьютер, если он приблизится к 100, к 80-100, просто скажет, что побеждает. Я не понимаю, что здесь происходит и в чем проблема? Я все сделал правильно! Или я что-то упустил?

Как я могу исправить эту проблему, когда, как только я достигаю 100, играю или держусь за конечного пользователя, он просто выигрывает, а не превышает 100, поэтому, если я держу 100+, это говорит мне, что я выиграл. Как я могу сделать так, чтобы компьютер выигрывал только тогда, когда он фактически достигнет 100 или миновал автоматически?

Ответы [ 4 ]

5 голосов
/ 14 октября 2011

Ваш тест для продолжения игры должен быть И не ИЛИ.

if((humanTotalScore < 100) || (computerTotalScore < 100))

должен быть

if((humanTotalScore < 100) && (computerTotalScore < 100))

В противном случае оба значения должны быть больше 100, прежде чем он остановится, а не только один изих.

Я не искал других ошибок, которые могут быть там, я остановился, когда нашел эту.

4 голосов
/ 14 октября 2011

Вы заметили, что ваша логика, которая назначает continuePlay, находится вне цикла воспроизведения?

2 голосов
/ 14 октября 2011

Попробуйте так:

            do
            {
               if((humanTotalScore < 100) && (computerTotalScore < 100))
               continuePlay = true;
               else
               continuePlay = false;

                {

                    humanTurn(humanTotalScore);
                    computerTurn(computerTotalScore);
                }


                if(humanTotalScore >= 100)
                {
                    cout << "You won!";
                    return 0;
                }
                else if (computerTotalScore >= 100)   
                {

                    cout << "You lost!";
                    return 0;
                } 
           }
             while(continuePlay == true);

и

int computerTurn(int& computerTotalScore)
    {
            int currentScore = 0;
            int randomDiceRoll;
            cout << " " << endl;
            cout << "The computer will now make its move" << endl;
            cout << " " << endl;
            while ((currentScore < 20) && (computerScore != 1)&&computerTotalScore<100)
            {
                    randomDiceRoll = diceRollFunction();
                    if (randomDiceRoll == 1)
                    {
                            cout << "The computer rolled: ";
                            cout << randomDiceRoll;
                            cout << " " << endl;
                            cout << "The computers total score is: " << computerTotalScore;
                            cout << " " << endl;
                            cout << " " << endl;
                            cout << "The computer has rolled a one, it is now your turn." << endl;
                            cout << " " << endl;

                            break;
                    }
                    else
                    {
                            currentScore += randomDiceRoll;
                            computerTotalScore += randomDiceRoll;
                            cout << "The computer rolled: ";
                            cout << randomDiceRoll;
                            cout << " " << endl;
                            cout << "The computers total score is: " << computerTotalScore;
                            cout << " " << endl;
                            cout << " " << endl;
                    }
            }
            if(currentScore >= 20)
            {
                    computerTotalScore += computerScore;
                    cout << "The computer has reached a max of 20 points for their turn" << endl;
                    cout << " " << endl;
            }

            return computerTotalScore;
    }

внесенных изменений:

  • Условие if было изменено из-за ошибки в логике.
  • Условие If, if((humanTotalScore < 100) && (computerTotalScore < 100)) было перемещено в цикл do-while. Так как он должен обновляться каждый раз, когда кто-нибудь играет.
  • Была изменена функция int computerTurn(int& computerTotalScore). В некоторых местах вместо computerTotalScore
1 голос
/ 14 октября 2011

вместо

if((humanTotalScore < 100) || (computerTotalScore < 100))

есть

if((humanTotalScore <= 100) && (computerTotalScore <= 100))
...