Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2018, 00:03   #1
rikosh
Новичок
Джуниор
 
Регистрация: 16.04.2018
Сообщений: 1
По умолчанию Функция типа void повторяется без видимой на то причины. C++

Я только учусь C++ и решил на основании своих знаний сделать небольшую игру, где необходимо сражаться с рандомно выпадающими противниками. Следующая функция отвечает как раз-таки за битвы. По идее в конце предлагается выбор и по нажатию 'h' она должна завершаться, но независимо от моего выбора она перезапускается с самого начала.
Код:
void fight(Hero &h, Enemy &e) {
    cout << "Нажимайте 'a'('ф'), чтобы атаковать и 'b'('и'), чтобы блокировать атаку соперника. Блок снижает урон от соперника вдвое, но вы не можете атаковать в этот ход." << endl;
    cout << "Перед вами " << e.nm << ". У него " << e.HP << " здоровья и он наносит " << e.DG << " урона." << endl;
    char choise;
    while(h.isAlive && e.alive) {
        cin >> choise;
        if (choise == 'a') {
            e.takeDG (h.damage);
            cout << h.name << " ударяет " << e.nm << " на " << h.damage << " урона! Теперь у " << e.nm << " " << e.HP << " Очков Здоровья" << '\n';
            if (e.alive) {
                h.takeDamage(e.DG);
                cout << e.nm << " ударяет " << h.name << " на " << e.DG << " урона! Теперь у " << h.name << " " << h.hitPoints << " Очков Здоровья" << '\n';
            }
        }
        if (choise == 'b') {
            e.loseDG();
            cout << h.name << " блокирует урон от " << e.nm << endl;
            if (e.alive) {
                h.takeDamage(e.DG);
                cout << e.nm << " ударяет " << h.name << " на " << e.DG << " урона! Теперь у " << h.name << " " << h.hitPoints << " Очков Здоровья" << '\n';
            }
            e.DG = e.normalDG;
        }
    }
    if (h.isAlive) {
        cout << h.name << " победил!!!\n" << endl;
        h.levelUp();
    } else cout << "Вы мертвы..." << endl;
    cout << "Нажмите 'h'('р'), чтобы отправиться домой или 'a'('ф'), чтобы продолжить своё путешествие." << endl;
    cin >> choise;
    if (choise == 'h') {
        return;
    }
}
В int main я не нашёл причин по которой она могла бы перезапускаться:

Код:
int main() {
    setlocale(LC_ALL, "rus");
 
    string name;
    cout << "Введите имя вашего персонажа: ";
    cin >> name;
    Hero h1(name, 50, 50, 1, 5, 3, true);
    Enemy eEasy("Денис", 25, 25, 3, 3, 1, true);
    Enemy eMed("Борис", 50, 50, 5, 5, 3, true);
    Enemy eHard("Ибрагим", 100, 100, 10, 10, 5, true);
    while (true) {
        srand(time(NULL));
        int enemyChoise = 1 + rand() % 3;
        switch (enemyChoise) {
        case 1:
            fight(h1, eEasy);
        case 2:
            fight(h1, eMed);
        case 3:
            fight(h1, eHard);
        }
    }
    cout << "END!";
    return 0;
}
rikosh вне форума Ответить с цитированием
Старый 17.04.2018, 00:10   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Т.е. вечный цикл вызывающий эту функцию это не причина?
p51x вне форума Ответить с цитированием
Старый 17.04.2018, 00:25   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

И break; забыты, так что при выпадении 1 будет 3 боя подряд со всеми 3мя.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель типа void Вероника99 Помощь студентам 6 20.12.2015 18:05
Функция без указанного типа cossack5 Общие вопросы C/C++ 3 16.01.2014 09:34
функция типа void Krivorukov Общие вопросы C/C++ 9 18.11.2012 16:58
Проблема с переопределением типа void raast777 Общие вопросы C/C++ 6 22.07.2011 14:00