Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3.                               Online C++ Compiler.
  4.                Code, Compile, Run and Debug C++ program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include <iostream>
  10. #include <vector>
  11. #include <memory>
  12.  
  13. enum class Side
  14. {
  15.     China,
  16.     America,
  17.     GLA
  18. };
  19.  
  20. class Warrior
  21. {
  22. public:
  23.     virtual void attack() = 0;
  24. };
  25.  
  26. class ChineeseWarrior : public Warrior
  27. {
  28. public:
  29.     void attack() override { std::cout << "Han dzi dzio!!!" << std::endl; }    
  30. };
  31.  
  32. class AmericanWarrior : public Warrior
  33. {
  34. public:
  35.     void attack() override { std::cout << "Arrgggghhh!!!" << std::endl; }    
  36. };
  37.  
  38. class GLAWarrior : public Warrior
  39. {
  40.     void attack() override { std::cout << "To the victory!" << std::endl; }  
  41. };
  42.  
  43. class WarriorFactory
  44. {
  45. public:
  46.     static std::unique_ptr<Warrior> createWarrior(Side side)
  47.     {
  48.         switch (side)
  49.             {
  50.                 case Side::China:
  51.                     return std::make_unique<ChineeseWarrior>();
  52.                 break;
  53.                 case Side::America:
  54.                     return std::make_unique<AmericanWarrior>();
  55.                 break;
  56.                 case Side::GLA:
  57.                     return std::make_unique<GLAWarrior>();
  58.                 break;
  59.             }
  60.     }
  61. };
  62.  
  63. class Player
  64. {
  65. public:
  66.     Player(Side side) {
  67.         m_army.reserve(defaultArmyCount);
  68.         for (size_t i = 0; i < defaultArmyCount; ++i) {
  69.                m_army.push_back(WarriorFactory::createWarrior(side));
  70.         }
  71.     }
  72.     void startAttack() {
  73.         for (const auto& warrior : m_army)
  74.         {
  75.             warrior->attack();
  76.         }
  77.     }
  78.     static const size_t defaultArmyCount {3};
  79. private:
  80.     std::vector<std::unique_ptr<Warrior>> m_army;
  81. };
  82.  
  83. int main()
  84. {
  85.     Player player (Side::GLA);
  86.     player.startAttack();
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement