Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Ijunior
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- Arena arena = new Arena();
- arena.Work();
- }
- }
- class Arena
- {
- private Fighter _firstFighter;
- private Fighter _secondFigher;
- 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:
- Play();
- break;
- case CommandExit:
- isWork = false;
- break;
- default:
- Console.WriteLine("Некорректный ввод");
- break;
- }
- }
- }
- private void CreateFighters(List<Fighter> fighters)
- {
- fighters.Add(new Knight("Рыцарь"));
- fighters.Add(new Paladin("Паладин"));
- fighters.Add(new Barbarian("Варвар"));
- fighters.Add(new Magician("Маг"));
- fighters.Add(new Ninja("Ниндзя"));
- }
- private void ShowFighters(List<Fighter> fighters)
- {
- string separator = new string('-', 10);
- for (int i = 0; i < fighters.Count; i++)
- {
- Console.Write(i + 1 + " ");
- fighters[i].ShowInfo();
- Console.WriteLine(separator);
- }
- }
- private Fighter SelectFighter()
- {
- List<Fighter> fighters = new List<Fighter>();
- Fighter fighter = null;
- Console.Clear();
- fighters.Clear();
- CreateFighters(fighters);
- ShowFighters(fighters);
- while (fighter == null)
- {
- Console.Write("Выберите бойца: ");
- if (int.TryParse(Console.ReadLine(), out int number))
- {
- if (number > 0 && number <= fighters.Count)
- {
- fighter = fighters[number - 1];
- }
- else
- {
- Console.WriteLine("Такого номера нет");
- }
- }
- else
- {
- Console.WriteLine("Некорректный ввод");
- }
- }
- return fighter;
- }
- private void Play()
- {
- _firstFighter = SelectFighter();
- _secondFigher = SelectFighter();
- Fight();
- ShowResult();
- }
- private void Fight()
- {
- int round = 1;
- Console.Clear();
- while (_firstFighter.Health > 0 && _secondFigher.Health > 0)
- {
- Console.WriteLine("Раунд: " + round);
- round++;
- _firstFighter.Attack(_secondFigher);
- _secondFigher.Attack(_firstFighter);
- Console.WriteLine();
- }
- }
- private void ShowResult()
- {
- string separator = new string('*', 5);
- Console.Write(separator + " ");
- if (_firstFighter.Health <= 0 && _secondFigher.Health <= 0)
- {
- Console.Write("Ничья. Оба бойца умерли");
- }
- else if (_firstFighter.Health > _secondFigher.Health)
- {
- Console.Write(_firstFighter.Name + " выиграл");
- }
- else
- {
- Console.Write(_secondFigher.Name + " выиграл");
- }
- Console.WriteLine(" " + separator + "\n");
- }
- }
- class Fighter
- {
- public Fighter(string name)
- {
- Name = name;
- Health = CreateHealth();
- Damage = CreateDamage();
- }
- public string Name { get; }
- public int Health { get; protected set; }
- public int Damage { get; }
- public virtual void Attack(Fighter attackedFighter)
- {
- Console.WriteLine($"{Name} наносит {attackedFighter.Name} урон: {Damage}");
- attackedFighter.TakeDamage(Damage);
- }
- public virtual void TakeDamage(int damage)
- {
- Health -= damage;
- Console.WriteLine($"{Name} получает {damage} урона. Здоровье: {Health}");
- }
- public void ShowInfo()
- {
- Console.WriteLine($"Имя: {Name} \nЗдоровье: {Health} | Урон: {Damage}");
- }
- private int CreateHealth()
- {
- int minHealth = 85;
- int maxHealth = 101;
- return Utils.GetRandomNumber(minHealth, maxHealth);
- }
- private int CreateDamage()
- {
- int minDamage = 10;
- int maxDamage = 16;
- return Utils.GetRandomNumber(minDamage, maxDamage);
- }
- }
- class Knight : Fighter
- {
- public Knight(string name) : base(name) { }
- public override void Attack(Fighter attackedFighter)
- {
- int minChanceIncreaseDamage = 0;
- int maxChanceIncreaseDamage = 3;
- int percentIncreaseDamage = 2;
- if (Utils.GetRandomNumber(minChanceIncreaseDamage, maxChanceIncreaseDamage) == 0)
- {
- int increaseDamage = Damage * percentIncreaseDamage;
- Console.WriteLine($"{Name} наносит {attackedFighter.Name} двойной урон: {increaseDamage}");
- attackedFighter.TakeDamage(increaseDamage);
- }
- else
- {
- base.Attack(attackedFighter);
- }
- }
- }
- class Paladin : Fighter
- {
- private int _counterSpecialAttack;
- public Paladin(string name) : base(name)
- {
- _counterSpecialAttack = 0;
- }
- public override void Attack(Fighter attackedFighter)
- {
- int triggerSpecialAttack = 3;
- int counterAttack = 2;
- _counterSpecialAttack++;
- if (_counterSpecialAttack == triggerSpecialAttack)
- {
- for (int i = 0; i < counterAttack; i++)
- {
- Console.WriteLine($"{Name} наносит {attackedFighter.Name} урон: {Damage}");
- attackedFighter.TakeDamage(Damage);
- }
- _counterSpecialAttack = 0;
- }
- else
- {
- base.Attack(attackedFighter);
- }
- }
- }
- class Barbarian : Fighter
- {
- private int _heal;
- private int _rage;
- public Barbarian(string name) : base(name)
- {
- _heal = 15;
- _rage = 0;
- }
- public override void TakeDamage(int damage)
- {
- int triggerHeal = 3;
- base.TakeDamage(damage);
- if (_rage == triggerHeal)
- {
- _rage = 0;
- Health += _heal;
- Console.WriteLine($"{Name} лечится на {_heal}. Здоровье: {Health}");
- }
- else
- {
- _rage++;
- Console.Write("Ярость повышена.\n");
- }
- }
- }
- class Magician : Fighter
- {
- private int _mana;
- private int _fireballDamage;
- private int _fireballCost;
- public Magician(string name) : base(name)
- {
- _mana = 30;
- _fireballDamage = Damage + 10;
- _fireballCost = 10;
- }
- public override void Attack(Fighter attackedFighter)
- {
- if (IsManaEnough())
- {
- _mana -= _fireballCost;
- Console.WriteLine($"{Name} наносит {attackedFighter.Name} урон заклинанием 'Огненный шар': {_fireballDamage}");
- attackedFighter.TakeDamage(_fireballDamage);
- }
- else
- {
- base.Attack(attackedFighter);
- }
- }
- private bool IsManaEnough()
- {
- return _mana - _fireballCost >= 0;
- }
- }
- class Ninja : Fighter
- {
- public Ninja(string name) : base(name) { }
- public override void TakeDamage(int damage)
- {
- int minChanceEvasion = 0;
- int maxChanceEvasion = 5;
- if (Utils.GetRandomNumber(minChanceEvasion, maxChanceEvasion) == 0)
- {
- Console.WriteLine($"{Name} уворачивается от атаки. Здоровье: {Health}");
- }
- else
- {
- base.TakeDamage(damage);
- }
- }
- }
- 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