Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace Ijunior
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- Game game = new Game();
- game.Work();
- }
- }
- class Game
- {
- public void Work()
- {
- const string CommandPlay = "1";
- const string CommandExit = "2";
- bool isWork = true;
- while (isWork)
- {
- Console.Write($"{CommandPlay} - играть" +
- $"\n{CommandExit} - выйти" +
- $"\nВведите номер: ");
- switch (Console.ReadLine())
- {
- case CommandPlay:
- CreateNewGame();
- break;
- case CommandExit:
- isWork = false;
- break;
- default:
- Console.WriteLine("Некорректный ввод");
- break;
- }
- }
- }
- private void CreateNewGame()
- {
- new Battlefield().Play();
- }
- }
- class Battlefield
- {
- private Platoon _firstPlatoon;
- private Platoon _secondPlatoon;
- public Battlefield()
- {
- CreatePlatoons();
- }
- public void Play()
- {
- Console.Clear();
- Fight();
- ShowResult();
- }
- private void CreatePlatoons()
- {
- _firstPlatoon = new Platoon("Снежинки");
- _secondPlatoon = new Platoon("Звездочки");
- }
- private void Fight()
- {
- int round = 1;
- while (_firstPlatoon.ServicemenCount > 0 && _secondPlatoon.ServicemenCount > 0)
- {
- Console.WriteLine("\nРаунд " + round);
- round++;
- Console.WriteLine("\nАтакует отряд " + _firstPlatoon.Name);
- _firstPlatoon.Attack(_secondPlatoon.Servicemen);
- Console.WriteLine("\nАтакует отряд " + _secondPlatoon.Name);
- _secondPlatoon.Attack(_firstPlatoon.Servicemen);
- Console.WriteLine($"\nПотери отряда " + _firstPlatoon.Name);
- _firstPlatoon.RemoveDeadFighters();
- Console.WriteLine($"\nПотери отряда " + _secondPlatoon.Name);
- _secondPlatoon.RemoveDeadFighters();
- }
- }
- private void ShowResult()
- {
- string separator = new string('*', 5);
- Console.Write("\n" + separator + " ");
- if (_firstPlatoon.ServicemenCount <= 0 && _secondPlatoon.ServicemenCount <= 0)
- {
- Console.Write("Ничья. Оба отряда умерли");
- }
- else if (_firstPlatoon.ServicemenCount > _secondPlatoon.ServicemenCount)
- {
- Console.Write(_firstPlatoon.Name + " выиграли");
- }
- else
- {
- Console.Write(_secondPlatoon.Name + " выиграли");
- }
- Console.WriteLine(" " + separator + "\n");
- }
- }
- class Platoon
- {
- private List<Serviceman> _servicemen;
- public Platoon(string name)
- {
- _servicemen = new List<Serviceman>();
- CreateArmy();
- Name = name;
- }
- public string Name { get; }
- public int ServicemenCount => _servicemen.Count;
- public List<Serviceman> Servicemen => _servicemen.ToList();
- public void Attack(List<Serviceman> attackedPlatoon)
- {
- foreach (Serviceman serviceman in _servicemen)
- {
- serviceman.Attack(attackedPlatoon);
- }
- }
- public void RemoveDeadFighters()
- {
- for (int i = _servicemen.Count - 1; i >= 0; i--)
- {
- if (_servicemen[i].Health <= 0)
- {
- Console.WriteLine($"{_servicemen[i].Name} умер");
- _servicemen.Remove(_servicemen[i]);
- }
- }
- }
- private void CreateArmy()
- {
- _servicemen.Add(new Soldier("Солдат", GenerateHealth(20, 50), 5, 1));
- _servicemen.Add(new Soldier("Солдат", GenerateHealth(20, 50), 5, 1));
- _servicemen.Add(new Sergeant("Сержант", GenerateHealth(30, 50), 5, 2));
- _servicemen.Add(new Lieutenant("Лейтенант", GenerateHealth(40, 50), 10, 3));
- _servicemen.Add(new Captain("Капитан", GenerateHealth(40, 50), 10, 3));
- }
- private int GenerateHealth(int minValue, int maxValue)
- {
- return Utils.GetRandomNumber(minValue, maxValue);
- }
- }
- class Serviceman
- {
- private int _armor;
- public Serviceman(string name, int health, int damage, int armor)
- {
- Name = name;
- Health = health;
- Damage = damage;
- _armor = armor;
- }
- public string Name { get; }
- public int Health { get; private set; }
- public int Damage { get; }
- public virtual void Attack(List<Serviceman> attackedPlatoon)
- {
- Serviceman attackedServiceman = attackedPlatoon[Utils.GetRandomNumber(0, attackedPlatoon.Count - 1)];
- Console.WriteLine($"{Name} наносит {attackedServiceman.Name} урон: {Damage}");
- attackedServiceman.TakeDamage(Damage);
- }
- public virtual void TakeDamage(int damage)
- {
- int totalDamage = damage - _armor;
- Health -= totalDamage;
- Console.WriteLine($"{Name} получает урон: {totalDamage}. Здоровье: {Health}");
- }
- }
- class Soldier : Serviceman
- {
- public Soldier(string name, int health, int damage, int armor) : base(name, health, damage, armor) { }
- }
- class Sergeant : Serviceman
- {
- public Sergeant(string name, int health, int damage, int armor) : base(name, health, damage, armor) { }
- public override void Attack(List<Serviceman> attackedPlatoon)
- {
- int damageMultiplier = 2;
- int increasedDamage = Damage * damageMultiplier;
- Serviceman attackedServiceman = attackedPlatoon[Utils.GetRandomNumber(0, attackedPlatoon.Count - 1)];
- Console.WriteLine($"{Name} наносит {attackedServiceman.Name} урон: {increasedDamage}");
- attackedServiceman.TakeDamage(increasedDamage);
- }
- }
- class Lieutenant : Serviceman
- {
- public Lieutenant(string name, int health, int damage, int armor) : base(name, health, damage, armor) { }
- public override void Attack(List<Serviceman> attackedPlatoon)
- {
- List<int> indexes = new List<int>();
- GenerateUniqueIndex(attackedPlatoon, indexes);
- foreach (int index in indexes)
- {
- Serviceman attackedServiceman = attackedPlatoon[index];
- Console.WriteLine($"{Name} наносит {attackedServiceman.Name} урон: {Damage}");
- attackedServiceman.TakeDamage(Damage);
- }
- }
- private void GenerateUniqueIndex(List<Serviceman> attackedPlatoon, List<int> indexes)
- {
- int countIndexes = 3;
- if (attackedPlatoon.Count > countIndexes)
- {
- while (countIndexes > 0)
- {
- int tempIndex = Utils.GetRandomNumber(0, attackedPlatoon.Count - 1);
- if (indexes.Contains(tempIndex) == false)
- {
- indexes.Add(tempIndex);
- countIndexes--;
- }
- }
- }
- else
- {
- for (int i = 0; i < attackedPlatoon.Count; i++)
- {
- indexes.Add(i);
- }
- }
- }
- }
- class Captain : Serviceman
- {
- public Captain(string name, int health, int damage, int armor) : base(name, health, damage, armor) { }
- public override void Attack(List<Serviceman> attackedPlatoon)
- {
- int coutnAttack = 3;
- for (int i = 0; i < coutnAttack; i++)
- {
- base.Attack(attackedPlatoon);
- }
- }
- }
- class Utils
- {
- private static Random s_random = new Random();
- public static int GetRandomNumber(int minValue, int maxValue)
- {
- return s_random.Next(minValue, maxValue);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment