Advertisement
GigaOrts

Untitled

Aug 23rd, 2023
820
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.36 KB | None | 0 0
  1. using System;
  2.  
  3. internal class Program
  4. {
  5.     static void Main(string[] args)
  6.     {
  7.         Arena arena = new Arena();
  8.  
  9.         arena.Work();
  10.     }
  11. }
  12.  
  13. abstract class Fighter
  14. {
  15.     private static Random _random = new Random();
  16.  
  17.     protected string Name;
  18.     protected int Damage;
  19.     protected float Armor;
  20.     private int _minDamage = 100;
  21.     private int _maxDamage = 200;
  22.     private float _damageResistance;
  23.  
  24.     public Fighter(string name, int health, int armor, int damage)
  25.     {
  26.         Name = name;
  27.         Health = health;
  28.         Damage = damage;
  29.         Armor = armor;
  30.     }
  31.  
  32.     public float Health { get; protected set; }
  33.  
  34.     public string NameFighter
  35.     {
  36.         get { return Name; }
  37.     }
  38.  
  39.     public void ShowStats()
  40.     {
  41.         Console.WriteLine($"Боец - {Name}, здоровье: {Health}, наносимый урон: {_minDamage} - {_maxDamage}, броня {Armor}.");
  42.     }
  43.  
  44.     public virtual void ShowCurrentStats()
  45.     {
  46.         Console.WriteLine($"{Name} здоровье: {Health} урон: {Damage}");
  47.     }
  48.  
  49.     public virtual void Attack(Fighter enemy)
  50.     {
  51.         Damage = _random.Next(_minDamage, _maxDamage);
  52.         enemy.TakeDamage(Damage);
  53.     }
  54.  
  55.     private void TakeDamage(float damage)
  56.     {
  57.         _damageResistance = Armor / 100;
  58.         float incomingDamageResistanceMultiplier = 1 - _damageResistance;
  59.         Health -= damage * incomingDamageResistanceMultiplier;
  60.     }
  61. }
  62.  
  63. class Knight : Fighter
  64. {
  65.     private int _mana = 0;
  66.  
  67.     public Knight(string name, int health, int armor, int damage, int mana) : base(name, health, armor, damage)
  68.     {
  69.         _mana = mana;
  70.     }
  71.  
  72.     public override void Attack(Fighter enemy)
  73.     {
  74.         if (_mana >= 3)
  75.         {
  76.             UseUltimate();
  77.             _mana -= 3;
  78.         }
  79.         else
  80.         {
  81.             base.Attack(enemy);
  82.             _mana++;
  83.         }
  84.     }
  85.  
  86.     public override void ShowCurrentStats()
  87.     {
  88.         Console.WriteLine($"{Name} здоровье: {Health} мана: {_mana} урон: {Damage}");
  89.     }
  90.  
  91.     private void UseUltimate()
  92.     {
  93.         Health += 250;
  94.     }
  95. }
  96.  
  97. class Barbarian : Fighter
  98. {
  99.     private int _countAttack;
  100.  
  101.     public Barbarian(string name, int health, int armor, int damage, int countAttack) : base(name, health, armor, damage)
  102.     {
  103.         _countAttack = countAttack;
  104.     }
  105.  
  106.     public override void Attack(Fighter enemy)
  107.     {
  108.         if (_countAttack >= 4)
  109.         {
  110.             UseUltimate(enemy);
  111.             _countAttack -= 4;
  112.         }
  113.         else
  114.         {
  115.             base.Attack(enemy);
  116.             _countAttack++;
  117.         }
  118.     }
  119.  
  120.     public override void ShowCurrentStats()
  121.     {
  122.         Console.WriteLine($"{Name} здоровье: {Health} счетчик атаки: {_countAttack} урон: {Damage}");
  123.     }
  124.  
  125.     private void UseUltimate(Fighter enemy)
  126.     {
  127.         base.Attack(enemy);
  128.         base.Attack(enemy);
  129.         base.Attack(enemy);
  130.     }
  131. }
  132.  
  133. class Paladin : Fighter
  134. {
  135.     private int _mana = 0;
  136.     private int _durationAttackUltimate = -1;
  137.  
  138.     public Paladin(string name, int health, int armor, int damage, int mana) : base(name, health, armor, damage)
  139.     {
  140.         _mana = mana;
  141.     }
  142.  
  143.     public override void Attack(Fighter enemy)
  144.     {
  145.         if (_mana >= 5)
  146.         {
  147.             AttackUltimate();
  148.             _durationAttackUltimate += 4;
  149.             base.Attack(enemy);
  150.             _mana -= 5;
  151.         }
  152.         else if (_durationAttackUltimate == 4)
  153.         {
  154.             base.Attack(enemy);
  155.             _mana++;
  156.             _durationAttackUltimate--;
  157.         }
  158.         else if (_durationAttackUltimate == 3)
  159.         {
  160.             base.Attack(enemy);
  161.             _mana++;
  162.             _durationAttackUltimate--;
  163.         }
  164.         else if (_durationAttackUltimate == 2)
  165.         {
  166.             base.Attack(enemy);
  167.             _mana++;
  168.             _durationAttackUltimate--;
  169.         }
  170.         else if (_durationAttackUltimate == 1)
  171.         {
  172.             base.Attack(enemy);
  173.             _mana++;
  174.             _durationAttackUltimate--;
  175.         }
  176.         else if (_durationAttackUltimate == 0)
  177.         {
  178.             base.Attack(enemy);
  179.             _mana++;
  180.             _durationAttackUltimate--;
  181.             Armor -= 75;
  182.         }
  183.         else if (_durationAttackUltimate <= -1)
  184.         {
  185.             base.Attack(enemy);
  186.             _mana++;
  187.         }
  188.     }
  189.  
  190.     public override void ShowCurrentStats()
  191.     {
  192.         Console.WriteLine($"{Name} здоровье: {Health} мана: {_mana} броня {Armor}");
  193.     }
  194.  
  195.     private void AttackUltimate()
  196.     {
  197.         Armor += 75;
  198.     }
  199. }
  200.  
  201. class Amazon : Fighter
  202. {
  203.     public Amazon(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
  204.  
  205.     public override void Attack(Fighter enemy)
  206.     {
  207.         if (Damage >= 150)
  208.         {
  209.             base.Attack(enemy);
  210.             AttackUltimate();
  211.         }
  212.         else
  213.         {
  214.             base.Attack(enemy);
  215.         }
  216.     }
  217.  
  218.     public override void ShowCurrentStats()
  219.     {
  220.         Console.WriteLine($"{Name} здоровье: {Health} урон: {Damage}");
  221.     }
  222.  
  223.     private void AttackUltimate()
  224.     {
  225.         float recoveryHealth = 0.5f;
  226.         int maxPercent = 100;
  227.  
  228.         Health += Damage / maxPercent * Armor * recoveryHealth;
  229.     }
  230. }
  231.  
  232. class SkeletonKing : Fighter
  233. {
  234.     public SkeletonKing(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
  235.  
  236.     public override void Attack(Fighter enemy)
  237.     {
  238.         if (Health <= 120)
  239.         {
  240.             AttackUltimate();
  241.             base.Attack(enemy);
  242.         }
  243.         else
  244.         {
  245.             base.Attack(enemy);
  246.         }
  247.     }
  248.  
  249.     public override void ShowCurrentStats()
  250.     {
  251.         Console.WriteLine($"{Name} здоровье: {Health}");
  252.     }
  253.  
  254.     private void AttackUltimate()
  255.     {
  256.         Health += 85;
  257.     }
  258. }
  259.  
  260. class Arena
  261. {
  262.     public void Work()
  263.     {
  264.         int lowerBoundHealth = 0;
  265.  
  266.         Fighter[] fightersFirst =
  267.         {
  268.                 new Knight("Рыцарь", 1500, 15, 100, 0),
  269.                 new Barbarian("Варвар", 1500, 10, 100, 0),
  270.                 new Paladin("Паладин", 1500, 10, 100, 0),
  271.                 new Amazon("Амазонка", 1500, 10, 100),
  272.                 new SkeletonKing("Скелетон", 1500, 10, 100),
  273.             };
  274.  
  275.         for (int i = 0; i < fightersFirst.Length; i++)
  276.         {
  277.             Console.Write(i + 1 + " ");
  278.             fightersFirst[i].ShowStats();
  279.         }
  280.  
  281.         Console.WriteLine("\n** " + new string('-', 25) + " **");
  282.         Console.Write("\nВыберите номер первого бойца: ");
  283.         int fighterNumber = Convert.ToInt32(Console.ReadLine()) - 1;
  284.         Fighter firstFighter = fightersFirst[fighterNumber];
  285.  
  286.         Fighter[] fightersSecond =
  287.         {
  288.                 new Knight("Рыцарь", 1500, 15, 100, 0),
  289.                 new Barbarian("Варвар", 1500, 10, 100, 0),
  290.                 new Paladin("Паладин", 1500, 10, 100, 0),
  291.                 new Amazon("Амазонка", 1500, 10, 100),
  292.                 new SkeletonKing("Скелетон", 1500, 10, 100),
  293.             };
  294.  
  295.         Console.Write("\nВыберите номер второго бойца: ");
  296.         fighterNumber = Convert.ToInt32(Console.ReadLine()) - 1;
  297.         Fighter secondFighter = fightersSecond[fighterNumber];
  298.         Console.WriteLine("\n** " + new string('-', 25) + " **");
  299.  
  300.         while (firstFighter.Health > 0 && secondFighter.Health > 0)
  301.         {
  302.             firstFighter.Attack(secondFighter);
  303.             secondFighter.Attack(firstFighter);
  304.             firstFighter.ShowCurrentStats();
  305.             secondFighter.ShowCurrentStats();
  306.             Console.ReadKey();
  307.         }
  308.  
  309.         if (firstFighter.Health <= lowerBoundHealth && secondFighter.Health <= lowerBoundHealth)
  310.         {
  311.             Console.WriteLine("Ничья. Оба воина пали.");
  312.         }
  313.         else if (firstFighter.Health <= lowerBoundHealth)
  314.         {
  315.             Console.WriteLine($"{firstFighter.NameFighter} пал смертью храбрых!");
  316.         }
  317.         else if (secondFighter. Health <= lowerBoundHealth)
  318.         {
  319.             Console.WriteLine($"{secondFighter.NameFighter} повержен!");
  320.         }
  321.     }
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement