Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <type_traits>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. class Weapon{
  7. private:
  8. double Range_A, Melee_A;
  9. public:
  10.  
  11.  
  12.  
  13. virtual void MeleeDmg ( double ml){
  14. Melee_A = ml;
  15. }
  16. virtual void RangeDmg (double rng){
  17. Range_A = rng;
  18.  
  19. }
  20. double GetRngDmg(){
  21. return Range_A;
  22. }
  23. double GetMlDmg(){
  24. return Melee_A;
  25. }
  26.  
  27. };
  28. class Armor{
  29. private:
  30. double Range_P, Melee_P;
  31. public:
  32.  
  33.  
  34. virtual void RangePr (double rng){
  35. Range_P = rng;
  36.  
  37. }
  38. virtual void MeleePr (double ml){
  39.  
  40. Melee_P = ml;
  41. }
  42. double GetRngArm(){
  43. return Range_P;
  44. }
  45. double GetMlArm(){
  46. return Melee_P;
  47. }
  48. };
  49. class Race{
  50. private:
  51. double Max_Hp;
  52. public:
  53.  
  54.  
  55. virtual void SetHp(double hp){
  56. Max_Hp = hp;
  57. }
  58. double GetHp(){
  59. return Max_Hp;
  60. }
  61. };
  62.  
  63. class Helmet: public Armor{
  64. public:
  65. Helmet(){
  66. MeleePr(25);
  67. RangePr(15);
  68. }
  69. ~Helmet() = default;
  70. };
  71. class Sword: public Weapon{
  72. public:
  73. Sword(){
  74. MeleeDmg(30);
  75. RangeDmg(0);
  76.  
  77. }
  78. ~ Sword() = default;
  79.  
  80. };
  81. class Orc: public Race{
  82. public:
  83. Orc(){
  84. SetHp(150);
  85. }
  86. ~Orc() = default;
  87. };
  88.  
  89. template <class W, class A, class R>
  90. class Unit{
  91. private:
  92. static_assert(!is_base_of<W,Weapon>::value, "Weapons!");
  93. static_assert(!is_base_of<A,Armor>::value, "Armor!");
  94. static_assert(!is_base_of<R,Race>::value, "Race!");
  95. double max_hp, rng_dmg, rng_prt, ml_dmg, ml_prt;
  96. W weap;
  97. A arm;
  98. R race;
  99. public:
  100.  
  101. Unit(){
  102. max_hp = race.GetHp();
  103. rng_dmg = weap.GetRngDmg();
  104. ml_dmg = weap.GetMlDmg();
  105. rng_prt = arm.GetRngArm();
  106. ml_prt = arm.GetMlArm();
  107. }
  108.  
  109. double GetHp(){
  110. return max_hp;
  111. }
  112. double GetRangeAttack(){
  113. return rng_dmg;
  114. }
  115. double GetMeleeAttack(){
  116. return ml_dmg;
  117.  
  118. }
  119. double GetRangeProtect(){
  120. return rng_prt;
  121. }
  122. double GetMeleeProtect(){
  123. return ml_prt;
  124.  
  125. }
  126. void Attack(Unit& enemy){
  127.  
  128. max_hp = max_hp - max(enemy.GetMeleeAttack() - ml_prt, double(0))
  129. - max(enemy.GetRangeAttack() - rng_prt, double(0));
  130.  
  131. }
  132. };
  133.  
  134.  
  135. int main() {
  136.  
  137. Unit<Sword, Helmet, Orc> unit1, unit2;
  138.  
  139. std::cout << unit1.GetHp() << std::endl;
  140. unit1.Attack(unit2);
  141. cout << unit1.GetHp() << endl;
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement