Модернизировать программу на С++

я написал небольшой код на С++, программа называется - "qwe", данная игра по смыслу тоже самое что и Invoker game, я начинающий кодер поэтому решил начать с чего то что мне было бы интересно делать, тем более я и в дотку могу пару каток скатать, но не суть.

В вкратце опишу суть программы, консольная программа рассказывает пользователю что нужно делать, после чего спрашивает начать ли игру, после запускается таймер и программа выводит 10 рандомных кастов Invokera и проверяет их сразу же на правильность и не даёт пользователю ввести не правильную комбинацию, после 10 способностей выводиться время за которое пользователь ввёл способности и срабатывает цикл на повтор программы, сегодня я собираюсь добавить до начала программы комбинации способностей для тех пользователей кто их не знает(но принципе кто не играл в доту 2 или на инвокер не думаю что стали бы в неё играть), но не суть. Мне бы хотелось еще добавить что-бы способности не повторялись, то-есть каждый раз все касты были в рандомным порядке и не повторялись - (eee - eew - wwq - qqq...), но я не знаю что лучше сделать, переписать данную часть кода или добавить "IF" который будет исключать те способности которые уже были введены.

Подскажите пожалуйста как это лучше всего можно реализовать или возможно какие то дополнительные механики геймплея, думал добавить еще пару режимов или сделать это с графикой, кому интересно можете в гугле вбить инвокер гейм и увидить, я хотел бы что-то на подобии но не знаю как это реализовать на С++, или перейти на юнити - анриал 5, или так и оставить в консоле, подскажите пожалуйста буду готов к любым предложениям и критике

Вот код -

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <random>
#include <chrono>
#include <fstream>
#include <cstdlib>

using namespace std;
using namespace std::chrono;

map<string, string> invokerAbilities = {
  {"qqq", "Cold Snap"},
    {"www", "EMP"},
    {"eee", "Sun Strike"},

    {"qwe", "Deaf. Blast"},
    {"wqe", "Deaf. Blast"},
    {"ewq", "Deaf. Blast"},

    {"qqw", "Ghost Walk"},
    {"qwq", "Ghost Walk"},
    {"wqq", "Ghost Walk"},

    {"qqe", "Ice Wall"},
    {"eqq", "Ice Wall"},
    {"eqq", "Ice Wall"},

    {"wwq", "Tornado"},
    {"wqw", "Tornado"},
    {"qww", "Tornado"},

    {"wwe", "Alacrity"},
    {"wew", "Alacrity"},
    {"eww", "Alacrity"},

    {"eeq", "Forge Spirit"},
    {"eqe", "Forge Spirit"},
    {"qee", "Forge Spirit"},

    {"eew", "Meteor"},
    {"ewe", "Meteor"},
    {"wee", "Meteor"},
};

int main() {
    setlocale(LC_ALL, "Russian");

    mt19937 rng(static_cast<unsigned int>(time(0)));

    string confirmation;

    cout << "Программа QWE запущенна..." << endl;
    cout << "Данная программа на рандом будет писать вам 10 способостей Invoker'a, вам нужно будет как можно быстрее их ввести" << endl;


    cout << "Начать игру - (0 - да, 1 - нет)";
    int answer;
    cin >> answer;

    if (answer == 0) {
        do {
            vector<pair<string, string>> abilitiesVector(invokerAbilities.begin(), invokerAbilities.end());
            shuffle(abilitiesVector.begin(), abilitiesVector.end(), rng);

            int correctAnswers = 0;
            auto start = steady_clock::now();

            for (int i = 0; i < 10; ++i) {
                string input;
                cout << "Введите комбинацию для способности Invoker'а " << abilitiesVector[i].second << ": ";
                cin >> input;

                while (!(invokerAbilities.count(input) && invokerAbilities[input] == abilitiesVector[i].second)) {
                    cout << "Неправильный ввод. Попробуйте снова: ";
                    cin >> input;
                }

                ++correctAnswers;
            }

            auto end = steady_clock::now();
            auto duration = duration_cast<seconds>(end - start);

            cout << "Правильных ответов: " << correctAnswers << "/10" << endl;
            cout << "Время выполнения: " << duration.count() << " секунд" << endl;
            cout << "Хотите продолжить? (0 - да, 1 - нет): ";

            cin >> confirmation;
        } while (confirmation != "1");
   
    }
    else {
        cout << "Программа закрыта!" << endl;
    }

    return 0;
}

Ответы (0 шт):