Advertisement
OldBeliver

UnnumberedHill_ver01

Jun 5th, 2021
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.27 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace UnnumberedHill
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             BattleField unnumberedHill = new BattleField();
  14.  
  15.             while (true)
  16.             {
  17.                 unnumberedHill.Battle();
  18.                 Console.Clear();
  19.             }
  20.         }
  21.     }
  22.  
  23.     class BattleField
  24.     {
  25.         HeadQuarter headQuarter = new HeadQuarter();
  26.         Random rand = new Random();
  27.  
  28.         public void Battle()
  29.         {
  30.             string splitbar = "--------------------------------------";
  31.             int attackCounter = 0;
  32.             int attackLimit = 13;
  33.  
  34.             List<MilitaryMan> blueTeam = new List<MilitaryMan>();
  35.             headQuarter.CreateTeam(blueTeam);
  36.  
  37.             List<MilitaryMan> redTeam = new List<MilitaryMan>();
  38.             headQuarter.CreateTeam(redTeam);
  39.  
  40.             Console.WriteLine(splitbar);
  41.             Console.WriteLine($"| Приказ штаба фронта |");
  42.             Console.WriteLine(splitbar);
  43.             Console.WriteLine($"в рамках учений красной группе захватить и удерживать безымянную высоту до подхода основных сил,");
  44.             Console.WriteLine($"по данным войсковой разведки: в данный район выдвинулась синяя группа противника в составе:\n");
  45.  
  46.             headQuarter.ViewTeam(blueTeam);
  47.             Console.WriteLine();
  48.            
  49.             Console.WriteLine($"нажмите любую, чтобы продолжить читать приказ\n");
  50.             Console.ReadKey();
  51.  
  52.             Console.WriteLine($"красной группе выдвинуться в заданный район через час после получения приказа,");
  53.             Console.WriteLine($"но не поздее N-часов, надцатого числа текущего месяца,\nв составе:\n");
  54.             headQuarter.ViewTeam(redTeam);
  55.  
  56.             Console.WriteLine($"\nнажмите любую для выдвижения группы в заданный квадрат ");
  57.             Console.ReadKey();
  58.             Console.Clear();
  59.  
  60.             if (rand.Next(0, 2) == 0)
  61.             {
  62.                 Console.WriteLine($"Ваша команда первой заняла высоту и приняла бой");
  63.             }
  64.             else
  65.             {
  66.                 Console.WriteLine($"Вы не успели занять высоту и начали разведку боем");
  67.             }
  68.  
  69.             Console.WriteLine($"\nнажмите любую для продолжения");
  70.             Console.ReadKey();
  71.             Console.Clear();
  72.  
  73.             while (blueTeam.Count != 0 && redTeam.Count != 0)
  74.             {
  75.                 for (int i = 0; i < redTeam.Count; i++)
  76.                 {
  77.                     redTeam[i].UseCombatSkill();
  78.                 }
  79.  
  80.                 for (int i = 0; i < blueTeam.Count; i++)
  81.                 {
  82.                     blueTeam[i].UseCombatSkill();
  83.                 }
  84.  
  85.                 Console.WriteLine($"данные о командах\n");
  86.  
  87.                 Console.WriteLine($"синяя команда");
  88.                 headQuarter.ViewTeam(blueTeam);
  89.                 Console.WriteLine(splitbar);
  90.                 Console.WriteLine();
  91.                 Console.WriteLine($"красная команда");
  92.                 headQuarter.ViewTeam(redTeam);
  93.  
  94.                 Console.WriteLine($"\nгрохот выстрелов разорвал тишину над безымянной высотой\nнажмите любую для продолжения");
  95.                 Console.ReadKey();
  96.                 Console.Clear();
  97.  
  98.                 Console.WriteLine($"ранения синей команды:");
  99.                 TradeBlows(redTeam, blueTeam);
  100.                 Console.WriteLine(splitbar);
  101.                 Console.WriteLine($"ранения красной команды:");
  102.                 TradeBlows(blueTeam, redTeam);
  103.  
  104.                 Console.WriteLine($"\nпосле очередной атаки пришло время работы санитаров\n");
  105.  
  106.                 int quantity = 0;
  107.                 DressUpWound(blueTeam);
  108.                 RemoveDadMan(blueTeam, out quantity);
  109.                 Console.WriteLine($"безвозвратные потери синей команды: {quantity}");
  110.                 Console.WriteLine(splitbar);
  111.                 DressUpWound(redTeam);
  112.                 RemoveDadMan(redTeam, out quantity);
  113.                 Console.WriteLine($"безвозвратные потери красной команды: {quantity}");
  114.  
  115.                 Console.ReadKey();
  116.                 Console.Clear();
  117.  
  118.                 attackCounter++;
  119.                
  120.                 if(attackCounter >= attackLimit)
  121.                 {
  122.                     Console.WriteLine($"Бойцы устали - {attackLimit} атак за спиной. Безымянная высота осталась ничьей");
  123.                     break;
  124.                 }
  125.                 else if (blueTeam.Count == 0 && redTeam.Count == 0)
  126.                 {
  127.                     Console.WriteLine($"остались все в земле сырой на безымянной высоте");
  128.                 }
  129.                 else if (blueTeam.Count == 0)
  130.                 {
  131.                     Console.WriteLine($"безымянная высота осталась за красной командой");
  132.                 }
  133.                 else if (redTeam.Count == 0)
  134.                 {
  135.                     Console.WriteLine($"безымянная высота осталась за синей командой");
  136.                 }
  137.             }
  138.             Console.WriteLine($"\nВойна никогда не заканчивается\nоткрыть новый пакет из штаба фронта");
  139.             Console.ReadKey();
  140.         }
  141.  
  142.         private void TradeBlows(List<MilitaryMan> attacker, List<MilitaryMan> defender)
  143.         {
  144.             for (int i = 0; i < attacker.Count; i++)
  145.             {
  146.                 int index = rand.Next(defender.Count);
  147.                 defender[index].TakeDamage(attacker[i].Damage);
  148.  
  149.                 Console.WriteLine($"боец №{index + 1} получил урон {defender[index].Injury}");
  150.             }
  151.         }
  152.  
  153.         private void RemoveDadMan(List<MilitaryMan> team, out int quantity)
  154.         {
  155.             quantity = 0;
  156.             for (int i = team.Count - 1; i >= 0; i--)
  157.             {
  158.                 if (team[i].Health <= 0)
  159.                 {
  160.                     team.RemoveAt(i);
  161.                     Console.WriteLine($"боец №{i + 1} убит");
  162.                     quantity++;
  163.                 }
  164.             }
  165.         }
  166.  
  167.         private void DressUpWound(List<MilitaryMan> team)
  168.         {  
  169.             for (int i = 0; i < team.Count; i++)
  170.             {
  171.                 if (team[i].Type == "медик")
  172.                 {
  173.                     int index = rand.Next(team.Count);
  174.                     team[index].TakeTreatment();
  175.                     Console.WriteLine($"бойцу №{index+1} перевязали раны и дали стимулятор") ;
  176.                 }
  177.             }
  178.         }
  179.     }
  180.  
  181.     class HeadQuarter
  182.     {
  183.         Random rand = new Random();
  184.         int minSize = 6;
  185.         int maxSize = 9;
  186.  
  187.         private List<MilitaryMan> _team;
  188.  
  189.         public HeadQuarter()
  190.         {
  191.             _team = new List<MilitaryMan>();
  192.         }
  193.  
  194.         public void CreateTeam(List<MilitaryMan> _team)
  195.         {
  196.             int size = rand.Next(minSize, maxSize + 1);
  197.             int caseNumber = 3;
  198.  
  199.             int lowerHealth = 10;
  200.             int upperHealth = 15;
  201.             int randomHealth;
  202.  
  203.             int lowerDamage = 2;
  204.             int upperDamage = 3;
  205.             int randomDamage;
  206.  
  207.             int soldierArmor = 1;
  208.             int sapperArmor = 1;
  209.             int medicArmor = 0;
  210.  
  211.             for (int i = 0; i < size; i++)
  212.             {
  213.                 randomHealth = rand.Next(lowerHealth, upperHealth + 1);
  214.                 randomDamage = rand.Next(lowerDamage, upperDamage + 1);
  215.  
  216.                 switch (rand.Next(1, caseNumber + 1))
  217.                 {
  218.                     case 1:
  219.                         _team.Add(new Soldier(randomHealth, randomDamage, soldierArmor));
  220.                         break;
  221.                     case 2:
  222.                         _team.Add(new Sapper(randomHealth, randomDamage, sapperArmor));
  223.                         break;
  224.                     case 3:
  225.                         _team.Add(new Medic(randomHealth, randomDamage, medicArmor));
  226.                         break;
  227.                     default:
  228.                         Console.WriteLine($"число вне диапазона - проверьте переменную caseNumber");
  229.                         break;
  230.                 }
  231.             }
  232.         }
  233.  
  234.         public void ViewTeam(List<MilitaryMan> _team)
  235.         {
  236.             Console.WriteLine($" №  род войск\tHP\tУрон\tБроня");
  237.             Console.WriteLine($"--------------------------------------");
  238.             for (int i = 0; i < _team.Count; i++)
  239.             {
  240.                 Console.Write($"{i + 1:d2}. ");
  241.                 _team[i].ShowStats();
  242.             }
  243.         }
  244.     }
  245.  
  246.     abstract class MilitaryMan
  247.     {
  248.         public string Type { get; protected set; }
  249.         public int Health { get; protected set; }
  250.         public int Damage { get; protected set; }
  251.         public int Armor { get; protected set; }
  252.         public int Injury { get; protected set; }
  253.  
  254.         public MilitaryMan(int health, int damage, int armor)
  255.         {
  256.             Health = health;
  257.             Damage = damage;
  258.             Armor = armor;
  259.         }
  260.  
  261.         public void ShowStats()
  262.         {
  263.             Console.WriteLine($"{Type}\t{Health}\t  {Damage}\t  {Armor}");
  264.         }
  265.  
  266.         public void TakeDamage(int damage)
  267.         {
  268.             Injury = damage - Armor;
  269.  
  270.             if (Injury < 0)
  271.             {
  272.                 Injury = 0;
  273.             }
  274.  
  275.             Health -= Injury;
  276.         }
  277.  
  278.         public void TakeTreatment()
  279.         {
  280.             Health += 3;
  281.         }
  282.  
  283.         public virtual void UseCombatSkill()
  284.         {
  285.  
  286.         }
  287.     }
  288.  
  289.     class Soldier : MilitaryMan
  290.     {
  291.         public Soldier(int health, int damage, int armor) : base(health, damage, armor)
  292.         {
  293.             Type = "рядовой";
  294.         }
  295.  
  296.         public override void UseCombatSkill()
  297.         {
  298.             Damage += 2;
  299.         }
  300.     }
  301.  
  302.     class Sapper : MilitaryMan
  303.     {
  304.         public Sapper(int health, int damage, int armor) : base(health, damage, armor)
  305.         {
  306.             Type = "минёр";
  307.         }
  308.  
  309.         public override void UseCombatSkill()
  310.         {
  311.             Armor += 1;
  312.         }
  313.     }
  314.  
  315.     class Medic : MilitaryMan
  316.     {
  317.         public Medic(int health, int damage, int armor) : base(health, damage, armor)
  318.         {
  319.             Type = "медик";
  320.         }
  321.     }
  322. }
  323.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement