Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- internal class Program
- {
- static void Main(string[] args)
- {
- Arena arena = new Arena();
- arena.Work();
- }
- }
- abstract class Fighter
- {
- private static Random _random = new Random();
- protected string Name;
- protected int Damage;
- protected float Armor;
- private int _minDamage = 100;
- private int _maxDamage = 200;
- private float _damageResistance;
- public Fighter(string name, int health, int armor, int damage)
- {
- Name = name;
- Health = health;
- Damage = damage;
- Armor = armor;
- }
- public float Health { get; protected set; }
- public string NameFighter
- {
- get { return Name; }
- }
- public void ShowStats()
- {
- Console.WriteLine($"Боец - {Name}, здоровье: {Health}, наносимый урон: {_minDamage} - {_maxDamage}, броня {Armor}.");
- }
- public virtual void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health} урон: {Damage}");
- }
- public virtual void Attack(Fighter enemy)
- {
- Damage = _random.Next(_minDamage, _maxDamage);
- enemy.TakeDamage(Damage);
- }
- private void TakeDamage(float damage)
- {
- _damageResistance = Armor / 100;
- float incomingDamageResistanceMultiplier = 1 - _damageResistance;
- Health -= damage * incomingDamageResistanceMultiplier;
- }
- }
- class Knight : Fighter
- {
- private int _mana = 0;
- public Knight(string name, int health, int armor, int damage, int mana) : base(name, health, armor, damage)
- {
- _mana = mana;
- }
- public override void Attack(Fighter enemy)
- {
- if (_mana >= 3)
- {
- UseUltimate();
- _mana -= 3;
- }
- else
- {
- base.Attack(enemy);
- _mana++;
- }
- }
- public override void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health} мана: {_mana} урон: {Damage}");
- }
- private void UseUltimate()
- {
- Health += 250;
- }
- }
- class Barbarian : Fighter
- {
- private int _countAttack;
- public Barbarian(string name, int health, int armor, int damage, int countAttack) : base(name, health, armor, damage)
- {
- _countAttack = countAttack;
- }
- public override void Attack(Fighter enemy)
- {
- if (_countAttack >= 4)
- {
- UseUltimate(enemy);
- _countAttack -= 4;
- }
- else
- {
- base.Attack(enemy);
- _countAttack++;
- }
- }
- public override void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health} счетчик атаки: {_countAttack} урон: {Damage}");
- }
- private void UseUltimate(Fighter enemy)
- {
- base.Attack(enemy);
- base.Attack(enemy);
- base.Attack(enemy);
- }
- }
- class Paladin : Fighter
- {
- private int _mana = 0;
- private int _durationAttackUltimate = -1;
- public Paladin(string name, int health, int armor, int damage, int mana) : base(name, health, armor, damage)
- {
- _mana = mana;
- }
- public override void Attack(Fighter enemy)
- {
- if (_mana >= 5)
- {
- AttackUltimate();
- _durationAttackUltimate += 4;
- base.Attack(enemy);
- _mana -= 5;
- }
- else if (_durationAttackUltimate == 4)
- {
- base.Attack(enemy);
- _mana++;
- _durationAttackUltimate--;
- }
- else if (_durationAttackUltimate == 3)
- {
- base.Attack(enemy);
- _mana++;
- _durationAttackUltimate--;
- }
- else if (_durationAttackUltimate == 2)
- {
- base.Attack(enemy);
- _mana++;
- _durationAttackUltimate--;
- }
- else if (_durationAttackUltimate == 1)
- {
- base.Attack(enemy);
- _mana++;
- _durationAttackUltimate--;
- }
- else if (_durationAttackUltimate == 0)
- {
- base.Attack(enemy);
- _mana++;
- _durationAttackUltimate--;
- Armor -= 75;
- }
- else if (_durationAttackUltimate <= -1)
- {
- base.Attack(enemy);
- _mana++;
- }
- }
- public override void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health} мана: {_mana} броня {Armor}");
- }
- private void AttackUltimate()
- {
- Armor += 75;
- }
- }
- class Amazon : Fighter
- {
- public Amazon(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void Attack(Fighter enemy)
- {
- if (Damage >= 150)
- {
- base.Attack(enemy);
- AttackUltimate();
- }
- else
- {
- base.Attack(enemy);
- }
- }
- public override void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health} урон: {Damage}");
- }
- private void AttackUltimate()
- {
- float recoveryHealth = 0.5f;
- int maxPercent = 100;
- Health += Damage / maxPercent * Armor * recoveryHealth;
- }
- }
- class SkeletonKing : Fighter
- {
- public SkeletonKing(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void Attack(Fighter enemy)
- {
- if (Health <= 120)
- {
- AttackUltimate();
- base.Attack(enemy);
- }
- else
- {
- base.Attack(enemy);
- }
- }
- public override void ShowCurrentStats()
- {
- Console.WriteLine($"{Name} здоровье: {Health}");
- }
- private void AttackUltimate()
- {
- Health += 85;
- }
- }
- class Arena
- {
- public void Work()
- {
- int lowerBoundHealth = 0;
- Fighter[] fightersFirst =
- {
- new Knight("Рыцарь", 1500, 15, 100, 0),
- new Barbarian("Варвар", 1500, 10, 100, 0),
- new Paladin("Паладин", 1500, 10, 100, 0),
- new Amazon("Амазонка", 1500, 10, 100),
- new SkeletonKing("Скелетон", 1500, 10, 100),
- };
- for (int i = 0; i < fightersFirst.Length; i++)
- {
- Console.Write(i + 1 + " ");
- fightersFirst[i].ShowStats();
- }
- Console.WriteLine("\n** " + new string('-', 25) + " **");
- Console.Write("\nВыберите номер первого бойца: ");
- int fighterNumber = Convert.ToInt32(Console.ReadLine()) - 1;
- Fighter firstFighter = fightersFirst[fighterNumber];
- Fighter[] fightersSecond =
- {
- new Knight("Рыцарь", 1500, 15, 100, 0),
- new Barbarian("Варвар", 1500, 10, 100, 0),
- new Paladin("Паладин", 1500, 10, 100, 0),
- new Amazon("Амазонка", 1500, 10, 100),
- new SkeletonKing("Скелетон", 1500, 10, 100),
- };
- Console.Write("\nВыберите номер второго бойца: ");
- fighterNumber = Convert.ToInt32(Console.ReadLine()) - 1;
- Fighter secondFighter = fightersSecond[fighterNumber];
- Console.WriteLine("\n** " + new string('-', 25) + " **");
- while (firstFighter.Health > 0 && secondFighter.Health > 0)
- {
- firstFighter.Attack(secondFighter);
- secondFighter.Attack(firstFighter);
- firstFighter.ShowCurrentStats();
- secondFighter.ShowCurrentStats();
- Console.ReadKey();
- }
- if (firstFighter.Health <= lowerBoundHealth && secondFighter.Health <= lowerBoundHealth)
- {
- Console.WriteLine("Ничья. Оба воина пали.");
- }
- else if (firstFighter.Health <= lowerBoundHealth)
- {
- Console.WriteLine($"{firstFighter.NameFighter} пал смертью храбрых!");
- }
- else if (secondFighter. Health <= lowerBoundHealth)
- {
- Console.WriteLine($"{secondFighter.NameFighter} повержен!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement