Advertisement
Rodunskiy

Untitled

Aug 15th, 2023
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         Battlefield battlefield = new Battlefield();
  9.  
  10.         battlefield.Battle();
  11.     }
  12. }
  13.  
  14. class Battlefield
  15. {
  16.     private Squad _squadOne;
  17.     private Squad _squadTwo;
  18.  
  19.     private Fighter _fighterOne;
  20.     private Fighter _fighterTwo;
  21.  
  22.     public Battlefield()
  23.     {
  24.         _squadOne = new Squad();
  25.         _squadTwo = new Squad();
  26.     }
  27.  
  28.     public void Battle()
  29.     {
  30.         while (_squadOne.IsReadyBattle() && _squadTwo.IsReadyBattle())
  31.         {
  32.             _fighterOne = _squadOne.GiveFighter();
  33.             _fighterTwo = _squadTwo.GiveFighter();
  34.  
  35.             while (_fighterOne.isDead == false && _fighterTwo.isDead == false)
  36.             {
  37.                 _fighterOne.ShowStats();
  38.                 _fighterTwo.ShowStats();
  39.                 _fighterOne.Attack(_fighterTwo);
  40.                 _fighterTwo.Attack(_fighterOne);
  41.  
  42.                 Console.ReadKey();
  43.                 Console.Clear();
  44.             }
  45.  
  46.             if (_fighterOne.isDead == false)
  47.             {
  48.                 _squadOne.ReturnFighter(_fighterOne);
  49.             }
  50.             else if (_fighterTwo.isDead == false)
  51.             {
  52.                 _squadTwo.ReturnFighter(_fighterTwo);
  53.             }
  54.         }
  55.  
  56.         ShowFinalBattleResult();
  57.     }
  58.  
  59.     public void ShowFinalBattleResult()
  60.     {
  61.         if(_squadOne.IsDestroyed && _squadTwo.IsDestroyed)
  62.         {
  63.             Console.WriteLine("Оба отряда уничтожены!");
  64.         }
  65.         else if (_squadOne.IsDestroyed)
  66.         {
  67.             Console.WriteLine("В этой битве побеждает первый отряд!");
  68.             _squadOne.ShowInfo();
  69.         }
  70.         else if (_squadTwo.IsDestroyed)
  71.         {
  72.             Console.WriteLine("В этой битве побеждает второй отряд!");
  73.             _squadTwo.ShowInfo();
  74.         }
  75.     }
  76.  
  77.     public void ShowBattleResult()
  78.     {
  79.         Console.SetCursorPosition(0, 7);
  80.         if (_fighterOne.isDead && _fighterTwo.isDead)
  81.         {
  82.             Console.WriteLine("Оба бойца погибли.");
  83.         }
  84.         else if (_fighterOne.isDead)
  85.         {
  86.             Console.WriteLine($"{_fighterTwo.Name} побеждает.");
  87.         }
  88.         else if (_fighterTwo.isDead)
  89.         {
  90.             Console.WriteLine($"{_fighterOne.Name} побеждает.");
  91.         }
  92.     }
  93. }
  94.  
  95. class Squad
  96. {
  97.     private List<Fighter> _fighters = new List<Fighter>();
  98.  
  99.     public Squad()
  100.     {
  101.         _fighters.Add(new Infantry("Пехотинец", 50, 1500, 5, 100, 200, true));
  102.         _fighters.Add(new Marine("Морпех", 70, 1500, 5, 100, 200, true));
  103.         _fighters.Add(new Sniper("Снайпер", 30, 1500, 5, 100, 300, true));
  104.         _fighters.Add(new MachineGunner("Пулемётчик", 50, 1500, 10, 100, 200, true));
  105.     }
  106.  
  107.     public bool IsDestroyed => _fighters != null;
  108.  
  109.     public bool IsReadyBattle()
  110.     {
  111.         if(_fighters.Count != 0)
  112.         {
  113.             return true;
  114.         }
  115.  
  116.         return false;
  117.     }
  118.  
  119.     public void ReturnFighter(Fighter fighter)
  120.     {
  121.         _fighters.Add(fighter);
  122.     }
  123.  
  124.     public Fighter GiveFighter()
  125.     {
  126.         int randomFighterIndex = Utils.GetRandomNumber(_fighters.Count);
  127.  
  128.         Fighter fighter = _fighters[randomFighterIndex];
  129.         _fighters.Remove(fighter);
  130.  
  131.         return fighter;
  132.     }
  133.  
  134.     public void ShowInfo()
  135.     {
  136.         foreach (var fighter in _fighters)
  137.         {
  138.             fighter.ShowStats();
  139.         }
  140.     }
  141. }
  142.  
  143. class Fighter
  144. {
  145.     public bool isDead => Health <= 0;
  146.  
  147.     protected bool IsRangedCombat;
  148.  
  149.     public Fighter(string name, int armor, int health,int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)  
  150.     {
  151.         Name = name;
  152.         Armor = armor;
  153.         Health = health;
  154.         AmmoQuantity = ammoQuantity;
  155.         DamageInMeleeCombat = damageInMeleeCombat;
  156.         DamageInRangedCombat = damageInRangedCombat;
  157.         IsRangedCombat = isRangedCombat;
  158.     }
  159.  
  160.     public string Name { get; private set; }
  161.     public int Armor { get; private set; }
  162.     public int Health { get; private set; }
  163.     public int AmmoQuantity { get; private set; }
  164.     public int DamageInMeleeCombat { get; private set; }
  165.     public int DamageInRangedCombat { get; private set; }
  166.  
  167.     public virtual void Attack(Fighter fighter)
  168.     {
  169.         if ( AmmoQuantity <= 0)
  170.         {
  171.             MeleeCombatAttack(fighter);
  172.         }
  173.         else
  174.         {
  175.             RangedCombatAttack(fighter);
  176.         }
  177.     }
  178.  
  179.     public virtual void MeleeCombatAttack(Fighter fighter)
  180.     {
  181.         IsRangedCombat = false;
  182.         fighter.TakeDamage(DamageInMeleeCombat);
  183.         AmmoQuantity = 0;
  184.     }
  185.  
  186.     public virtual void RangedCombatAttack(Fighter fighter)
  187.     {
  188.         AmmoQuantity--;
  189.  
  190.         if (AmmoQuantity > 0)
  191.         {
  192.             fighter.TakeDamage(DamageInRangedCombat);
  193.         }
  194.         else if (AmmoQuantity == 0)
  195.         {
  196.             Console.WriteLine($"У бойца {Name} закончились патроны! Он берет лопату и идет в бой!");
  197.         }
  198.     }
  199.  
  200.     public void TakeDamage(int damage)
  201.     {
  202.         int divider = 100;
  203.  
  204.         Health -= damage * (1 - (Armor / divider));
  205.     }
  206.  
  207.     public void ShowStats()
  208.     {
  209.         Console.WriteLine($"{Name}|Броня:{Armor}|Жизни:{Health}|Кол-во патронов:{AmmoQuantity}|Урон в рукопашном бою:{DamageInMeleeCombat}|Урон в дальнем бою:{DamageInRangedCombat}");
  210.     }
  211. }
  212.  
  213. class Infantry : Fighter
  214. {
  215.     private int _attackCounter = 0;
  216.     private int _damageGrenade = 50;
  217.  
  218.     public Infantry(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
  219.         : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
  220.  
  221.     public override void RangedCombatAttack(Fighter fighter)
  222.     {
  223.         base.RangedCombatAttack(fighter);
  224.  
  225.         if (IsRangedCombat == true)
  226.         {
  227.             GrenadeThrow(fighter);
  228.         }
  229.     }
  230.  
  231.     public void GrenadeThrow(Fighter fighter)
  232.     {
  233.         int divider = 3;
  234.  
  235.         _attackCounter++;
  236.  
  237.         if (_attackCounter % divider == 0)
  238.         {
  239.             fighter.TakeDamage(_damageGrenade);
  240.             Console.WriteLine("Пехотинец бросает гранату!");
  241.         }
  242.     }
  243. }
  244.  
  245. class Marine : Fighter
  246. {
  247.     public Marine(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
  248.         : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
  249. }
  250.  
  251. class Sniper : Fighter
  252. {
  253.     public Sniper(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
  254.         : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
  255. }
  256.  
  257. class MachineGunner : Fighter
  258. {
  259.     public MachineGunner(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
  260.         : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
  261. }
  262.  
  263. class Utils
  264. {
  265.     private static Random _random = new Random();
  266.  
  267.     public static int GetRandomNumber(int max)
  268.     {
  269.         return _random.Next(max);
  270.     }
  271. }
  272.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement