Загрузка...

Проблема с запуском игры.

Тема в разделе C/C++ создана пользователем Nermas 12 июн 2019. 159 просмотров

  1. Nermas
    Nermas Автор темы 12 июн 2019 https://zelenka.guru/threads/1670318/ 212 20 дек 2018
    Всем привет! Я начинающий программист. И я для начала решил сделать "игру". Просто для себя. Она отлично работала, пока я не стал замечать, что при вводе info и потом еще раз info. Начинает спамить в консоль. Потом программа вообще перестала работать. Помогите пж. Отблагодарю симпой.
    Пишу в xcode.

    Код
    #include <iostream>
    #include <string>

    using namespace std;

    int main(int argc, const char * argv[]) {
    string name;
    int entr = 0;
    int cena = 50;
    int balance = 0;
    int score = 1;
    cout << "Введите ваше имя — ";
    getline(cin, name);
    string i;
    main:
    getline(cin, i);
    if (i == "info") {
    int in;
    cout << "———————————————————————————" << endl;
    cout << "Инфо" << endl;
    cout << "Ник — " << name << endl;
    cout << "Баланс — " << balance << endl;
    cout << "Скорость — " << score << endl;
    cout << "Нажатий на Enter — " << entr << endl;
    cout << "———————————————————————————" << endl;
    cout << "Для выхода нажмите 0 и enter" << endl;
    cin >> in;
    if (in == 0) {
    goto main;
    }
    } else {
    goto main;
    } if (i == "cheats") {
    int ch;
    ch:
    cout << "———————————————————————————" << endl;
    cout << "0. Отмена" << endl;
    cout << "1. Баланс" << endl;
    cout << "2. Скорость" << endl;
    cout << "———————————————————————————" << endl;
    cin >> ch;
    if (ch == 0) {
    goto main;
    } if (ch ==1) {
    int ch_1;
    cout << "———————————————————————————" << endl;
    cout << "0. Отмена" << endl;
    cout << "1. Добавление к балансу" << endl;
    cout << "2. Отбавление от баланса" << endl;
    cout << "3. Конкретный баланс" << endl;
    cout << "———————————————————————————" << endl;
    cin >> ch_1;
    if (ch_1 == 0) {
    goto ch;
    } if (ch_1 == 1) {
    int get_bal;
    cout << "Сколько добавить к балансу?" << endl;
    cin >> get_bal;
    balance = balance + get_bal;
    goto main;
    } if (ch_1 == 2) {
    int out_bal;
    cout << "Сколько отбавить от баланса?" << endl;
    cin >> out_bal;
    balance = balance - out_bal;
    goto main;
    } if (ch_1 == 3) {
    cout << "Введите баланс" << endl;
    cin >> balance;
    goto main;
    } else {
    cout << "Я тебя не понял! Для выхода нажмите 0 и enter";
    }
    } if (ch == 2) {
    int ch_2;
    cout << "———————————————————————————" << endl;
    cout << "0. Отмена" << endl;
    cout << "1. Добавление к скорости" << endl;
    cout << "2. Отбавление от скорости" << endl;
    cout << "3. Конкретная скорость" << endl;
    cout << "———————————————————————————" << endl;
    cin >> ch_2;
    if (ch_2 == 0) {
    goto ch;
    } if (ch_2 == 1) {
    int get_scr;
    cout << "Сколько добавить к скорости?" << endl;
    cin >> get_scr;
    score = score + get_scr;
    goto main;
    } if (ch_2 == 2) {
    int out_scr;
    cout << "Сколько отбавить от скорости?" << endl;
    cin >> out_scr;
    balance = balance - out_scr;
    goto main;
    } if (ch_2 == 3) {
    cout << "Введите скорость" << endl;
    cin >> score;
    goto main;
    } else {
    cout << "Я тебя не понял! Для выхода нажмите 0 и enter";
    }
    }
    }
    if (i.length() == 0) {
    balance = balance + score;
    entr++;
    cout << "Ваш баланс — " << balance << endl;
    goto main;

    }
    if (i == "shop") {
    cout << "0. Отмена" << endl;
    cout << "1. Кликер. Цена — " << cena << " кликов, +1" << endl;
    int sh;
    cin >> sh;
    if (sh == 0) {
    goto main;
    } if (sh == 1) {
    balance = balance - cena;
    cena = cena * 1.5;
    score = score + 1;
    goto main;
    } else {
    cout << "Я тебя не понял! Для выхода нажмите 0 и enter";
    }
    } else {
    cout << "Я тебя не понял!";
    }

    cin.get();
    return 0;
    }
     
  2. de9x
    de9x 12 июн 2019 Frontend developer 141 3 янв 2019
    очень тупой код, извини, но это так.
    тут, если в i ты вводишь не info, то у тебя будет вызываться else, который перенаправляет тебя опять вводить i, поэтому, если ты будешь вводить shop, к примеру, то у тебя будет выполняться блок else, но никак не if(i == "shop"), потому что до него даже не дойдет. можешь отписать мне в тг, я тебе помогу
     
  3. de9x
    de9x 12 июн 2019 Frontend developer 141 3 янв 2019
    и еще, не юзай ты блять goto, это говно здесь ни к чему
     
  4. de9x
    de9x 12 июн 2019 Frontend developer 141 3 янв 2019
    в играх есть такое понятие, как игровой цикл. воспользуйся им
     
  5. de9x
    de9x 12 июн 2019 Frontend developer 141 3 янв 2019
    местами говнокод, потому что я и не хотел стараться. shop доделаешь сам и да, отрефакторь мой код, там есть повторения, а повторения - зло. если замечаешь, что ты что-то копируешь и вставляешь, значит, это можно сделать как-то по другому.
    Код

    #include <iostream>
    #include <string>

    using namespace std;

    void info(int entr, int balance, int score, string name);
    void cheatsInfo();
    void addCh(int *value);
    void subtractCh(int *value);
    void cheats(int *balance, int *score);

    int main(int argc, const char * argv[]) {
    string name;
    int entr = 0;
    int cena = 50;
    int balance = 0;
    int score = 1;
    cout << "Введите ваше имя — ";
    cin >> name;
    string i;
    string continue_;
    while(true)
    {
    system("clear");
    cout << "Введите операцию, которую хотите совершить:";
    cout << "\n\t1. Ваша статистика (/info).";
    cout << "\n\t2. Использовать читы (/cheats).";
    cout << "\n\t3. Открыть магазин (/shop).";
    cout << "\n\t4. Выйти (/exit).\n";
    cin >> i;
    entr++;
    system("clear");
    while(true)
    {
    if(i == "/info")
    {
    info(entr, balance, score, name);
    break;
    }
    else if(i == "/cheats")
    {
    cheats(&balance, &score);
    break;
    }
    }
    cout<<"Для продолжения нажмите любую клавишу и enter...\n";
    cin >> continue_;
    entr++;
    }
    }

    void info(int entr, int balance, int score, string name)
    {
    cout << "———————————————————————————" << endl;
    cout << "Инфо" << endl;
    cout << "Ник — " << name << endl;
    cout << "Баланс — " << balance << endl;
    cout << "Скорость — " << score << endl;
    cout << "Нажатий на Enter — " << entr << endl;
    cout << "———————————————————————————" << endl;
    }

    void cheats(int *balance, int *score)
    {
    system("clear");

    int choice;

    cout << "———————————————————————————" << endl;
    cout << "0. Отмена" << endl;
    cout << "1. Баланс" << endl;
    cout << "2. Скорость" << endl;
    cout << "———————————————————————————" << endl;
    cin >> choice;
    entr++;
    system("clear");
    if (choice == 0)
    {
    return;
    }

    cheatsInfo();
    if (choice == 1)
    {
    cin >> choice;
    entr++;
    if (choice == 0)
    {
    return;
    }
    else if (choice == 1)
    {
    addCh(balance);
    }
    else if (choice == 2)
    {
    subtractCh(balance);
    }
    else if (choice == 3)
    {
    cout << "Введите баланс: ";
    cin >> *balance;
    entr++;
    }
    }

    if (choice == 2)
    {
    cin >> choice;
    if (choice == 0)
    {
    return;
    }
    else if (choice == 1)
    {
    addCh(score);
    }
    else if (choice == 2)
    {
    subtractCh(score);
    }
    else if (choice == 3)
    {
    cout << "Введите скорость: ";
    cin >> *score;
    entr++;
    }
    }
    return;
    }

    void cheatsInfo()
    {
    cout << "———————————————————————————" << endl;
    cout << "0. Отмена" << endl;
    cout << "1. Прибавить" << endl;
    cout << "2. Отнять" << endl;
    cout << "3. Конкретное значение" << endl;
    cout << "———————————————————————————" << endl;
    }

    void addCh(int *value)
    {
    system("clear");
    int get_bal;
    cout << "Сколько добавить?" << endl;
    cin >> get_bal;
    entr++;
    *value += get_bal;
    }
    void subtractCh(int *value)
    {
    system("clear");
    int get_sub;
    cout << "Сколько отбавить?" << endl;
    cin >> get_sub;
    entr++;
    *value = *value - get_sub;
    }
     
Загрузка...
Top