Advertisement
k0ske

Untitled

Mar 19th, 2022 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.08 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int numberOfHeros = 0;
  5.  
  6. enum Division {
  7.     ASSASSIN = 1,
  8.     MEDIC,
  9.     MAGE,
  10.     TANK
  11. };
  12.  
  13. enum Combat {
  14.     UNKNOWN = -1,
  15.     RANGE = 1,
  16.     MELEE,
  17.     BOTH
  18. };
  19.  
  20. struct Hero {
  21.     string name;
  22.     Division division;
  23.     Combat combat;
  24.     Hero() { };
  25.     Hero(string nm, Division dv, Combat cb) {
  26.         this->name = nm;
  27.         this->division = dv;
  28.         this->combat = cb;
  29.     }
  30. };
  31.  
  32. string getHeroName(Hero* HeroStorage) {
  33.     char userInput[50];
  34.     cout << "Enter a name for the new hero: ";
  35.     string newName;
  36.     bool nameTaken = false;
  37.     cin.ignore();
  38.     do {
  39.         if (nameTaken) { cout << "\nName already taken!\n"; }
  40.         nameTaken = false;
  41.         cin.getline(userInput, 50);
  42.         newName = (string)userInput;
  43.         if (HeroStorage != nullptr) {
  44.             for (int i = 0; i < numberOfHeros; i++) {
  45.                 if (newName == HeroStorage[i].name) { nameTaken = true; }
  46.             }
  47.         }
  48.     } while (nameTaken == true);
  49.  
  50.     return newName;
  51. }
  52.  
  53. Division getHeroDivision() {
  54.     int userInput;
  55.     bool hasErrorOccurred = false;
  56.     do {
  57.         if (hasErrorOccurred) { cout << "Number not in range!\n"; }
  58.         cout << "Enter the divison of the new hero:\n"
  59.              << "1 - Assassin\n2 - Medic\n3 - Mage\n4 - Tank\n";
  60.         cin >> userInput;
  61.         hasErrorOccurred = true;
  62.     } while (userInput < 1 || userInput > 4);
  63.     return (Division)userInput;
  64. }
  65.  
  66. Combat getHeroCombat() {
  67.     int userInput;
  68.     cout << "Enter the combat of the new hero:\n"
  69.         << "1 - Range\n2 - Melee\n3 - Both\n";
  70.     cin >> userInput;
  71.     if (userInput == 1 || userInput == 2 || userInput == 3) {
  72.         return (Combat)userInput;
  73.     }
  74.     else return (Combat)-1;
  75. }
  76.  
  77. Hero createHero(Hero* HeroStorage) {
  78.     string name = getHeroName(HeroStorage);
  79.     Division division = getHeroDivision();
  80.     Combat combat = getHeroCombat();
  81.     Hero newHero(name, division, combat);
  82.     cout << "\nHero created sucessfully!\n";
  83.     numberOfHeros++;
  84.     return newHero;
  85. }
  86.  
  87. void printHeroDivision(Hero hero) {
  88.     switch (hero.division) {
  89.     case 1: cout << "Assassin"; break;
  90.     case 2: cout << "Medic"; break;
  91.     case 3: cout << "Mage"; break;
  92.     case 4: cout << "Tank"; break;
  93.     default: break;
  94.     }
  95. }
  96.  
  97. void printHeroCombat(Hero hero) {
  98.     switch (hero.combat) {
  99.     case 1: cout << "Range"; break;
  100.     case 2: cout << "Melee"; break;
  101.     case 3: cout << "Both"; break;
  102.     default: cout << "Unknown"; break;
  103.     }
  104. }
  105.  
  106.  
  107. void printMenu() {
  108.     cout << "1 - Create hero\n"
  109.         << "2 - Hero statistics\n"
  110.         << "3 - Delete hero\n"
  111.         << "4 - All heros\n"
  112.         << "5 - Exit\n";
  113. }
  114.  
  115. int main()
  116. {
  117.     Hero* HeroStorage = nullptr;
  118.     for (;;) {
  119.         printMenu();
  120.         int userInput;
  121.         cin >> userInput;
  122.         if (userInput == 1) {
  123.             Hero newHero = createHero(HeroStorage);
  124.             if (HeroStorage == nullptr) {
  125.                 HeroStorage = new Hero[1];
  126.                 HeroStorage[0] = newHero;
  127.             }
  128.             else {
  129.                 Hero* tempHeros = new Hero[numberOfHeros - 1];
  130.                 for (size_t i = 0; i < numberOfHeros - 1; i++) {
  131.                     tempHeros[i] = HeroStorage[i];
  132.                 }
  133.                 delete[] HeroStorage;
  134.                 HeroStorage = new Hero[numberOfHeros];
  135.                 for (size_t i = 0; i < numberOfHeros - 1; i++) {
  136.                     HeroStorage[i] = tempHeros[i];
  137.                 }
  138.                 delete[] tempHeros;
  139.                 HeroStorage[numberOfHeros - 1] = newHero;
  140.             }
  141.         }
  142.         if (userInput == 2) {
  143.             char userInput[50];
  144.             cout << "Enter the hero's name: ";
  145.             cin.ignore();
  146.             cin.getline(userInput, 50);
  147.             string heroName = (string)userInput;
  148.             bool heroFound = false;
  149.             for (int i = 0; i < numberOfHeros; i++) {
  150.                 if (heroName == HeroStorage[i].name) {
  151.                     cout << "Hero's name: " << HeroStorage[i].name << endl
  152.                         << "Hero's division: "; printHeroDivision(HeroStorage[i]);
  153.                     cout << "\nHero's combat type: "; printHeroCombat(HeroStorage[i]);
  154.                     cout << endl;
  155.                     heroFound = true;
  156.                 }
  157.             }
  158.             if (!heroFound) { cout << "Hero doesn't exist\n"; }
  159.         }
  160.         if (userInput == 3) {
  161.             if (numberOfHeros == 0) { cout << "No heros found!\n"; continue; }
  162.             char userInput[50];
  163.             cout << "Enter the name of the hero you want to delete: ";
  164.             cin.ignore();
  165.             cin.getline(userInput, 50);
  166.             string heroToDelete = (string)userInput;
  167.             bool heroExists = false;
  168.             for (int i = 0; i < numberOfHeros; i++) {
  169.                 if (heroToDelete == HeroStorage[i].name) { heroExists = true; }
  170.             }
  171.             if (heroExists) {
  172.                 Hero* tempHeros = new Hero[numberOfHeros];
  173.                 for (size_t i = 0; i < numberOfHeros; i++) {
  174.                     tempHeros[i] = HeroStorage[i];
  175.                 }
  176.                 delete[] HeroStorage;
  177.                 HeroStorage = new Hero[numberOfHeros - 1];
  178.                 for (size_t i = 0, j = 0; i < numberOfHeros; i++) {
  179.                     if (tempHeros[i].name != heroToDelete) {
  180.                         HeroStorage[j] = tempHeros[i];
  181.                         j++;
  182.                     }
  183.                 }
  184.                 delete[] tempHeros;
  185.                 numberOfHeros--;
  186.             }
  187.             else {
  188.                 cout << "That hero doesn't exist!\n";
  189.             }
  190.  
  191.         }
  192.         if (userInput == 4) {
  193.             if (!HeroStorage) { cout << "No heros created!\n"; }
  194.             else {
  195.                 cout << "\n\n";
  196.                 for (int i = 0; i < numberOfHeros; i++) {
  197.                     cout << HeroStorage[i].name << endl;
  198.                 }
  199.                 cout << "\n\n";
  200.             }
  201.         }
  202.         if (userInput == 5) { return 0; }
  203.     }
  204. }
  205.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement