Advertisement
Fle2x

6.8.2

Jul 12th, 2021
727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace _6._8
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Squad leftSquad = new Squad();
  11.             Squad rightSquad = new Squad();
  12.             War war = new War(leftSquad, rightSquad);
  13.  
  14.             Console.WriteLine("Сколько солдат будет в 1 стране?");
  15.             int leftSoldiersCount = Convert.ToInt32(Console.ReadLine());
  16.  
  17.             leftSquad.CreateSquad(leftSoldiersCount);
  18.             leftSquad.ShowSquad();
  19.  
  20.             Console.WriteLine("\nСколько солдат будет во 2 стране?");
  21.             int rightSoldiersCount = Convert.ToInt32(Console.ReadLine());
  22.             rightSquad.CreateSquad(rightSoldiersCount);
  23.             rightSquad.ShowSquad();
  24.  
  25.             war.Shoot();
  26.             war.ShowWinner();
  27.         }
  28.     }
  29.  
  30.     class War
  31.     {
  32.         private readonly Squad _firstSquad;
  33.         private readonly Squad _secondSquad;
  34.  
  35.         public War(Squad firstSquad, Squad secondSquad)
  36.         {
  37.             _firstSquad = firstSquad;
  38.             _secondSquad = secondSquad;
  39.         }
  40.  
  41.         public void Shoot()
  42.         {
  43.             bool endOfWar = false;
  44.             while (!endOfWar)
  45.             {
  46.                 AttackLeftSquad();
  47.                 AttackRightSquad(out endOfWar);
  48.             }
  49.         }
  50.  
  51.         public void AttackLeftSquad()
  52.         {
  53.             if (_firstSquad.CountSoldiers > 0 && _secondSquad.CountSoldiers > 0)
  54.             {
  55.                 Console.WriteLine("Атакует 1 страна");
  56.                 _firstSquad.Attack(_secondSquad, _firstSquad);
  57.             }
  58.         }
  59.  
  60.         public bool AttackRightSquad(out bool endOfWar)
  61.         {
  62.             if (_firstSquad.CountSoldiers > 0 && _secondSquad.CountSoldiers > 0)
  63.             {
  64.                 Console.WriteLine("Атакует 2 страна");
  65.                 _secondSquad.Attack(_firstSquad, _secondSquad);
  66.                 return endOfWar = false;
  67.             }
  68.             else
  69.             {
  70.                 return endOfWar = true;
  71.             }
  72.         }
  73.  
  74.         public void ShowWinner()
  75.         {
  76.             if (_firstSquad.CountSoldiers > 0)
  77.             {
  78.                 Console.WriteLine($"Победила 1 страна.");
  79.             }
  80.             else
  81.             {
  82.                 Console.WriteLine($"Победила 2 страна.");
  83.             }
  84.         }
  85.     }
  86.  
  87.     class Squad
  88.     {
  89.         private List<Soldier> _soldiers = new List<Soldier>();
  90.         public int CountSoldiers => _soldiers.Count;
  91.        
  92.  
  93.         public Soldier GetSoldiers(int index)
  94.         {
  95.             return _soldiers[index];
  96.         }
  97.  
  98.         public void CreateSquad(int count)
  99.         {
  100.             while (count > _soldiers.Count)
  101.             {
  102.                 Console.WriteLine("Выберите бойца в ваш отряд.\n1 - Штурмовик\n2 - Медик\n3 - Разведчик\n4 - Танкист\n5 - Огнеметчик");
  103.                 int userInput = Convert.ToInt32(Console.ReadLine());
  104.  
  105.                 switch (userInput)
  106.                 {
  107.                     case 1:
  108.                         _soldiers.Add(new StormTrooper());
  109.                         break;
  110.                     case 2:
  111.                         _soldiers.Add(new Support());
  112.                         break;
  113.                     case 3:
  114.                         _soldiers.Add(new Scout());
  115.                         break;
  116.                     case 4:
  117.                         _soldiers.Add(new Tankman());
  118.                         break;
  119.                     case 5:
  120.                         _soldiers.Add(new Flamethrowerman());
  121.                         break;
  122.                     default:
  123.                         _soldiers.Add(new Soldier());
  124.                         break;
  125.                 }
  126.             }
  127.             Console.Clear();
  128.         }
  129.  
  130.         public void ShowSquad()
  131.         {
  132.             Console.WriteLine("Ваш отряд:");
  133.             foreach (var soldier in _soldiers)
  134.             {
  135.                 soldier.ShowStats();
  136.             }
  137.         }
  138.  
  139.         public void Attack(Squad defenderSquad,Squad attackerSquad)
  140.         {
  141.             Random random = new Random();
  142.             int defender = random.Next(0, defenderSquad.CountSoldiers);
  143.             int attacker = random.Next(0, attackerSquad.CountSoldiers);
  144.  
  145.             defenderSquad.GetSoldiers(defender).TakeDamage(attackerSquad.GetSoldiers(attacker).Damage);
  146.             Console.WriteLine($"{defenderSquad.GetSoldiers(defender).Name} получают урон {attackerSquad.GetSoldiers(attacker).Damage} от {attackerSquad.GetSoldiers(attacker).Name}");
  147.             defenderSquad.GetSoldiers(defender).ShowStats();
  148.  
  149.             if (defenderSquad.GetSoldiers(defender).Health <= 0)
  150.             {
  151.                 Console.WriteLine($"{defenderSquad.GetSoldiers(defender).Name} погиб.");
  152.                 defenderSquad._soldiers.RemoveAt(defender);
  153.             }
  154.             Console.ReadKey();
  155.         }
  156.     }
  157.  
  158.     class Soldier
  159.     {
  160.         public string Name { get; private set; }
  161.         public int Health { get; private set; }
  162.         public int Damage { get; private set; }
  163.  
  164.         public Soldier(string name = "Soldier", int health = 100, int damage = 10)
  165.         {
  166.             Name = name;
  167.             Health = health;
  168.             Damage = damage;
  169.         }
  170.  
  171.         public void TakeDamage(int damage)
  172.         {
  173.             Health -= damage;
  174.         }
  175.  
  176.         public void ShowStats()
  177.         {
  178.             Console.WriteLine($"{Name}, HP - {Health}, damage - {Damage}");
  179.         }
  180.     }
  181.  
  182.     class StormTrooper : Soldier
  183.     {
  184.         public StormTrooper() : base("Штурмовик", 100, 30) { }
  185.     }
  186.  
  187.     class Support : Soldier
  188.     {
  189.         public Support() : base("Медик", 150, 15) { }
  190.     }
  191.  
  192.     class Scout : Soldier
  193.     {
  194.         public Scout() : base("Разведчик", 80, 60) { }
  195.     }
  196.  
  197.     class Tankman : Soldier
  198.     {
  199.         public Tankman() : base("Танкист", 200, 50) { }
  200.     }
  201.  
  202.     class Flamethrowerman : Soldier
  203.     {
  204.         public Flamethrowerman() : base("Огнеметчик", 140, 40) { }
  205.     }
  206. }
  207.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement