Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- class Program
- {
- static void Main(string[] args)
- {
- Battlefield battlefield = new Battlefield();
- battlefield.Battle();
- }
- }
- class Battlefield
- {
- private Squad _squadOne;
- private Squad _squadTwo;
- private Fighter _fighterOne;
- private Fighter _fighterTwo;
- public Battlefield()
- {
- _squadOne = new Squad();
- _squadTwo = new Squad();
- }
- public void Battle()
- {
- while (_squadOne.IsReadyFight() && _squadTwo.IsReadyFight())
- {
- _fighterOne = _squadOne.GiveFighter();
- _fighterTwo = _squadTwo.GiveFighter();
- while (_fighterOne.isAlive && _fighterTwo.isAlive)
- {
- _fighterOne.ShowStats();
- _fighterTwo.ShowStats();
- _fighterOne.RangedCombatAttack(_fighterTwo);
- _fighterTwo.RangedCombatAttack(_fighterOne);
- _fighterOne.MeleeCombatAttack(_fighterTwo);
- _fighterTwo.MeleeCombatAttack(_fighterOne);
- ShowBattleResult();
- Console.ReadKey();
- Console.Clear();
- }
- if (_fighterOne.isAlive)
- {
- _squadOne.ReturnFighter(_fighterOne);
- }
- else if (_fighterTwo.isAlive)
- {
- _squadTwo.ReturnFighter(_fighterTwo);
- }
- }
- ShowFinalBattleResult();
- }
- public void ShowFinalBattleResult()
- {
- if(_squadOne.IsDestroyed && _squadTwo.IsDestroyed)
- {
- Console.WriteLine("Оба отряда уничтожены!");
- }
- else if (_squadOne.IsDestroyed)
- {
- Console.WriteLine("В этой битве побеждает первый отряд!");
- _squadOne.ShowInfo();
- }
- else if (_squadTwo.IsDestroyed)
- {
- Console.WriteLine("В этой битве побеждает второй отряд!");
- _squadTwo.ShowInfo();
- }
- }
- public void ShowBattleResult()
- {
- Console.SetCursorPosition(0, 7);
- if (_fighterOne.isDead && _fighterTwo.isDead)
- {
- Console.WriteLine("Оба бойца погибли.");
- }
- else if (_fighterOne.isDead)
- {
- Console.WriteLine($"{_fighterTwo.Name} побеждает.");
- }
- else if (_fighterTwo.isDead)
- {
- Console.WriteLine($"{_fighterOne.Name} побеждает.");
- }
- }
- }
- class Squad
- {
- private List<Fighter> _fighters = new List<Fighter>();
- public Squad()
- {
- _fighters.Add(new Infantry("Пехотинец", 50, 400, 5, 100, 200, true));
- _fighters.Add(new Marine("Морпех", 70, 200, 5, 100, 200, true));
- _fighters.Add(new Sniper("Снайпер", 30, 1500, 5, 100, 300, true));
- _fighters.Add(new MachineGunner("Пулемётчик", 50, 1500, 10, 100, 200, true));
- }
- public bool IsDestroyed => _fighters != null;
- public bool IsReadyFight()
- {
- if(_fighters.Count != 0)
- {
- return true;
- }
- return false;
- }
- public void ReturnFighter(Fighter fighter)
- {
- _fighters.Add(fighter);
- }
- public Fighter GiveFighter()
- {
- int randomFighterIndex = Utils.GetRandomNumber(_fighters.Count);
- Fighter fighter;
- fighter = _fighters[randomFighterIndex];
- _fighters.Remove(fighter);
- return fighter;
- }
- public void ShowInfo()
- {
- foreach (var fighter in _fighters)
- {
- fighter.ShowStats();
- }
- }
- }
- class Fighter
- {
- public bool isDead => Health <= 0;
- public bool isAlive => Health > 0;
- protected bool IsRangedCombat;
- public Fighter(string name, int armor, int health,int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
- {
- Name = name;
- Armor = armor;
- Health = health;
- AmmoQuantity = ammoQuantity;
- DamageInMeleeCombat = damageInMeleeCombat;
- DamageInRangedCombat = damageInRangedCombat;
- IsRangedCombat = isRangedCombat;
- }
- public string Name { get; private set; }
- public int Armor { get; private set; }
- public int Health { get; private set; }
- public int AmmoQuantity { get; private set; }
- public int DamageInMeleeCombat { get; private set; }
- public int DamageInRangedCombat { get; private set; }
- public virtual void MeleeCombatAttack(Fighter fighter)
- {
- if(AmmoQuantity < 0)
- {
- IsRangedCombat = false;
- fighter.TakeDamage(DamageInMeleeCombat);
- AmmoQuantity = 0;
- }
- }
- public virtual void RangedCombatAttack(Fighter fighter)
- {
- AmmoQuantity--;
- if (AmmoQuantity > 0)
- {
- fighter.TakeDamage(DamageInRangedCombat);
- }
- else if (AmmoQuantity == 0)
- {
- Console.WriteLine($"У бойца {Name} закончились патроны! Он берет лопату и идет в бой!");
- }
- }
- public void TakeDamage(int damage)
- {
- Health -= damage - Armor;
- }
- public void ShowStats()
- {
- Console.WriteLine($"{Name}|Броня:{Armor}|Жизни:{Health}|Кол-во патронов:{AmmoQuantity}|Урон в рукопашном бою:{DamageInMeleeCombat}|Урон в дальнем бою:{DamageInRangedCombat}");
- }
- }
- class Infantry : Fighter
- {
- private int _attackCounter = 0;
- private int _damageGrenade = 50;
- public Infantry(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
- : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
- public override void RangedCombatAttack(Fighter fighter)
- {
- base.RangedCombatAttack(fighter);
- if (IsRangedCombat == true)
- {
- GrenadeThrow(fighter);
- }
- }
- public void GrenadeThrow(Fighter fighter)
- {
- _attackCounter++;
- if (_attackCounter % 3 == 0)
- {
- fighter.TakeDamage(_damageGrenade);
- Console.WriteLine("Пехотинец бросает гранату!");
- }
- }
- }
- class Marine : Fighter
- {
- public Marine(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
- : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
- }
- class Sniper : Fighter
- {
- public Sniper(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
- : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
- }
- class MachineGunner : Fighter
- {
- public MachineGunner(string name, int armor, int health, int ammoQuantity, int damageInMeleeCombat, int damageInRangedCombat, bool isRangedCombat)
- : base(name, armor, health, ammoQuantity, damageInMeleeCombat, damageInRangedCombat, isRangedCombat) { }
- }
- class Utils
- {
- private static Random _random = new Random();
- public static int GetRandomNumber(int max)
- {
- return _random.Next(max);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement