IGRODELOFF

Task47

Aug 1st, 2022
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Task47._1
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             BattleField battleField = new BattleField();
  14.             Console.WriteLine("Добро пожаловать бог войн, дабы угодить вам срана организует битву взводов, для начала нажмите Enter или любую кнопку.");
  15.             Console.ReadKey();
  16.  
  17.             battleField.Battle();
  18.             battleField.ShowResult();
  19.         }
  20.     }
  21.     class BattleField
  22.     {
  23.         private Random _random = new Random();
  24.         private List<Soldier> _platoonFist = new List<Soldier>();
  25.         private List<Soldier> _platoonSecond = new List<Soldier>();
  26.         private Soldier _soldierFirst;
  27.         private Soldier _soldierSecond;
  28.  
  29.         public BattleField()
  30.         {
  31.             int minCountSoldierPlatoon = 15;
  32.             int maxCountSoldierPlatoon = 60;
  33.             int countSoldierPlatoon = _random.Next(minCountSoldierPlatoon, maxCountSoldierPlatoon);
  34.  
  35.             CreatePlatoon(countSoldierPlatoon, _platoonFist);
  36.             CreatePlatoon(countSoldierPlatoon, _platoonSecond);
  37.         }
  38.  
  39.         public void Battle()
  40.         {
  41.             string fisrPlatoon =
  42.                 "Взвод первой страны: ";
  43.             string secondPlatoon =
  44.                 "Взвод второй страны: ";
  45.  
  46.             while (_platoonFist.Count > 0 && _platoonSecond.Count > 0)
  47.             {
  48.                 _soldierFirst = _platoonFist[_random.Next(0, _platoonFist.Count)];
  49.                 _soldierSecond = _platoonSecond[_random.Next(0, _platoonSecond.Count)];
  50.  
  51.                 Console.WriteLine(fisrPlatoon);
  52.                 ShowSoldierPlatoon(_platoonFist);
  53.                 Console.WriteLine(secondPlatoon);
  54.                 ShowSoldierPlatoon(_platoonSecond);
  55.  
  56.                 _soldierFirst.TakeDamege(_soldierSecond.Damage);
  57.                 _soldierSecond.TakeDamege(_soldierFirst.Damage);
  58.  
  59.                 _soldierFirst.UseSpecialCriticalDamage();
  60.                 _soldierSecond.UseSpecialCriticalDamage();
  61.  
  62.                 RemoveSoldier();
  63.  
  64.                 System.Threading.Thread.Sleep(100);
  65.                 Console.Clear();
  66.             }
  67.         }
  68.  
  69.         public void ShowResult()
  70.         {
  71.             string tie =
  72.                 "Ничья, оба взвода погибли.";
  73.             string winFirst =
  74.                 "Взвод 1-ой страны победил!";
  75.             string winSecond =
  76.                 "Взвод 2-ой страны победил!";
  77.  
  78.             if (_platoonFist.Count > 0 && _platoonSecond.Count > 0)
  79.             {
  80.                 Console.WriteLine(tie);
  81.             }
  82.             else if (_platoonFist.Count <= 0)
  83.             {
  84.                 Console.WriteLine(winFirst);
  85.             }
  86.             else if (_platoonSecond.Count <= 0)
  87.             {
  88.                 Console.WriteLine(winSecond);
  89.             }
  90.         }
  91.  
  92.         private void RemoveSoldier()
  93.         {
  94.             if (_soldierFirst.Health <= 0)
  95.             {
  96.                 _platoonFist.Remove(_soldierFirst);
  97.             }
  98.             if (_soldierSecond.Health <= 0)
  99.             {
  100.                 _platoonSecond.Remove(_soldierSecond);
  101.             }
  102.         }
  103.  
  104.         private void ShowSoldierPlatoon(List<Soldier> soldiers)
  105.         {
  106.             foreach (var soldier in soldiers)
  107.             {
  108.                 Console.WriteLine(
  109.                     $"=============================\n" +
  110.                     $"{soldier.Name}\n" +
  111.                     $"Здоровье: {soldier.Health}\n" +
  112.                     $"Урон: {soldier.Damage}\n" +
  113.                     $"Броня: {soldier.Armor}\n" +
  114.                     $"=============================");
  115.             }
  116.         }
  117.  
  118.         private void CreatePlatoon(int numberSoldiers, List<Soldier> soldiers)
  119.         {
  120.             for (int i = 0; i < numberSoldiers; i++)
  121.             {
  122.                 soldiers.Add(GetSoldier());
  123.             }
  124.         }
  125.  
  126.         private Soldier GetSoldier()
  127.         {
  128.             int minNumberClassSoldier = 0;
  129.             int maxNumberClassSoldier = 4;
  130.             int soldierClass = _random.Next(minNumberClassSoldier, maxNumberClassSoldier);
  131.  
  132.             if (soldierClass == 0)
  133.             {
  134.                 return new Stormtrooper("Штурмовик", 150, 80, 25);
  135.             }
  136.             else if (soldierClass == 1)
  137.             {
  138.                 return new MachineGunner("Пулемётчик", 400, 35, 80);
  139.             }
  140.             else if (soldierClass == 2)
  141.             {
  142.                 return new Medic("Медик", 100, 50, 20);
  143.             }
  144.             else if (soldierClass == 3)
  145.             {
  146.                 return new Enginier("Инженер", 125, 45,15);
  147.             }
  148.             else
  149.             {
  150.                 return new Sniper("Снайпер", 60, 120,10);
  151.             }
  152.         }
  153.     }
  154.  
  155.     class Soldier
  156.     {
  157.         public string Name { get; protected set; }
  158.         public float Health { get; protected set; }
  159.         public float Damage { get; protected set; }
  160.         public float Armor { get; protected set; }
  161.  
  162.         public Soldier(string name, float health, float damage, float armor)
  163.         {
  164.             Name = name;
  165.             Health = health;
  166.             Damage = damage;
  167.             Armor = armor;
  168.         }
  169.  
  170.         public void TakeDamege(float damageSoldier)
  171.         {
  172.             Health -= damageSoldier * (100 - Armor) / 100;
  173.             Console.WriteLine($"{Name} нанёс {damageSoldier} урона");
  174.         }
  175.  
  176.         public void UseSpecialCriticalDamage()
  177.         {
  178.             Random random = new Random();
  179.             int rangeMaxNumbersChanceUsingAbility = 2543;
  180.             int chanceUseSpecialCriticalDamage = random.Next(rangeMaxNumbersChanceUsingAbility);
  181.             int chanceCriticalDamage = 250;
  182.  
  183.             if (chanceUseSpecialCriticalDamage < chanceCriticalDamage)
  184.             {
  185.                 UseCriticalDamage();
  186.             }
  187.         }
  188.  
  189.         protected virtual void UseCriticalDamage() { }
  190.     }
  191.  
  192.     class Stormtrooper : Soldier
  193.     {
  194.         private float _damageBuff = 0.15f;
  195.         private float _armorBuff = 0.25f;
  196.  
  197.         public Stormtrooper(string name, float health, float damage, float armor) : base(name, health, damage, armor) { }
  198.  
  199.         protected override void UseCriticalDamage()
  200.         {
  201.             Console.WriteLine($"{Name} яросно кричит и идёт в атаку");
  202.             Damage += Damage * _damageBuff;
  203.             Armor += Armor * _armorBuff;
  204.         }
  205.     }
  206.  
  207.     class MachineGunner : Soldier
  208.     {
  209.         private float _damageBuff = 0.5f;
  210.  
  211.         public MachineGunner(string name, float health, float damage, float armor) : base(name, health, damage, armor) { }
  212.  
  213.         protected override void UseCriticalDamage()
  214.         {
  215.             Console.WriteLine($"{Name} достаёт второй пулемёт и начинает стрелять из двух рук.");
  216.             Damage += Damage * _damageBuff;
  217.         }
  218.     }
  219.  
  220.     class Medic : Soldier
  221.     {
  222.         private float _damageBuff = 0.05f;
  223.         private float _healthBuff = 0.4f;
  224.  
  225.         public Medic(string name, float health, float damage, float armor) : base(name, health, damage, armor) { }
  226.  
  227.         protected override void UseCriticalDamage()
  228.         {
  229.             Console.WriteLine($"{Name} вколол укол адреналина и повысил на время здоровье и немного урона");
  230.             Damage += Damage * _damageBuff;
  231.             Health += Health * _healthBuff;
  232.         }
  233.     }
  234.  
  235.     class Enginier : Soldier
  236.     {
  237.         private float _armorBuff = 0.5f;
  238.  
  239.         public Enginier(string name, float health, float damage, float armor) : base(name, health, damage, armor) { }
  240.  
  241.         protected override void UseCriticalDamage()
  242.         {
  243.             Console.WriteLine($"{Name} включает активную защиту своего костюма");
  244.             Armor += Armor * _armorBuff;
  245.         }
  246.     }
  247.  
  248.     class Sniper : Soldier
  249.     {
  250.         private float _damageBuff = 0.25f;
  251.         private float _armorBuff = 1;
  252.  
  253.         public Sniper(string name, float health, float damage, float armor) : base(name, health, damage, armor) { }
  254.  
  255.         protected override void UseCriticalDamage()
  256.         {
  257.             Console.WriteLine($"{Name} сливается с местностью вдыхает и стреляет бронибойным патроном");
  258.             Damage += Damage * _damageBuff;
  259.             Armor += Armor * _armorBuff;
  260.         }
  261.     }
  262. }
Add Comment
Please, Sign In to add comment