Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace CLights
- {
- class Program
- {
- public static void Main()
- {
- new Battlefield(new Platoon("Взвод 1"), new Platoon("Взвод 2")).Work();
- }
- }
- public static class RandomStatic
- {
- static private Random _rand = new Random();
- static public int GetNext(int min, int max)
- {
- return _rand.Next(min, max);
- }
- }
- public static class Messager
- {
- static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay)
- {
- ConsoleColor defaultColor = Console.ForegroundColor;
- Console.ForegroundColor = color;
- Console.WriteLine(message);
- Console.ForegroundColor = defaultColor;
- if (delay)
- Console.ReadKey();
- }
- }
- class Battlefield
- {
- private Platoon _side1;
- private Platoon _side2;
- public Battlefield(Platoon platoon1, Platoon platoon2)
- {
- _side1 = platoon1;
- _side2 = platoon2;
- }
- public void Work()
- {
- while (_side1.CheckCombatСapability() && _side2.CheckCombatСapability())
- {
- Console.Clear();
- _side1.Attack(_side2);
- if (!(_side1.CheckCombatСapability() && _side2.CheckCombatСapability()))
- break;
- _side2.Attack(_side1);
- _side1.ShowInfo();
- _side2.ShowInfo();
- Console.ReadKey();
- }
- Console.Clear();
- if (!_side1.CheckCombatСapability() && _side2.CheckCombatСapability())
- {
- Messager.ShowMessageWithColor($"{_side2.Name} - Выиграл", ConsoleColor.Green, false);
- Messager.ShowMessageWithColor($"{_side1.Name} - Проиграл", ConsoleColor.Red, false);
- }
- else if (_side1.CheckCombatСapability() && !_side2.CheckCombatСapability())
- {
- Messager.ShowMessageWithColor($"{_side1.Name} - Выиграл", ConsoleColor.Green, false);
- Messager.ShowMessageWithColor($"{_side2.Name} - Проиграл", ConsoleColor.Red, false);
- }
- _side1.ShowInfo();
- _side2.ShowInfo();
- Console.ReadKey();
- }
- }
- class Platoon
- {
- private List<Soldier> _soldiers = new List<Soldier>();
- private List<Soldier> _deadSoldiers = new List<Soldier>();
- public string Name { get; private set; }
- public Platoon(string name)
- {
- Name = name;
- for (int i = 0; i < 20; i++)
- {
- int chance = RandomStatic.GetNext(0, 101);
- if (chance <= 35)
- _soldiers.Add(new Guner(i, Name));
- else if (chance <= 65)
- _soldiers.Add(new Autoguner(i, Name));
- else if (chance <= 85)
- _soldiers.Add(new Sniper(i, Name));
- else
- _soldiers.Add(new RPG(i, Name));
- }
- }
- public Soldier GetRandomSoldier()
- {
- if (_soldiers.Count > 0)
- return _soldiers[RandomStatic.GetNext(0, _soldiers.Count)];
- else
- return null;
- }
- public void ShowInfo()
- {
- ConsoleColor colorOfHp;
- ConsoleColor defaultColor = ConsoleColor.White;
- Console.WriteLine("\nВзвод: " + Name);
- for (int i = 0; i < _soldiers.Count; i++)
- {
- char symbolSoldier = _soldiers[i].GetCharInfo(out colorOfHp);
- Console.ForegroundColor = colorOfHp;
- Console.Write($"{_soldiers[i].Id}:{symbolSoldier} | ");
- Console.ForegroundColor = defaultColor;
- }
- for (int i = 0; i < _deadSoldiers.Count; i++)
- {
- char symbolSoldier = _deadSoldiers[i].GetCharInfo(out colorOfHp);
- Console.ForegroundColor = colorOfHp;
- Console.Write($"{_deadSoldiers[i].Id}:{symbolSoldier} | ");
- Console.ForegroundColor = defaultColor;
- }
- Console.WriteLine();
- }
- public void Attack(Platoon enemyPlatoon)
- {
- MoveDeadBody();
- GetRandomSoldier()?.Atack(enemyPlatoon);
- }
- public bool CheckCombatСapability()
- {
- return _soldiers.Count > 0;
- }
- private void MoveDeadBody()
- {
- for (int i = _soldiers.Count - 1; i >= 0; i--)
- {
- if (_soldiers[i].Hp <= 0)
- {
- _deadSoldiers.Add(_soldiers[i]);
- _soldiers.RemoveAt(i);
- }
- }
- }
- }
- abstract class Soldier
- {
- public int Hp { get; protected set; }
- public int Armor { get; protected set; }
- public bool Stealth { get; protected set; } = false;
- public char Symbol { get; protected set; }
- public int Id { get; private set; }
- private string _nameMyPlatoon;
- public Soldier(int id, string namePlatoon)
- {
- Id = id;
- _nameMyPlatoon = namePlatoon;
- Hp = 100;
- }
- abstract public void Atack(Platoon enemyPlatoon);
- public void TakeDamage(int damage)
- {
- Hp -= GetRealDamage(damage);
- }
- public char GetCharInfo(out ConsoleColor color)
- {
- if (Hp <= 0)
- color = ConsoleColor.DarkMagenta;
- else if (Hp < 25)
- color = ConsoleColor.Red;
- else if (Hp < 60)
- color = ConsoleColor.Yellow;
- else
- color = ConsoleColor.Green;
- return Symbol;
- }
- protected void ShowResultAttack(string typeSoldier, int damage, Soldier enemy)
- {
- Console.WriteLine($"{typeSoldier} {Id}-{Symbol} от {_nameMyPlatoon} Атаковал - {enemy.Id}-{enemy.Symbol} на {enemy.GetRealDamage(damage)}");
- }
- public int GetRealDamage(int damage)
- {
- int realDamage = damage - Armor * 5;
- if (Stealth)
- realDamage = (int)(realDamage * 0.75f);
- if (realDamage < 0)
- realDamage = 1;
- return realDamage;
- }
- }
- class RPG : Soldier
- {
- public RPG(int id, string name) : base(id, name)
- {
- Armor = 1;
- Stealth = false;
- Symbol = 'R';
- }
- public override void Atack(Platoon enemyPlatoon)
- {
- int amountTarget = RandomStatic.GetNext(3, 7);
- int damage = RandomStatic.GetNext(50, 80);
- for (int i = 0; i < amountTarget; i++)
- {
- Soldier enemy = enemyPlatoon.GetRandomSoldier();
- if (enemy != null)
- {
- enemy.TakeDamage(damage);
- ShowResultAttack("Ракетчик", damage, enemy);
- }
- }
- }
- }
- class Autoguner : Soldier
- {
- public Autoguner(int id, string name) : base(id, name)
- {
- Armor = 2;
- Stealth = false;
- Symbol = 'A';
- }
- public override void Atack(Platoon enemyPlatoon)
- {
- int amountTarger = RandomStatic.GetNext(0, 5);
- for (int i = 0; i < amountTarger; i++)
- {
- Soldier enemy = enemyPlatoon.GetRandomSoldier();
- int damage = RandomStatic.GetNext(40, 45);
- if (enemy != null)
- {
- enemy.TakeDamage(damage);
- ShowResultAttack("Автоматчик", damage, enemy);
- }
- }
- }
- }
- class Guner : Soldier
- {
- public Guner(int id, string name) : base(id, name)
- {
- Armor = 3;
- Stealth = false;
- Symbol = 'G';
- }
- public override void Atack(Platoon enemyPlatoon)
- {
- Soldier enemy = enemyPlatoon.GetRandomSoldier();
- int damage = RandomStatic.GetNext(50, 55);
- if (enemy != null)
- {
- enemy.TakeDamage(damage);
- ShowResultAttack("Стрелок", damage, enemy);
- }
- }
- }
- class Sniper : Soldier
- {
- public Sniper(int id, string name) : base(id, name)
- {
- Armor = 0;
- Stealth = true;
- Symbol = 'S';
- }
- public override void Atack(Platoon enemyPlatoon)
- {
- Soldier enemy = enemyPlatoon.GetRandomSoldier();
- int damage = 150;
- if (enemy != null)
- {
- enemy.TakeDamage(damage);
- ShowResultAttack("Снайпер", damage, enemy);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement