Я не получаю желаемый вывод из кода, кажется, что-то не так с циклом while - PullRequest
0 голосов
/ 27 января 2020

1) В начале игры пользователю предоставляется возможность выбрать тип игрока (1, 2, 3)

2) Каждый тип игрока начинается с следующих атрибутов -

3) Игрок 1 - максимальное здоровье = 50, урон = 10, лечение = 20

4) Игрок 2 - максимальное здоровье = 75, урон = 25, лечение = 10

5 ) Игрок 3 - максимальное здоровье = 100, урон = 75, лечение = 20

6) Игрок может быть исцелен только до максимального здоровья ( игнорировать это, поскольку я еще не закодировал его )

7) После появления игрока игра позволяет игроку получить урон или получить исцеление, как показано ниже

8) «Нажмите D (чтобы получить урон) или H (чтобы излечить) игрок "

9) нажатие D или H может повторяться бесконечное количество раз, пока здоровье игрока не упадет ниже 0

10) Когда здоровье игрока будет равно 0 или меньше 0, игра окончена!

11) Теперь пользователю предоставляется следующий выбор:

12) Нажмите S, чтобы снова начать игру

13) Нажмите E, чтобы завершить программу

14) Если пользователь нажимает «S», вся игра начинается снова, и теперь пользователь может создать нового игрока любого типа (1, 2, 3)

15) Если пользователь нажимает » E ", вся программа заканчивается!

ПРОБЛЕМА: [This Image shows the output] 1 Когда условие для выхода при l oop выполнено, оно выходит из того времени, пока l oop, но включено нажатие любого другого числа, чтобы вызвать игрока, «урон» и «исцеление» не работают. Вывод пустой

#include <iostream>

using namespace std;

int input;
char input1;
bool gameOver;

class player
{
    public:void p(int Health,int Damage,int Heal)
    {
        do
        {
          cout << "Player Health is" << Health;
          cin >> input1;

          switch(input1)
              {
                  case 'd':
                      Health -= Damage;
                      break;
                  case 'h':
                      Health += Heal;
                      break;
              }

           if(Health == 0 || input1 == 's')
           {
                gameOver = true;
           }

        } while (gameOver == false);
    }
}p1;

int main()
{

    do{
        //system("cls");
        cin >> input;

        if(input == 1)
        {
            p1.p(50,10,20);
        }
        if(input == 2)
        {
            player p2;
            p2.p(75,25,10);
        }
        if(input == 3)
        {
            player p2;
            p2.p(100,75,20);
        }



    } while (input != 5);

    return 0;
}

1 Ответ

1 голос
/ 27 января 2020

Переменная gameOver не сбрасывается в false при запуске следующей игры игрока l oop. Попробуйте что-то вроде этого:

void p(int Health, int Damage, int Heal)
{
  gameOver = false;
  do
  {
    // game logic...
  } while (gameOver == false)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...