Advertisement
MaoChessy

Task - 35

Nov 16th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace C_sharp_Light
  5. {
  6.     class Program
  7.     {
  8.         public static void Main()
  9.         {
  10.             new Battlefield(new Platoon("Взвод 1"), new Platoon("Взвод 2")).Work();
  11.         }
  12.     }
  13.  
  14.     public static class RandomStatic
  15.     {
  16.         static private Random _rand = new Random();
  17.         static public int GetNext(int min, int max)
  18.         {
  19.             return _rand.Next(min, max);
  20.         }
  21.     }
  22.     public static class Messager
  23.     {
  24.         static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay)
  25.         {
  26.             ConsoleColor defaultColor = Console.ForegroundColor;
  27.             Console.ForegroundColor = color;
  28.             Console.WriteLine(message);
  29.             Console.ForegroundColor = defaultColor;
  30.             if (delay)
  31.                 Console.ReadKey();
  32.         }
  33.     }
  34.  
  35.     class Battlefield
  36.     {
  37.         private Platoon _side1;
  38.         private Platoon _side2;
  39.         public Battlefield(Platoon platoon1, Platoon platoon2)
  40.         {
  41.             _side1 = platoon1;
  42.             _side2 = platoon2;
  43.         }
  44.         public void Work()
  45.         {
  46.             while (_side1.CheckCombatСapability() && _side2.CheckCombatСapability())
  47.             {
  48.                 Console.Clear();
  49.  
  50.                 _side1.Attack(_side2);
  51.                 if (!(_side1.CheckCombatСapability() && _side2.CheckCombatСapability()))
  52.                     break;
  53.                 _side2.Attack(_side1);
  54.  
  55.                 _side1.ShowInfo();
  56.                 _side2.ShowInfo();
  57.  
  58.                 Console.ReadKey();
  59.             }
  60.             Console.Clear();
  61.  
  62.             if (!_side1.CheckCombatСapability() && _side2.CheckCombatСapability())
  63.             {
  64.                 Messager.ShowMessageWithColor($"{_side2.Name} - Выиграл", ConsoleColor.Green, false);
  65.                 Messager.ShowMessageWithColor($"{_side1.Name} - Проиграл", ConsoleColor.Red, false);
  66.             }
  67.             else if (_side1.CheckCombatСapability() && !_side2.CheckCombatСapability())
  68.             {
  69.                 Messager.ShowMessageWithColor($"{_side1.Name} - Выиграл", ConsoleColor.Green, false);
  70.                 Messager.ShowMessageWithColor($"{_side2.Name} - Проиграл", ConsoleColor.Red, false);
  71.             }
  72.  
  73.             _side1.ShowInfo();
  74.             _side2.ShowInfo();
  75.             Console.ReadKey();
  76.         }
  77.     }
  78.     class Platoon
  79.     {
  80.         private List<Soldier> _soldiers = new List<Soldier>();
  81.         private List<Soldier> _deadSoldiers = new List<Soldier>();
  82.         public string Name { get; private set; }
  83.         public Platoon(string name)
  84.         {
  85.             Name = name;
  86.             for (int i = 0; i < 20; i++)
  87.             {
  88.                 int chance = RandomStatic.GetNext(0, 101);
  89.                 if (chance <= 35)
  90.                     _soldiers.Add(new Guner(i, Name));
  91.                 else if (chance <= 65)
  92.                     _soldiers.Add(new Autoguner(i, Name));
  93.                 else if (chance <= 85)
  94.                     _soldiers.Add(new Sniper(i, Name));
  95.                 else
  96.                     _soldiers.Add(new RPG(i, Name));
  97.             }
  98.         }
  99.         public Soldier GetRandomSoldier()
  100.         {
  101.             if (_soldiers.Count > 0)
  102.                 return _soldiers[RandomStatic.GetNext(0, _soldiers.Count)];
  103.             else
  104.                 return null;
  105.         }
  106.         public void ShowInfo()
  107.         {
  108.             ConsoleColor colorOfHp;
  109.             ConsoleColor defaultColor = ConsoleColor.White;
  110.             Console.WriteLine("\nВзвод: " + Name);
  111.             for (int i = 0; i < _soldiers.Count; i++)
  112.             {
  113.                 char symbolSoldier = _soldiers[i].GetCharInfo(out colorOfHp);
  114.                 Console.ForegroundColor = colorOfHp;
  115.                 Console.Write($"{_soldiers[i].Id}:{symbolSoldier} | ");
  116.                 Console.ForegroundColor = defaultColor;
  117.             }
  118.             for (int i = 0; i < _deadSoldiers.Count; i++)
  119.             {
  120.                 char symbolSoldier = _deadSoldiers[i].GetCharInfo(out colorOfHp);
  121.                 Console.ForegroundColor = colorOfHp;
  122.                 Console.Write($"{_deadSoldiers[i].Id}:{symbolSoldier} | ");
  123.                 Console.ForegroundColor = defaultColor;
  124.             }
  125.             Console.WriteLine();
  126.         }
  127.         public void Attack(Platoon enemyPlatoon)
  128.         {
  129.             MoveDeadBody();
  130.             GetRandomSoldier()?.Atack(enemyPlatoon);
  131.         }
  132.         public bool CheckCombatСapability()
  133.         {
  134.             return _soldiers.Count > 0;
  135.         }
  136.         private void MoveDeadBody()
  137.         {
  138.             for (int i = _soldiers.Count-1; i >= 0; i--)
  139.             {
  140.                 if (_soldiers[i].Hp <= 0)
  141.                 {
  142.                     _deadSoldiers.Add(_soldiers[i]);
  143.                     _soldiers.RemoveAt(i);
  144.                 }
  145.             }
  146.         }
  147.     }
  148.     abstract class Soldier
  149.     {
  150.         public int Hp { get; protected set; }
  151.         public int Armor { get; protected set; }
  152.         public int Id { get; private set; }
  153.         public bool Stealth { get; protected set; } = false;
  154.         public char Symbol { get; protected set; }
  155.         protected string NameMyPlatoon { get; private set; }
  156.         public Soldier(int id, string namePlatoon)
  157.         {
  158.             Id = id;
  159.             NameMyPlatoon = namePlatoon;
  160.             Hp = 100;
  161.         }
  162.         abstract public void Atack(Platoon enemyPlatoon);
  163.         public void TakeDamage(int damage)
  164.         {
  165.             Hp -= GetRealTakeDamage(damage);
  166.         }
  167.         public int GetRealTakeDamage(int damage)
  168.         {
  169.             int realDamage = damage - Armor * 5;
  170.             if (Stealth)
  171.                 realDamage = (int)(realDamage * 0.75f);
  172.             if (realDamage < 0)
  173.                 realDamage = 1;
  174.             return realDamage;
  175.         }
  176.         public char GetCharInfo(out ConsoleColor color)
  177.         {
  178.             if (Hp <= 0)
  179.                 color = ConsoleColor.DarkMagenta;
  180.             else if (Hp < 25)
  181.                 color = ConsoleColor.Red;
  182.             else if (Hp < 60)
  183.                 color = ConsoleColor.Yellow;
  184.             else
  185.                 color = ConsoleColor.Green;
  186.             return Symbol;
  187.         }
  188.         protected void ShowResultAttack(string typeSoldier, int damage, Soldier enemy)
  189.         {
  190.             Console.WriteLine($"{typeSoldier} {Id}-{Symbol} от {NameMyPlatoon} Аттаковал - {enemy.Id}-{enemy.Symbol} на {enemy.GetRealTakeDamage(damage)}");
  191.         }
  192.     }
  193.     class RPG : Soldier
  194.     {
  195.         public RPG(int id, string name) : base(id, name)
  196.         {
  197.             Armor = 1;
  198.             Stealth = false;
  199.             Symbol = 'R';
  200.         }
  201.         public override void Atack(Platoon enemyPlatoon)
  202.         {
  203.             int amountTarget = RandomStatic.GetNext(3, 7);
  204.             int damage = RandomStatic.GetNext(50, 80);
  205.             for (int i = 0; i < amountTarget; i++)
  206.             {
  207.                 Soldier enemy = enemyPlatoon.GetRandomSoldier();
  208.                 if (enemy != null)
  209.                 {
  210.                     enemy.TakeDamage(damage);
  211.                     ShowResultAttack("Ракетчик", damage, enemy);
  212.                 }
  213.             }
  214.         }
  215.     }
  216.     class Autoguner : Soldier
  217.     {
  218.         public Autoguner(int id, string name) : base(id, name)
  219.         {
  220.             Armor = 2;    
  221.             Stealth = false;
  222.             Symbol = 'A';
  223.         }
  224.         public override void Atack(Platoon enemyPlatoon)
  225.         {
  226.             int amountTarger = RandomStatic.GetNext(0, 5);
  227.             for (int i = 0; i < amountTarger; i++)
  228.             {
  229.                 Soldier enemy = enemyPlatoon.GetRandomSoldier();
  230.                 int damage = RandomStatic.GetNext(40, 45);
  231.                 if (enemy != null)
  232.                 {
  233.                     enemy.TakeDamage(damage);
  234.                     ShowResultAttack("Автоматчик", damage, enemy);
  235.                 }
  236.             }
  237.         }
  238.     }
  239.     class Guner : Soldier
  240.     {
  241.         public Guner(int id, string name) : base(id, name)
  242.         {
  243.             Armor = 3;
  244.             Stealth = false;
  245.             Symbol = 'G';
  246.         }
  247.         public override void Atack(Platoon enemyPlatoon)
  248.         {
  249.             Soldier enemy = enemyPlatoon.GetRandomSoldier();
  250.             int damage = RandomStatic.GetNext(50, 55);
  251.             if (enemy != null)
  252.             {
  253.                 enemy.TakeDamage(damage);
  254.                 ShowResultAttack("Стрелок", damage, enemy);
  255.             }
  256.         }
  257.     }
  258.     class Sniper : Soldier
  259.     {
  260.         public Sniper(int id, string name) : base(id, name)
  261.         {
  262.             Armor = 0;
  263.             Stealth = true;
  264.             Symbol = 'S';
  265.         }
  266.         public override void Atack(Platoon enemyPlatoon)
  267.         {
  268.             Soldier enemy = enemyPlatoon.GetRandomSoldier();
  269.             int damage = 150;
  270.             if (enemy != null)
  271.             {
  272.                 enemy.TakeDamage(damage);
  273.                 ShowResultAttack("Снайпер", damage, enemy);
  274.             }
  275.         }
  276.     }
  277.  
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement