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 war
- {
- class Program
- {
- static void Main(string[] args)
- {
- Battle battle = new Battle();
- battle.RunMenu();
- }
- }
- class Battle
- {
- private int Raund { get; set; }
- private Squad squadLeft;
- private Squad squadRight;
- private static Random rand;
- public Battle()
- {
- Raund = 1;
- rand = new Random();
- squadLeft = new Squad();
- squadRight = new Squad();
- }
- public void RunMenu()
- {
- bool isRun = true;
- while (isRun)
- {
- Console.WriteLine("[1] - Создать отряд\n[2] - Запустить бой\n[3] - Выход");
- switch (Console.ReadLine())
- {
- case "1":
- squadLeft.CreateSquad();
- squadRight.CreateSquad();
- break;
- case "2":
- Play(squadLeft, squadRight);
- break;
- case "3":
- isRun = false;
- break;
- }
- }
- }
- public void Play(Squad squadLeft, Squad squadRight)
- {
- if(IsGameReady() == false)
- {
- return;
- }
- Soldier leftSoldier;
- Soldier rightSoldier;
- while (IsGameOver() == false)
- {
- leftSoldier = squadLeft.GetSoldier();
- rightSoldier = squadRight.GetSoldier();
- Console.WriteLine("Западный отряд атакует!");
- leftSoldier.Attack(rightSoldier);
- Console.WriteLine("Восточный отряд атакует!");
- rightSoldier.Attack(leftSoldier);
- IsRaundEnd(leftSoldier, rightSoldier);
- }
- }
- private bool IsRaundEnd(Soldier leftSoldier, Soldier rightSoldier)
- {
- if(leftSoldier.IsGunReady == false && rightSoldier.IsGunReady == false)
- {
- Console.WriteLine("Обе стороны готовятся к следующей атаке");
- Console.WriteLine("Раунд: " + Raund++);
- squadLeft.PrepareGuns();
- squadRight.PrepareGuns();
- return true;
- }
- return false;
- }
- public bool IsGameOver()
- {
- if(squadLeft.GetHealthSquad() <= 0)
- {
- Console.WriteLine("Западный отряд умер!");
- return true;
- }
- else if(squadRight.GetHealthSquad() <= 0)
- {
- Console.WriteLine("Восточный отряд умер!");
- return true;
- }
- Console.WriteLine("\nСилы западного отряда: " + squadLeft.GetHealthSquad());
- Console.WriteLine("Силы восточного отряда: " + squadRight.GetHealthSquad() + "\n");
- return false;
- }
- public bool IsGameReady()
- {
- if (squadLeft.GetSquadSize() < 0)
- {
- Console.WriteLine("Левый отряд не создан!");
- return false;
- }
- else if(squadRight.GetSquadSize() < 0)
- {
- Console.WriteLine("Правый отряд не создан!");
- return false;
- }
- return true;
- }
- }
- class Squad
- {
- private List<Soldier> _soldiers;
- private static Random rand = new Random();
- public Squad()
- {
- _soldiers = new List<Soldier>();
- }
- public void CreateSquad()
- {
- Console.WriteLine("Создаем отряд...");
- for (int i = 0; i < 20; i++)
- {
- int number = rand.Next(0, 2);
- if (number == 0)
- {
- Medic medic = new Medic(i, rand.Next(50, 100), rand.Next(25, 50));
- _soldiers.Add(medic);
- }
- else if (number == 1)
- {
- Infantryman infantryman = new Infantryman(i, rand.Next(70, 100), rand.Next(50, 80));
- _soldiers.Add(infantryman);
- }
- else if (number == 2)
- {
- Sniper sniper = new Sniper(i, rand.Next(50, 70), rand.Next(85, 105));
- _soldiers.Add(sniper);
- }
- }
- }
- public int GetHealthSquad()
- {
- int healthSquad = 0;
- foreach (var soldier in _soldiers)
- {
- healthSquad += soldier.Health;
- }
- return healthSquad;
- }
- public int GetSquadSize()
- {
- return _soldiers.Count;
- }
- public Soldier GetSoldier()
- {
- int soldierIndex;
- for (int i = 0; i < GetSquadSize(); i++)
- {
- soldierIndex = rand.Next(0, _soldiers.Count);
- if (_soldiers[soldierIndex].IsGunReady || _soldiers[soldierIndex].AbillityCounter == 0)
- {
- return _soldiers[soldierIndex];
- }
- }
- return _soldiers[rand.Next(0, GetSquadSize())];
- }
- public void PrepareGuns()
- {
- foreach (var soldier in _soldiers)
- {
- soldier.ReloadGun();
- }
- }
- }
- abstract class Soldier
- {
- public bool IsGunReady { get; protected set; }
- public bool IsAvoid { get; protected set; }
- public int Number { get; protected set; }
- public int Health { get; protected set; }
- public int Damage { get; protected set; }
- public int AbillityCounter { get; protected set; }
- public abstract void UseAbillity(Soldier enemy);
- public void Attack(Soldier enemy)
- {
- if (IsGunReady == false)
- {
- return;
- }
- if (enemy.IsAvoid)
- {
- return;
- }
- if (AbillityCounter == 0)
- {
- UseAbillity(enemy);
- return;
- }
- IsGunReady = false;
- enemy.Health -= Damage;
- }
- public void Heal(Soldier ally)
- {
- Random random = new Random();
- ally.Health += random.Next(10,30);
- }
- public void ReloadGun()
- {
- IsGunReady = true;
- }
- public void CooldownAbility()
- {
- --AbillityCounter;
- }
- }
- class Medic : Soldier
- {
- public Medic(int number, int health, int damage)
- {
- IsGunReady = false;
- IsAvoid = false;
- Number = number;
- Health = health;
- Damage = damage;
- AbillityCounter = 0;
- }
- public override void UseAbillity(Soldier ally)
- {
- Heal(ally);
- AbillityCounter = 5;
- }
- }
- class Infantryman : Soldier
- {
- public Infantryman(int number, int health, int damage)
- {
- IsGunReady = true;
- IsAvoid = false;
- Number = number;
- Health = health;
- Damage = damage;
- AbillityCounter = 0;
- }
- public override void UseAbillity(Soldier enemy)
- {
- AbillityCounter = 2;
- }
- }
- class Sniper : Soldier
- {
- public Sniper(int number, int health, int damage)
- {
- IsGunReady = true;
- IsAvoid = false;
- Number = number;
- Health = health;
- Damage = damage;
- AbillityCounter = 3;
- }
- public override void UseAbillity(Soldier enemy)
- {
- IsAvoid = true;
- AbillityCounter = 3;
- }
- }
- }
Add Comment
Please, Sign In to add comment