Advertisement
Rodunskiy

Untitled

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