Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace UnnumberedHill
- {
- class Program
- {
- static void Main(string[] args)
- {
- BattleField unnumberedHill = new BattleField();
- while (true)
- {
- unnumberedHill.Battle();
- Console.Clear();
- }
- }
- }
- class BattleField
- {
- HeadQuarter headQuarter = new HeadQuarter();
- Random rand = new Random();
- public void Battle()
- {
- string splitbar = "--------------------------------------";
- int attackCounter = 0;
- int attackLimit = 13;
- List<MilitaryMan> blueTeam = new List<MilitaryMan>();
- headQuarter.CreateTeam(blueTeam);
- List<MilitaryMan> redTeam = new List<MilitaryMan>();
- headQuarter.CreateTeam(redTeam);
- Console.WriteLine(splitbar);
- Console.WriteLine($"| Приказ штаба фронта |");
- Console.WriteLine(splitbar);
- Console.WriteLine($"в рамках учений красной группе захватить и удерживать безымянную высоту до подхода основных сил,");
- Console.WriteLine($"по данным войсковой разведки: в данный район выдвинулась синяя группа противника в составе:\n");
- headQuarter.ViewTeam(blueTeam);
- Console.WriteLine();
- Console.WriteLine($"нажмите любую, чтобы продолжить читать приказ\n");
- Console.ReadKey();
- Console.WriteLine($"красной группе выдвинуться в заданный район через час после получения приказа,");
- Console.WriteLine($"но не поздее N-часов, надцатого числа текущего месяца,\nв составе:\n");
- headQuarter.ViewTeam(redTeam);
- Console.WriteLine($"\nнажмите любую для выдвижения группы в заданный квадрат ");
- Console.ReadKey();
- Console.Clear();
- if (rand.Next(0, 2) == 0)
- {
- Console.WriteLine($"Ваша команда первой заняла высоту и приняла бой");
- }
- else
- {
- Console.WriteLine($"Вы не успели занять высоту и начали разведку боем");
- }
- Console.WriteLine($"\nнажмите любую для продолжения");
- Console.ReadKey();
- Console.Clear();
- while (blueTeam.Count != 0 && redTeam.Count != 0)
- {
- for (int i = 0; i < redTeam.Count; i++)
- {
- redTeam[i].UseCombatSkill();
- }
- for (int i = 0; i < blueTeam.Count; i++)
- {
- blueTeam[i].UseCombatSkill();
- }
- Console.WriteLine($"данные о командах\n");
- Console.WriteLine($"синяя команда");
- headQuarter.ViewTeam(blueTeam);
- Console.WriteLine(splitbar);
- Console.WriteLine();
- Console.WriteLine($"красная команда");
- headQuarter.ViewTeam(redTeam);
- Console.WriteLine($"\nгрохот выстрелов разорвал тишину над безымянной высотой\nнажмите любую для продолжения");
- Console.ReadKey();
- Console.Clear();
- Console.WriteLine($"ранения синей команды:");
- TradeBlows(redTeam, blueTeam);
- Console.WriteLine(splitbar);
- Console.WriteLine($"ранения красной команды:");
- TradeBlows(blueTeam, redTeam);
- Console.WriteLine($"\nпосле очередной атаки пришло время работы санитаров\n");
- int quantity = 0;
- DressUpWound(blueTeam);
- RemoveDadMan(blueTeam, out quantity);
- Console.WriteLine($"безвозвратные потери синей команды: {quantity}");
- Console.WriteLine(splitbar);
- DressUpWound(redTeam);
- RemoveDadMan(redTeam, out quantity);
- Console.WriteLine($"безвозвратные потери красной команды: {quantity}");
- Console.ReadKey();
- Console.Clear();
- attackCounter++;
- if(attackCounter >= attackLimit)
- {
- Console.WriteLine($"Бойцы устали - {attackLimit} атак за спиной. Безымянная высота осталась ничьей");
- break;
- }
- else if (blueTeam.Count == 0 && redTeam.Count == 0)
- {
- Console.WriteLine($"остались все в земле сырой на безымянной высоте");
- }
- else if (blueTeam.Count == 0)
- {
- Console.WriteLine($"безымянная высота осталась за красной командой");
- }
- else if (redTeam.Count == 0)
- {
- Console.WriteLine($"безымянная высота осталась за синей командой");
- }
- }
- Console.WriteLine($"\nВойна никогда не заканчивается\nоткрыть новый пакет из штаба фронта");
- Console.ReadKey();
- }
- private void TradeBlows(List<MilitaryMan> attacker, List<MilitaryMan> defender)
- {
- for (int i = 0; i < attacker.Count; i++)
- {
- int index = rand.Next(defender.Count);
- defender[index].TakeDamage(attacker[i].Damage);
- Console.WriteLine($"боец №{index + 1} получил урон {defender[index].Injury}");
- }
- }
- private void RemoveDadMan(List<MilitaryMan> team, out int quantity)
- {
- quantity = 0;
- for (int i = team.Count - 1; i >= 0; i--)
- {
- if (team[i].Health <= 0)
- {
- team.RemoveAt(i);
- Console.WriteLine($"боец №{i + 1} убит");
- quantity++;
- }
- }
- }
- private void DressUpWound(List<MilitaryMan> team)
- {
- for (int i = 0; i < team.Count; i++)
- {
- if (team[i].Type == "медик")
- {
- int index = rand.Next(team.Count);
- team[index].TakeTreatment();
- Console.WriteLine($"бойцу №{index+1} перевязали раны и дали стимулятор") ;
- }
- }
- }
- }
- class HeadQuarter
- {
- Random rand = new Random();
- int minSize = 6;
- int maxSize = 9;
- private List<MilitaryMan> _team;
- public HeadQuarter()
- {
- _team = new List<MilitaryMan>();
- }
- public void CreateTeam(List<MilitaryMan> _team)
- {
- int size = rand.Next(minSize, maxSize + 1);
- int caseNumber = 3;
- int lowerHealth = 10;
- int upperHealth = 15;
- int randomHealth;
- int lowerDamage = 2;
- int upperDamage = 3;
- int randomDamage;
- int soldierArmor = 1;
- int sapperArmor = 1;
- int medicArmor = 0;
- for (int i = 0; i < size; i++)
- {
- randomHealth = rand.Next(lowerHealth, upperHealth + 1);
- randomDamage = rand.Next(lowerDamage, upperDamage + 1);
- switch (rand.Next(1, caseNumber + 1))
- {
- case 1:
- _team.Add(new Soldier(randomHealth, randomDamage, soldierArmor));
- break;
- case 2:
- _team.Add(new Sapper(randomHealth, randomDamage, sapperArmor));
- break;
- case 3:
- _team.Add(new Medic(randomHealth, randomDamage, medicArmor));
- break;
- default:
- Console.WriteLine($"число вне диапазона - проверьте переменную caseNumber");
- break;
- }
- }
- }
- public void ViewTeam(List<MilitaryMan> _team)
- {
- Console.WriteLine($" № род войск\tHP\tУрон\tБроня");
- Console.WriteLine($"--------------------------------------");
- for (int i = 0; i < _team.Count; i++)
- {
- Console.Write($"{i + 1:d2}. ");
- _team[i].ShowStats();
- }
- }
- }
- abstract class MilitaryMan
- {
- public string Type { get; protected set; }
- public int Health { get; protected set; }
- public int Damage { get; protected set; }
- public int Armor { get; protected set; }
- public int Injury { get; protected set; }
- public MilitaryMan(int health, int damage, int armor)
- {
- Health = health;
- Damage = damage;
- Armor = armor;
- }
- public void ShowStats()
- {
- Console.WriteLine($"{Type}\t{Health}\t {Damage}\t {Armor}");
- }
- public void TakeDamage(int damage)
- {
- Injury = damage - Armor;
- if (Injury < 0)
- {
- Injury = 0;
- }
- Health -= Injury;
- }
- public void TakeTreatment()
- {
- Health += 3;
- }
- public virtual void UseCombatSkill()
- {
- }
- }
- class Soldier : MilitaryMan
- {
- public Soldier(int health, int damage, int armor) : base(health, damage, armor)
- {
- Type = "рядовой";
- }
- public override void UseCombatSkill()
- {
- Damage += 2;
- }
- }
- class Sapper : MilitaryMan
- {
- public Sapper(int health, int damage, int armor) : base(health, damage, armor)
- {
- Type = "минёр";
- }
- public override void UseCombatSkill()
- {
- Armor += 1;
- }
- }
- class Medic : MilitaryMan
- {
- public Medic(int health, int damage, int armor) : base(health, damage, armor)
- {
- Type = "медик";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement