Torgach

war

Apr 18th, 2021 (edited)
735
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace war
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Battle battle = new Battle();
  14.             battle.RunMenu();
  15.         }
  16.     }
  17.  
  18.     class Battle
  19.     {
  20.         private int Raund { get; set; }
  21.         private Squad squadLeft;
  22.         private Squad squadRight;
  23.         private static Random rand;
  24.         public Battle()
  25.         {
  26.             Raund = 1;
  27.             rand = new Random();
  28.             squadLeft = new Squad();
  29.             squadRight = new Squad();
  30.         }
  31.  
  32.         public void RunMenu()
  33.         {
  34.             bool isRun = true;
  35.             while (isRun)
  36.             {
  37.                 Console.WriteLine("[1] - Создать отряд\n[2] - Запустить бой\n[3] - Выход");
  38.  
  39.                 switch (Console.ReadLine())
  40.                 {
  41.                     case "1":
  42.                         squadLeft.CreateSquad();
  43.                         squadRight.CreateSquad();
  44.                         break;
  45.                     case "2":
  46.                         Play(squadLeft, squadRight);
  47.                         break;
  48.                     case "3":
  49.                         isRun = false;
  50.                         break;
  51.                 }
  52.             }
  53.         }
  54.  
  55.         public void Play(Squad squadLeft, Squad squadRight)
  56.         {
  57.             if(IsGameReady() == false)
  58.             {
  59.                 return;
  60.             }
  61.  
  62.             Soldier leftSoldier;
  63.             Soldier rightSoldier;
  64.  
  65.             while (IsGameOver() == false)
  66.             {
  67.                 leftSoldier = squadLeft.GetSoldier();
  68.                 rightSoldier = squadRight.GetSoldier();
  69.  
  70.                 Console.WriteLine("Западный отряд атакует!");
  71.                 leftSoldier.Attack(rightSoldier);
  72.  
  73.                 Console.WriteLine("Восточный отряд атакует!");
  74.                 rightSoldier.Attack(leftSoldier);
  75.  
  76.                 IsRaundEnd(leftSoldier, rightSoldier);
  77.             }
  78.         }
  79.  
  80.         private bool IsRaundEnd(Soldier leftSoldier, Soldier rightSoldier)
  81.         {
  82.             if(leftSoldier.IsGunReady == false && rightSoldier.IsGunReady == false)
  83.             {
  84.                 Console.WriteLine("Обе стороны готовятся к следующей атаке");
  85.                 Console.WriteLine("Раунд: " + Raund++);
  86.  
  87.                 squadLeft.PrepareGuns();
  88.                 squadRight.PrepareGuns();
  89.  
  90.                 return true;
  91.             }
  92.             return false;
  93.  
  94.         }
  95.  
  96.         public bool IsGameOver()
  97.         {
  98.             if(squadLeft.GetHealthSquad() <= 0)
  99.             {
  100.                 Console.WriteLine("Западный отряд умер!");
  101.                 return true;
  102.             }
  103.             else if(squadRight.GetHealthSquad() <= 0)
  104.             {
  105.                 Console.WriteLine("Восточный отряд умер!");
  106.                 return true;
  107.             }
  108.  
  109.             Console.WriteLine("\nСилы западного отряда: " + squadLeft.GetHealthSquad());
  110.             Console.WriteLine("Силы восточного отряда: " + squadRight.GetHealthSquad() + "\n");
  111.             return false;
  112.         }
  113.  
  114.         public bool IsGameReady()
  115.         {
  116.             if (squadLeft.GetSquadSize() < 0)
  117.             {
  118.                 Console.WriteLine("Левый отряд не создан!");
  119.                 return false;
  120.             }
  121.             else if(squadRight.GetSquadSize() < 0)
  122.             {
  123.                 Console.WriteLine("Правый отряд не создан!");
  124.                 return false;
  125.             }
  126.             return true;
  127.         }
  128.  
  129.     }
  130.  
  131.     class Squad
  132.     {
  133.         private List<Soldier> _soldiers;
  134.         private static Random rand = new Random();
  135.  
  136.         public Squad()
  137.         {
  138.             _soldiers = new List<Soldier>();
  139.         }
  140.  
  141.         public void CreateSquad()
  142.         {
  143.             Console.WriteLine("Создаем отряд...");
  144.  
  145.             for (int i = 0; i < 20; i++)
  146.             {
  147.                 int number = rand.Next(0, 2);
  148.  
  149.                 if (number == 0)
  150.                 {
  151.                     Medic medic = new Medic(i, rand.Next(50, 100), rand.Next(25, 50));
  152.                     _soldiers.Add(medic);
  153.                 }
  154.                 else if (number == 1)
  155.                 {
  156.                     Infantryman infantryman = new Infantryman(i, rand.Next(70, 100), rand.Next(50, 80));
  157.                     _soldiers.Add(infantryman);
  158.                 }
  159.                 else if (number == 2)
  160.                 {
  161.                     Sniper sniper = new Sniper(i, rand.Next(50, 70), rand.Next(85, 105));
  162.                     _soldiers.Add(sniper);
  163.                 }
  164.             }
  165.         }
  166.  
  167.         public int GetHealthSquad()
  168.         {
  169.             int healthSquad = 0;
  170.  
  171.             foreach (var soldier in _soldiers)
  172.             {
  173.                 healthSquad += soldier.Health;
  174.             }
  175.  
  176.             return healthSquad;
  177.         }
  178.  
  179.         public int GetSquadSize()
  180.         {
  181.             return _soldiers.Count;
  182.         }
  183.        
  184.         public Soldier GetSoldier()
  185.         {
  186.             int soldierIndex;
  187.  
  188.             for (int i = 0; i < GetSquadSize(); i++)
  189.             {
  190.                 soldierIndex = rand.Next(0, _soldiers.Count);
  191.                 if (_soldiers[soldierIndex].IsGunReady || _soldiers[soldierIndex].AbillityCounter == 0)
  192.                 {
  193.                     return _soldiers[soldierIndex];
  194.                 }
  195.             }
  196.             return _soldiers[rand.Next(0, GetSquadSize())];
  197.         }
  198.  
  199.         public void PrepareGuns()
  200.         {
  201.             foreach (var soldier in _soldiers)
  202.             {
  203.                 soldier.ReloadGun();
  204.             }
  205.         }
  206.  
  207.     }
  208.  
  209.     abstract class Soldier
  210.     {
  211.         public bool IsGunReady { get; protected set; }
  212.         public bool IsAvoid { get; protected set; }
  213.         public int Number { get; protected set; }
  214.         public int Health { get; protected set; }
  215.         public int Damage { get; protected set; }
  216.         public int AbillityCounter { get; protected set; }
  217.  
  218.         public abstract void UseAbillity(Soldier enemy);
  219.  
  220.         public void Attack(Soldier enemy)
  221.         {
  222.             if (IsGunReady == false)
  223.             {
  224.                 return;
  225.             }
  226.  
  227.             if (enemy.IsAvoid)
  228.             {
  229.                 return;
  230.             }
  231.  
  232.             if (AbillityCounter == 0)
  233.             {
  234.                 UseAbillity(enemy);
  235.                 return;
  236.             }
  237.  
  238.             IsGunReady = false;
  239.             enemy.Health -= Damage;
  240.         }
  241.  
  242.         public void Heal(Soldier ally)
  243.         {
  244.             Random random = new Random();
  245.             ally.Health += random.Next(10,30);
  246.         }
  247.  
  248.         public void ReloadGun()
  249.         {
  250.             IsGunReady = true;
  251.         }
  252.  
  253.         public void CooldownAbility()
  254.         {
  255.             --AbillityCounter;
  256.         }
  257.  
  258.     }
  259.  
  260.     class Medic : Soldier
  261.     {
  262.         public Medic(int number, int health, int damage)
  263.         {
  264.             IsGunReady = false;
  265.             IsAvoid = false;
  266.             Number = number;
  267.             Health = health;
  268.             Damage = damage;
  269.             AbillityCounter = 0;
  270.         }
  271.  
  272.         public override void UseAbillity(Soldier ally)
  273.         {
  274.             Heal(ally);
  275.             AbillityCounter = 5;
  276.         }
  277.     }
  278.  
  279.     class Infantryman : Soldier
  280.     {
  281.         public Infantryman(int number, int health, int damage)
  282.         {
  283.             IsGunReady = true;
  284.             IsAvoid = false;
  285.             Number = number;
  286.             Health = health;
  287.             Damage = damage;
  288.             AbillityCounter = 0;
  289.         }
  290.  
  291.         public override void UseAbillity(Soldier enemy)
  292.         {
  293.            
  294.             AbillityCounter = 2;
  295.         }
  296.  
  297.     }
  298.  
  299.     class Sniper : Soldier
  300.     {
  301.         public Sniper(int number, int health, int damage)
  302.         {
  303.             IsGunReady = true;
  304.             IsAvoid = false;
  305.             Number = number;
  306.             Health = health;
  307.             Damage = damage;
  308.             AbillityCounter = 3;
  309.         }
  310.  
  311.         public override void UseAbillity(Soldier enemy)
  312.         {
  313.             IsAvoid = true;
  314.             AbillityCounter = 3;
  315.         }
  316.  
  317.     }
  318.  
  319. }
  320.  
RAW Paste Data