Advertisement
Rodunskiy

Untitled

Jul 30th, 2023
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.54 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. using static System.Net.Mime.MediaTypeNames;
  5.  
  6. class Program
  7. {
  8.     static void Main(string[] args)
  9.     {
  10.         Battlefield battlefield = new Battlefield();
  11.  
  12.         battlefield.Battle();
  13.     }
  14. }
  15.  
  16. class Battlefield
  17. {
  18.     private Squad _squadOne;
  19.     private Squad _squadTwo;
  20.  
  21.     private Fighter _fighterOne;
  22.     private Fighter _fighterTwo;
  23.  
  24.     public Battlefield()
  25.     {
  26.         _squadOne = new Squad();
  27.         _squadTwo = new Squad();
  28.     }
  29.  
  30.     public void Battle()
  31.     {
  32.         while (_squadOne.IsReadyFight() && _squadTwo.IsReadyFight())
  33.         {
  34.             _fighterOne = _squadOne.GiveFighter();
  35.             _fighterTwo = _squadTwo.GiveFighter();
  36.  
  37.             while (_fighterOne.isAlive && _fighterTwo.isAlive)
  38.             {
  39.                 _fighterOne.ShowStats();
  40.                 _fighterTwo.ShowStats();
  41.                 _fighterOne.RangedCombatAttack(_fighterTwo);
  42.                 _fighterTwo.RangedCombatAttack(_fighterOne);
  43.                 _fighterOne.MeleeCombatAttack(_fighterTwo);
  44.                 _fighterTwo.MeleeCombatAttack(_fighterOne);
  45.                 ShowBattleResult();
  46.  
  47.                 Console.ReadKey();
  48.                 Console.Clear();
  49.             }
  50.  
  51.             if (_fighterOne.isAlive)
  52.             {
  53.                 _squadOne.ReturnFighter(_fighterOne);
  54.             }
  55.             else if (_fighterTwo.isAlive)
  56.             {
  57.                 _squadTwo.ReturnFighter(_fighterTwo);
  58.             }
  59.         }
  60.  
  61.         ShowFinalBattleResult();
  62.     }
  63.  
  64.     public void ShowFinalBattleResult()
  65.     {
  66.         if(_squadOne != null && _squadTwo != null)
  67.         {
  68.             Console.WriteLine("Оба отряда уничтожены!");
  69.         }
  70.         else if (_squadOne != null)
  71.         {
  72.             Console.WriteLine("В этой битве побеждает первый отряд!");
  73.             _squadOne.ShowInfo();
  74.         }
  75.         else if (_squadTwo != null)
  76.         {
  77.             Console.WriteLine("В этой битве побеждает второй отряд!");
  78.             _squadTwo.ShowInfo();
  79.         }
  80.     }
  81.  
  82.     public void ShowBattleResult()
  83.     {
  84.         Console.SetCursorPosition(0, 7);
  85.         if (_fighterOne.isDead && _fighterTwo.isDead)
  86.         {
  87.             Console.WriteLine("Оба бойца погибли.");
  88.         }
  89.         else if (_fighterOne.isDead)
  90.         {
  91.             Console.WriteLine($"{_fighterTwo.Name} побеждает.");
  92.         }
  93.         else if (_fighterTwo.isDead)
  94.         {
  95.             Console.WriteLine($"{_fighterOne.Name} побеждает.");
  96.         }
  97.     }
  98. }
  99.  
  100. class Squad
  101. {
  102.     private List<Fighter> _fighters = new List<Fighter>();
  103.  
  104.     public Squad()
  105.     {
  106.         _fighters.Add(new Infantry("Пехотинец", 50, 400, 5, 100, 200, true));
  107.         _fighters.Add(new Marine("Морпех", 70, 200, 5, 100, 200, true));
  108.         _fighters.Add(new Sniper("Снайпер", 30, 1500, 5, 100, 300, true));
  109.         _fighters.Add(new MachineGunner("Пулемётчик", 50, 1500, 10, 100, 200, true));
  110.     }
  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 = null;
  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