Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Battle
- {
- class Program
- {
- static void Main(string[] args)
- {
- Arena arena = new Arena();
- arena.ShowFighters();
- arena.ChooseFighters();
- arena.FightBattle();
- arena.ShowWinner();
- }
- }
- class Arena
- {
- private Fighter _rightFighter;
- private Fighter _leftFighter;
- private Fighter[] _fighters = new Fighter[]
- {
- new Warrior("Gorro", 96, 10, 20),
- new Vampire("Crowser", 100, 9, 22),
- new Knight("Basil", 103, 11, 19),
- new PowerMan("Diablo", 97, 10, 21),
- new FateKnight("Phill", 100, 11, 20),
- };
- public void ShowFighters()
- {
- for (int i = 0; i < _fighters.Length; i++)
- {
- Console.Write(i + 1 + "\t");
- _fighters[i].ShowStats();
- }
- }
- public void ChooseFighters()
- {
- int leftFighterIndex;
- Console.Write("\nВыберите бойца правых врат: ");
- int rightFighterIndex = UserUtils.GetLimitedNumberFromUser(1, _fighters.Length) - 1;
- _rightFighter = _fighters[rightFighterIndex];
- Console.Write("Выберите бойца левых врат: ");
- do {
- leftFighterIndex = UserUtils.GetLimitedNumberFromUser(1, _fighters.Length) - 1;
- }
- while (rightFighterIndex == leftFighterIndex);
- _leftFighter = _fighters[leftFighterIndex];
- }
- public void FightBattle()
- {
- Console.WriteLine($"\nНачинаем битву между {_rightFighter.Name} и {_leftFighter.Name}");
- while (_rightFighter.Health > 0 && _leftFighter.Health > 0)
- {
- _rightFighter.Attack(_leftFighter);
- _leftFighter.Attack(_rightFighter);
- _rightFighter.ShowStats();
- _leftFighter.ShowStats();
- }
- }
- public void ShowWinner()
- {
- if (_rightFighter.Health > 0)
- Console.WriteLine($"Победил боец правых врат {_rightFighter.Name}");
- else if (_leftFighter.Health > 0)
- Console.WriteLine($"Победил боец левых врат {_leftFighter.Name}");
- else
- Console.WriteLine("Сегодня победителя нет");
- }
- }
- class UserUtils
- {
- public static int GetNumberFromUser()
- {
- string userInput;
- int userNumber;
- bool isNumber = false;
- do
- {
- userInput = Console.ReadLine();
- isNumber = int.TryParse(userInput, out userNumber);
- }
- while (isNumber == false);
- return userNumber;
- }
- public static int GetLimitedNumberFromUser(int minValue, int maxValue)
- {
- int userNumber;
- do
- {
- userNumber = GetNumberFromUser();
- }
- while (userNumber < minValue || userNumber > maxValue);
- return userNumber;
- }
- }
- abstract class Fighter
- {
- protected static Random Random;
- protected int SpecialAttackChance = 33;
- protected int MaxChance = 100;
- protected int CooldownTime = 3;
- protected int Cooldown;
- static Fighter()
- {
- Random = new Random();
- }
- public Fighter(string name, int health, int armor, int damage)
- {
- Name = name;
- Health = health;
- Armor = armor;
- Damage = damage;
- Cooldown = 0;
- }
- public string Name { get; protected set; }
- public int Health { get; protected set; }
- public int Armor { get; protected set; }
- public int Damage { get; protected set; }
- public abstract void InflictSpecial(Fighter rival);
- public virtual void ApplyDamage(int damage)
- {
- if (damage > Armor)
- Health -= damage - Armor;
- }
- public void Attack(Fighter rival)
- {
- if (Cooldown != 0)
- Cooldown--;
- if (Cooldown == 0 && Random.Next(MaxChance) < SpecialAttackChance)
- {
- InflictSpecial(rival);
- Cooldown = CooldownTime;
- }
- else
- {
- rival.ApplyDamage(Damage);
- }
- }
- public void ShowStats()
- {
- Console.WriteLine($"{Name}\t HP:{Health} DMG:{Damage} Armor:{Armor}");
- }
- }
- class Warrior : Fighter
- {
- private int _damageMultiplyer = 2;
- public Warrior(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void InflictSpecial(Fighter rival)
- {
- Console.WriteLine($"{Name} применяет Двойной Удар");
- rival.ApplyDamage(Damage * _damageMultiplyer);
- }
- }
- class Vampire : Fighter
- {
- private float _damageToHealthMultiplyer = 0.5f;
- public Vampire(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void InflictSpecial(Fighter rival)
- {
- Console.WriteLine($"{Name} применяет Укус Вампира");
- Health += (int)(Damage * _damageToHealthMultiplyer);
- rival.ApplyDamage(Damage);
- }
- }
- class Knight : Fighter
- {
- private int _extraArmor;
- public Knight(string name, int health, int armor, int damage) : base(name, health, armor, damage)
- {
- _extraArmor = 0;
- }
- public override void ApplyDamage(int damage)
- {
- Armor += _extraArmor;
- base.ApplyDamage(damage);
- Armor -= _extraArmor;
- _extraArmor = 0;
- }
- public override void InflictSpecial(Fighter rival)
- {
- Console.WriteLine($"{Name} применяет Кражу Доспехов");
- _extraArmor = rival.Armor;
- rival.ApplyDamage(Damage);
- }
- }
- class PowerMan : Fighter
- {
- public PowerMan(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void InflictSpecial(Fighter rival)
- {
- Console.WriteLine($"{Name} применяет Разрушение Доспехов");
- int damage = Damage + rival.Armor;
- rival.ApplyDamage(damage);
- }
- }
- class FateKnight : Fighter
- {
- private float _damageMultiplyer = 2.5f;
- public FateKnight(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
- public override void InflictSpecial(Fighter rival)
- {
- Console.WriteLine($"{Name} применяет Удар Судьбы");
- int damage = Random.Next((int)(Damage * _damageMultiplyer));
- rival.ApplyDamage(damage);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement