Advertisement
holllowknight

Война

Apr 30th, 2023 (edited)
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.37 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace War
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             War war = new War();
  11.             war.FormPlatoons();
  12.             war.Fight();
  13.             war.ShowWinner();
  14.         }
  15.     }
  16.  
  17.     class War
  18.     {
  19.         private int _firstPlatoonsSize = 3;
  20.         private int _secondPlatoonsSize = 3;
  21.         private Platoon _firstPlatoon;
  22.         private Platoon _secondPlatoon;
  23.  
  24.         public void FormPlatoons()
  25.         {
  26.             _firstPlatoon = new Platoon(_firstPlatoonsSize, "Великобритания");
  27.             _secondPlatoon = new Platoon(_secondPlatoonsSize, "США");
  28.         }
  29.  
  30.         public void Fight()
  31.         {
  32.             while(_firstPlatoon.IsCombatReady && _secondPlatoon.IsCombatReady)
  33.             {
  34.                 Strike();
  35.                 RemoveDied();
  36.             }
  37.         }
  38.  
  39.         public void Strike()
  40.         {
  41.             Console.WriteLine("");
  42.             _firstPlatoon.Attack(_secondPlatoon);
  43.             _secondPlatoon.Attack(_firstPlatoon);
  44.         }
  45.  
  46.         public void RemoveDied()
  47.         {
  48.             _firstPlatoon.RemoveDied();
  49.             _secondPlatoon.RemoveDied();
  50.         }
  51.  
  52.         public void ShowWinner()
  53.         {
  54.             if (_firstPlatoon.IsCombatReady)
  55.                 Console.WriteLine($"Победил взвод страны {_firstPlatoon.Country}");
  56.             else if (_secondPlatoon.IsCombatReady)
  57.                 Console.WriteLine($"Победил взвод страны {_secondPlatoon.Country}");
  58.             else
  59.                 Console.WriteLine("Все умерли");
  60.         }
  61.     }
  62.  
  63.     class Soldier
  64.     {
  65.         private static Random _random;
  66.         private int _featureMultiplyer = 2;
  67.         private int _minDamage = 30;
  68.         private int _maxDamage = 50;
  69.         private int _minHealth = 100;
  70.         private int _maxHealth = 120;
  71.         private int _minArmor = 10;
  72.         private int _maxArmor = 15;
  73.  
  74.         static Soldier()
  75.         {
  76.             _random = new Random();
  77.         }
  78.  
  79.         public Soldier()
  80.         {
  81.             int variants = Enum.GetValues(typeof(Feature)).Length;
  82.             Feature feature = (Feature)_random.Next(variants);
  83.             Damage = _random.Next(_minDamage, _maxDamage);
  84.             Health = _random.Next(_minHealth, _maxHealth);
  85.             Armor = _random.Next(_minArmor, _maxArmor);
  86.  
  87.             switch(feature)
  88.             {
  89.                 case Feature.StrengthenedDamage:
  90.                     Damage *= _featureMultiplyer;
  91.                     break;
  92.  
  93.                 case Feature.StrengthenedHealth:
  94.                     Health *= _featureMultiplyer;
  95.                     break;
  96.  
  97.                 case Feature.StrengthenedArmor:
  98.                     Armor *= _featureMultiplyer;
  99.                     break;
  100.             }
  101.         }
  102.  
  103.         enum Feature
  104.         {
  105.             StrengthenedDamage = 0,
  106.             StrengthenedHealth = 1,
  107.             StrengthenedArmor = 2
  108.         }
  109.  
  110.         public int Damage { get; private set; }
  111.         public int Health { get; private set; }
  112.         public int Armor { get; private set; }
  113.         public bool IsAlive => Health > 0;
  114.  
  115.         public void TakeDamage(int residualDamage)
  116.         {
  117.             Health -= residualDamage;
  118.         }
  119.  
  120.         public void Attack(Soldier soldier)
  121.         {
  122.             int residualDamage = Damage < soldier.Armor ? 0 : Damage - soldier.Armor;
  123.             soldier.TakeDamage(residualDamage);
  124.         }
  125.  
  126.         public string ShowStats()
  127.         {
  128.             return string.Format($"Атака: {Damage}, Здоровье: {Health}, Броня: {Armor}");
  129.         }
  130.     }
  131.  
  132.     class Platoon
  133.     {
  134.         private Soldier _fightingSoldier;
  135.         private Stack<Soldier> _soldiers = new Stack<Soldier>();
  136.  
  137.         public Platoon(int soldiersCount, string country)
  138.         {
  139.             Country = country;
  140.  
  141.             for (int i = 0; i < soldiersCount; i++)
  142.                 _soldiers.Push(new Soldier());
  143.         }
  144.  
  145.         public string Country { get; private set; }
  146.         public bool IsCombatReady => _soldiers.Count != 0;
  147.  
  148.         public void RemoveDied()
  149.         {
  150.             if (_fightingSoldier.IsAlive == false)
  151.             {
  152.                 ConsoleColor defaultColor = Console.ForegroundColor;
  153.                 Console.ForegroundColor = ConsoleColor.Red;
  154.                 Console.WriteLine($"Взвод страны {Country} потерял бойца");
  155.                 Console.ForegroundColor = defaultColor;
  156.                 _fightingSoldier = null;
  157.                 _soldiers.Pop();
  158.             }
  159.         }
  160.  
  161.         public Soldier GetSoldier()
  162.         {
  163.             if (_fightingSoldier == null)
  164.             {
  165.                 _fightingSoldier = _soldiers.Peek();
  166.                 Console.WriteLine($"В сражение вступает боец страны {Country} с характеристиками: {_fightingSoldier.ShowStats()}");
  167.             }
  168.  
  169.             return _fightingSoldier;
  170.         }
  171.  
  172.         public void Attack(Platoon enemyPlatoon)
  173.         {
  174.             Soldier enemy = enemyPlatoon.GetSoldier();
  175.             GetSoldier().Attack(enemy);
  176.             Console.WriteLine($"Боец страны {enemyPlatoon.Country} получает ранение. Здоровье {enemy.Health}");
  177.         }
  178.     }
  179. }
  180.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement