Torgach

War2.0

Apr 23rd, 2021
927
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.00 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 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.  
  25.         public Battle()
  26.         {
  27.             Raund = 1;
  28.             rand = new Random();
  29.             squadLeft = new Squad();
  30.             squadRight = new Squad();
  31.         }
  32.  
  33.         public void RunMenu()
  34.         {
  35.             bool isRun = true;
  36.             while (isRun)
  37.             {
  38.                 Console.WriteLine("[1] - Создать отряд\n[2] - Запустить бой\n[3] - Выход");
  39.  
  40.                 switch (Console.ReadLine())
  41.                 {
  42.                     case "1":
  43.                         squadLeft.CreateSquad();
  44.                         squadRight.CreateSquad();
  45.                         break;
  46.                     case "2":
  47.                         StartGame(squadLeft, squadRight);
  48.                         break;
  49.                     case "3":
  50.                         isRun = false;
  51.                         break;
  52.                 }
  53.             }
  54.         }
  55.  
  56.         private void StartGame(Squad leftSquad, Squad rightSquad)
  57.         {
  58.             if(IsGameReady() == false)
  59.             {
  60.                 return;
  61.             }
  62.  
  63.             Soldier leftSoldier;
  64.             Soldier rightSoldier;
  65.  
  66.             while (IsGameOver() == false)
  67.             {
  68.                 leftSoldier = leftSquad.GetSoldier();
  69.                 rightSoldier = rightSquad.GetSoldier();
  70.  
  71.                 Console.WriteLine("Западный отряд атакует!");
  72.                 leftSoldier.GetScript(rightSoldier, rightSquad, leftSquad);
  73.  
  74.                 Console.WriteLine("Восточный отряд атакует!");
  75.                 rightSoldier.GetScript(leftSoldier, leftSquad, rightSquad);
  76.  
  77.                 IsRaundEnd(leftSquad, rightSquad);
  78.                 Console.ReadKey();
  79.                 Console.Clear();
  80.             }
  81.         }
  82.  
  83.         private bool IsRaundEnd(Squad leftSquad, Squad rightSquad)
  84.         {
  85.             if (leftSquad.IsSoldiersUnready() && rightSquad.IsSoldiersUnready())
  86.             {
  87.                 Console.WriteLine("Обе стороны готовятся к следующей атаке");
  88.                 Console.WriteLine("Раунд: " + Raund++);
  89.  
  90.                 squadLeft.Refresh();
  91.                 squadRight.Refresh();
  92.                 return true;
  93.             }
  94.             return false;
  95.         }
  96.  
  97.         private bool IsGameOver()
  98.         {
  99.             if(squadLeft.GetHealthSquad() <= 0)
  100.             {
  101.                 Console.WriteLine("Западный отряд умер!");
  102.                 return true;
  103.             }
  104.             else if(squadRight.GetHealthSquad() <= 0)
  105.             {
  106.                 Console.WriteLine("Восточный отряд умер!");
  107.                 return true;
  108.             }
  109.  
  110.             Console.WriteLine("Raund: " + Raund);
  111.             Console.WriteLine("\nСилы западного отряда: " + squadLeft.GetHealthSquad());
  112.             Console.WriteLine("Силы восточного отряда: " + squadRight.GetHealthSquad() + "\n");
  113.             return false;
  114.         }
  115.  
  116.         private bool IsGameReady()
  117.         {
  118.             if (squadLeft.GetSquadSize() < 0)
  119.             {
  120.                 Console.WriteLine("Левый отряд не создан!");
  121.                 return false;
  122.             }
  123.             else if(squadRight.GetSquadSize() < 0)
  124.             {
  125.                 Console.WriteLine("Правый отряд не создан!");
  126.                 return false;
  127.             }
  128.             return true;
  129.         }
  130.     }
  131.  
  132.     class Squad
  133.     {
  134.         private List<Soldier> _soldiers;
  135.         private static Random rand = new Random();
  136.  
  137.         public Squad()
  138.         {
  139.             _soldiers = new List<Soldier>(20);
  140.         }
  141.  
  142.         public void CreateSquad()
  143.         {
  144.             Console.WriteLine("Создаем отряд...");
  145.  
  146.             Medic medic = new Medic();
  147.             CreateSoldier(5, medic);
  148.  
  149.             Sniper sniper = new Sniper();
  150.             CreateSoldier(5, sniper);
  151.  
  152.             Infantryman infantryman = new Infantryman();
  153.             CreateSoldier(10, infantryman);
  154.  
  155.             for (int counter = 0; counter < _soldiers.Count; counter++)
  156.             {
  157.                 int swapIndex = rand.Next(_soldiers.Count);
  158.                 Soldier soldier = _soldiers[swapIndex];
  159.                 _soldiers[swapIndex] = _soldiers[counter];
  160.                 _soldiers[counter] = soldier;
  161.             }
  162.         }
  163.  
  164.         private void CreateSoldier(int soldiersCapasity, Soldier soldier)
  165.         {
  166.             for (int counter = 0; counter < soldiersCapasity; counter++)
  167.             {
  168.                 var type = soldier;
  169.  
  170.                 if (type as Medic != null)
  171.                 {
  172.                     type = new Medic(counter, rand.Next(50, 100), rand.Next(25, 50));
  173.                     _soldiers.Add(type);
  174.                 }
  175.                 else if (type as Sniper != null)
  176.                 {
  177.                     type = new Sniper(counter, rand.Next(50, 70), rand.Next(85, 105));
  178.                     _soldiers.Add(type);
  179.                 }
  180.                 else if (type as Infantryman != null)
  181.                 {
  182.                     type = new Infantryman(counter, rand.Next(70, 100), rand.Next(50, 80));
  183.                     _soldiers.Add(type);
  184.                 }
  185.             }
  186.         }
  187.  
  188.         public int GetHealthSquad()
  189.         {
  190.             int healthSquad = 0;
  191.  
  192.             foreach (var soldier in _soldiers)
  193.             {
  194.                 healthSquad += soldier.Health;
  195.             }
  196.             return healthSquad;
  197.         }
  198.  
  199.         public int GetSquadSize()
  200.         {
  201.             return _soldiers.Count;
  202.         }
  203.        
  204.         public Soldier GetSoldier()
  205.         {
  206.             for (int i = 0; i < _soldiers.Count; i++)
  207.             {
  208.                 Soldier soldier = GetSoldiers()[rand.Next(0, _soldiers.Count)];
  209.                 if (soldier.IsGunReady || soldier.AbillityCounter == 0)
  210.                 {
  211.                     return soldier;
  212.                 }
  213.             }
  214.             return _soldiers[rand.Next(0, _soldiers.Count)];
  215.         }
  216.  
  217.         public bool IsSoldiersUnready()
  218.         {
  219.             foreach (var soldier in _soldiers)
  220.             {
  221.                 if (soldier.AbillityCounter == 0 && soldier.IsGunReady)
  222.                 {
  223.                     return false;
  224.                 }
  225.             }
  226.             return true;
  227.         }
  228.  
  229.         public void Refresh()
  230.         {
  231.             foreach (var soldier in _soldiers)
  232.             {
  233.                 soldier.ReloadGun();
  234.                 soldier.CooldownAbility();
  235.             }
  236.         }
  237.  
  238.         public List<Soldier> GetSoldiers()
  239.         {
  240.             return _soldiers;
  241.         }
  242.     }
  243.  
  244.     abstract class Soldier
  245.     {
  246.         protected Random random = new Random();
  247.  
  248.         public bool IsTargetEnemy { get; protected set; }
  249.         public bool IsGunReady { get; protected set; }
  250.         public bool IsAvoid { get; protected set; }
  251.         public int Number { get; protected set; }
  252.         public int MaxHealth { get; protected set; }
  253.         public int Health { get; protected set; }
  254.         public int Damage { get; protected set; }
  255.         public int AbillityCounter { get; protected set; }
  256.         public string Specialty { get; protected set; }
  257.  
  258.         public abstract void UseAbillity(Squad squad);
  259.  
  260.         public void GetScript(Soldier enemy, Squad enemySquad, Squad allySquad)
  261.         {
  262.             if(IsGunReady && enemy.IsAvoid == false)
  263.             {
  264.                 Attack(enemy, enemySquad);
  265.             }
  266.             else if (AbillityCounter == 0)
  267.             {
  268.                 if(IsTargetEnemy)
  269.                 {
  270.                     UseAbillity(enemySquad);
  271.                 }
  272.                 else if(IsTargetEnemy == false)
  273.                 {
  274.                     UseAbillity(allySquad);
  275.                 }
  276.             }
  277.         }
  278.  
  279.         public virtual void Heal(Soldier ally)
  280.         {
  281.             if(Health < MaxHealth)
  282.             {
  283.                 ally.Health += random.Next(10, 30);
  284.             }
  285.         }
  286.  
  287.         public virtual void AttackArea(Squad enemySquad)
  288.         {
  289.             for (int i = 0; i < random.Next(1,5); i++)
  290.             {
  291.                 enemySquad.GetSoldier().Health -= Damage;
  292.             }
  293.         }
  294.  
  295.         public void Attack(Soldier enemy, Squad enemySquad)
  296.         {
  297.             IsGunReady = false;
  298.             enemy.Health -= Damage;
  299.  
  300.             if(enemy.Health <= 0)
  301.             {
  302.                 enemySquad.GetSoldiers().Remove(enemy);
  303.             }
  304.         }
  305.  
  306.         public void ReloadGun()
  307.         {
  308.             IsGunReady = true;
  309.         }
  310.  
  311.         public void CooldownAbility()
  312.         {
  313.             if(AbillityCounter > 0)
  314.                 --AbillityCounter;
  315.         }
  316.     }
  317.  
  318.     class Medic : Soldier
  319.     {
  320.         public Medic()
  321.         {
  322.             Specialty = "Медик";
  323.             IsTargetEnemy = false;
  324.             IsGunReady = false;
  325.             IsAvoid = false;
  326.             Number = 0;
  327.             MaxHealth = 0;
  328.             Health = 0;
  329.             Damage = 0;
  330.             AbillityCounter = 0;
  331.         }
  332.  
  333.         public Medic(int number, int health, int damage)
  334.         {
  335.             Specialty = "Медик";
  336.             IsTargetEnemy = false;
  337.             IsGunReady = false;
  338.             IsAvoid = false;
  339.             Number = number;
  340.             MaxHealth = health;
  341.             Health = health;
  342.             Damage = damage;
  343.             AbillityCounter = 0;
  344.         }
  345.  
  346.         public override void UseAbillity(Squad allySquad)
  347.         {
  348.  
  349.             for (int i = 0; i < random.Next(1,6); i++)
  350.             {
  351.                 Heal(allySquad.GetSoldier());
  352.             }
  353.             AbillityCounter = 5;
  354.         }
  355.     }
  356.  
  357.     class Infantryman : Soldier
  358.     {
  359.         public Infantryman()
  360.         {
  361.             Specialty = "Штурмовик";
  362.             IsTargetEnemy = false;
  363.             IsGunReady = false;
  364.             IsAvoid = false;
  365.             Number = 0;
  366.             MaxHealth = 0;
  367.             Health = 0;
  368.             Damage = 0;
  369.             AbillityCounter = 0;
  370.         }
  371.  
  372.         public Infantryman(int number, int health, int damage)
  373.         {
  374.             Specialty = "Штурмовик";
  375.             IsTargetEnemy = true;
  376.             IsGunReady = true;
  377.             IsAvoid = false;
  378.             Number = number;
  379.             MaxHealth = health;
  380.             Health = health;
  381.             Damage = damage;
  382.             AbillityCounter = 0;
  383.             random = new Random();
  384.         }
  385.  
  386.         public override void UseAbillity(Squad enemySquad)
  387.         {
  388.             AttackArea(enemySquad);
  389.             AbillityCounter = 4;
  390.         }
  391.     }
  392.  
  393.     class Sniper : Soldier
  394.     {
  395.         public Sniper()
  396.         {
  397.             Specialty = "Снайпер";
  398.             IsTargetEnemy = false;
  399.             IsGunReady = false;
  400.             IsAvoid = false;
  401.             Number = 0;
  402.             MaxHealth = 0;
  403.             Health = 0;
  404.             Damage = 0;
  405.             AbillityCounter = 0;
  406.         }
  407.  
  408.         public Sniper(int number, int health, int damage)
  409.         {
  410.             Specialty = "Снайпер";
  411.             IsTargetEnemy = true;
  412.             IsGunReady = true;
  413.             IsAvoid = false;
  414.             Number = number;
  415.             MaxHealth = health;
  416.             Health = health;
  417.             Damage = damage;
  418.             AbillityCounter = 3;
  419.         }
  420.  
  421.         public override void UseAbillity(Squad squad)
  422.         {
  423.             IsAvoid = true;
  424.             AbillityCounter = 3;
  425.         }
  426.     }
  427. }
  428.  
Advertisement
Add Comment
Please, Sign In to add comment