Advertisement
vovanhik_24

#45

Feb 24th, 2024 (edited)
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.94 KB | None | 0 0
  1.     internal class Program
  2.     {
  3.         public static void Main()
  4.         {
  5.             Arena arena = new Arena();
  6.             arena.Work();
  7.         }
  8.     }
  9.  
  10.     class Arena
  11.     {
  12.         private Fighter _firstFighter;
  13.         private Fighter _secondFighter;
  14.  
  15.         public void Work()
  16.         {
  17.             bool isUnselected = true;
  18.  
  19.             Fighter[] fighters =
  20.             {
  21.                 new Warrior("Воин", 100, 20),
  22.                 new Rogue("Мошенник", 80, 15),
  23.                 new Healer("Целитель", 90, 10),
  24.                 new Archer("Лучник", 110, 25),
  25.                 new Knight("Рыцарь", 110, 25)
  26.             };
  27.  
  28.             while (isUnselected)
  29.             {
  30.                 Console.WriteLine("__________Все бойцы__________");
  31.                 for (int i = 0; i < fighters.Length; i++)
  32.                 {
  33.                     Console.WriteLine($"№{i + 1} | { fighters[i].Name}");
  34.                 }
  35.  
  36.                 Console.WriteLine("\nВыберите первого бойца (1-5): ");
  37.                 int firstIndexFighter = int.Parse(Console.ReadLine()) - 1;
  38.  
  39.                 Console.WriteLine("Выберите второго бойца (1-5): ");
  40.                 int secondIndexFighter = int.Parse(Console.ReadLine()) - 1;
  41.  
  42.                 if (firstIndexFighter == secondIndexFighter)
  43.                 {
  44.                     Console.WriteLine("Вы выбрали одинаковых бойцов! Повторите выбор.");
  45.                 }
  46.                 else if (firstIndexFighter < 0 || firstIndexFighter >= fighters.Length || secondIndexFighter < 0 || secondIndexFighter >= fighters.Length)
  47.                 {
  48.                     Console.WriteLine("Некорректный выбор!");
  49.                 }
  50.                 else
  51.                 {
  52.                     _firstFighter = fighters[firstIndexFighter];
  53.                     _secondFighter = fighters[secondIndexFighter];
  54.  
  55.                     isUnselected = false;
  56.                     Console.Clear();
  57.                 }
  58.             }
  59.  
  60.             while (_firstFighter.Health > 0 && _secondFighter.Health > 0)
  61.             {
  62.                 Console.WriteLine($"\nПервый боец аттакует противника на {_firstFighter.AttackDamage}!");
  63.                 _firstFighter.Attack(_secondFighter);
  64.  
  65.                 Console.WriteLine($"Второй боец аттакует противника на {_secondFighter.AttackDamage}!\n");
  66.                 _secondFighter.Attack(_firstFighter);
  67.  
  68.                 Console.WriteLine($"№1 | {_firstFighter.Name} | Здоровье: {_firstFighter.Health}");
  69.                 Console.WriteLine($"№2 | {_secondFighter.Name} | Здоровье: {_secondFighter.Health}");
  70.                 Console.WriteLine();
  71.             }
  72.         }
  73.     }
  74.  
  75.     abstract class Fighter
  76.     {
  77.         protected const int WarriorSpecialAbilityParameter = 2;
  78.         protected const int RogueSpecialAbiliryParameter = 3;
  79.         protected const int HealerSpecialAbiliryParameter = 5;
  80.         protected const int ArcherSpecialAbiliryParameter = 15;
  81.         protected const int KnightSpecialAbiliryParameter = 100;
  82.  
  83.         public string Name { get; protected set; }
  84.         public int Health { get; protected set; }
  85.         public int AttackDamage { get; protected set; }
  86.  
  87.         public int TreatYourself(int treat)
  88.         {
  89.             return Health += treat;
  90.         }
  91.  
  92.         public int TakeDamage(int damage)
  93.         {
  94.             return Health -= damage;
  95.         }
  96.  
  97.         public virtual void Attack(Fighter enemy)
  98.         {
  99.             enemy.TakeDamage(AttackDamage);
  100.         }
  101.  
  102.         public abstract int UseSpecialAbility(int specialAbility);
  103.     }
  104.  
  105.     class Warrior : Fighter
  106.     {
  107.         public Warrior(string name, int health, int attackDamage)
  108.         {
  109.             Name = name;
  110.             Health = health;
  111.             AttackDamage = attackDamage;
  112.         }
  113.  
  114.         public override int UseSpecialAbility(int specialAbility)
  115.         {
  116.             return TakeDamage(AttackDamage * specialAbility);
  117.         }
  118.  
  119.         public override void Attack(Fighter enemy)
  120.         {
  121.             enemy.TakeDamage(AttackDamage);
  122.             enemy.UseSpecialAbility(WarriorSpecialAbilityParameter);
  123.         }
  124.     }
  125.  
  126.     class Rogue : Fighter
  127.     {
  128.         public Rogue(string name, int health, int attackDamage)
  129.         {
  130.             Name = name;
  131.             Health = health;
  132.             AttackDamage = attackDamage;
  133.         }
  134.  
  135.         public override int UseSpecialAbility(int specialAbility)
  136.         {
  137.             return TakeDamage(AttackDamage % specialAbility);
  138.         }
  139.  
  140.         public override void Attack(Fighter enemy)
  141.         {
  142.             enemy.TakeDamage(AttackDamage);
  143.             enemy.UseSpecialAbility(RogueSpecialAbiliryParameter);
  144.         }
  145.     }
  146.  
  147.     class Healer : Fighter
  148.     {
  149.         public Healer(string name, int health, int attackDamage)
  150.         {
  151.             Name = name;
  152.             Health = health;
  153.             AttackDamage = attackDamage;
  154.         }
  155.  
  156.         public override int UseSpecialAbility(int specialAbility)
  157.         {
  158.             return TreatYourself(specialAbility);
  159.         }
  160.  
  161.         public override void Attack(Fighter enemy)
  162.         {
  163.             enemy.TakeDamage(AttackDamage);
  164.             Health = UseSpecialAbility(HealerSpecialAbiliryParameter);
  165.         }
  166.     }
  167.  
  168.     class Archer : Fighter
  169.     {
  170.         private Random _randomArrowsCount = new Random();
  171.         private int _minArrowsCount = 1;
  172.         private int _maxArrowsCount = 10;
  173.  
  174.         public Archer(string name, int health, int attackDamage)
  175.         {
  176.             Name = name;
  177.             Health = health;
  178.             AttackDamage = attackDamage;
  179.         }
  180.  
  181.         public override int UseSpecialAbility(int specialAbility)
  182.         {
  183.             return TakeDamage(AttackDamage / specialAbility * _randomArrowsCount.Next(_minArrowsCount, _maxArrowsCount + 1));
  184.         }
  185.  
  186.         public override void Attack(Fighter enemy)
  187.         {
  188.             enemy.TakeDamage(AttackDamage);
  189.             enemy.UseSpecialAbility(ArcherSpecialAbiliryParameter);
  190.         }
  191.     }
  192.  
  193.     class Knight : Fighter
  194.     {
  195.         private Random _randomArmorCount = new Random();
  196.         private int _minArmorCount = 5;
  197.         private int _maxArmorCount = 20;
  198.  
  199.         public Knight(string name, int health, int attackDamage)
  200.         {
  201.             Name = name;
  202.             Health = health;
  203.             AttackDamage = attackDamage;
  204.         }
  205.  
  206.         public override int UseSpecialAbility(int specialAbility)
  207.         {
  208.             return TreatYourself(Health * _randomArmorCount.Next(_minArmorCount, _maxArmorCount + 1) % specialAbility);
  209.         }
  210.  
  211.         public override void Attack(Fighter enemy)
  212.         {
  213.             enemy.TakeDamage(AttackDamage);
  214.             Health = UseSpecialAbility(ArcherSpecialAbiliryParameter);
  215.         }
  216.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement