Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ООП
- {
- class Program
- {
- static void Main(string[] args)
- {
- Arena arena = new Arena();
- arena.Play();
- }
- }
- class Arena
- {
- private Fighter[] _fighters;
- public Arena()
- {
- _fighters = CreateFighters();
- }
- public void Play()
- {
- bool isPlay = true;
- while (isPlay)
- {
- Console.Clear();
- for (int i = 0; i < _fighters.Length; i++)
- {
- Console.Write($"#{i + 1} | ");
- _fighters[i].ShowInfo();
- }
- Fighter firstFighter = SelectFighter("первого");
- Fighter secondFighter = SelectFighter("второго");
- Fight(firstFighter, secondFighter);
- ShowWinner(firstFighter, secondFighter);
- Console.ReadKey();
- }
- }
- private Fighter[] CreateFighters()
- {
- Fighter[] fighters = {
- new Warrior("Jack", 140, 4, 12, 0),
- new Magician("Ceul", 140, 2, 14, 30),
- new Witch("Sony", 100, 0, 14, 0),
- new Soldier("Luis", 140, 2, 16, 1),
- new Monk("Fred", 110, 0, 12, 0)
- };
- return fighters;
- }
- private Fighter SelectFighter(string sequence)
- {
- int fighterIndex;
- bool correctImput = false;
- while (correctImput == false)
- {
- Console.Write($"\nВведите номер {sequence} бойца: ");
- string userInput = Console.ReadLine();
- correctImput = int.TryParse(userInput, out fighterIndex);
- --fighterIndex;
- if (fighterIndex >= 0 && fighterIndex < _fighters.Length)
- {
- Fighter[] fighters = CreateFighters();
- return fighters[fighterIndex];
- }
- else
- {
- correctImput = false;
- Console.WriteLine("Некорректный ввод!");
- Console.ReadKey();
- }
- }
- return null;
- }
- private void Fight(Fighter firstFighter, Fighter secondFighter)
- {
- bool isFight = true;
- bool actsFirstFighter = true;
- while (isFight)
- {
- Console.Clear();
- firstFighter.ShowInfo();
- secondFighter.ShowInfo();
- if (actsFirstFighter)
- {
- Console.WriteLine("Действия ПЕРВОГО бойца:");
- firstFighter.ToAttack(secondFighter);
- actsFirstFighter = false;
- }
- else
- {
- Console.WriteLine("Действия ВТОРОГО бойца:");
- secondFighter.ToAttack(firstFighter);
- actsFirstFighter = true;
- }
- if (firstFighter.Health <= 0 || secondFighter.Health <= 0)
- isFight = false;
- Console.ReadKey();
- }
- }
- private void ShowWinner(Fighter firstFighter, Fighter secondFighter)
- {
- if (firstFighter.Health <= 0)
- Console.WriteLine($"Выиграл второй боец по имени {secondFighter.Name}!");
- else
- Console.WriteLine($"Выиграл первый боец по имени {firstFighter.Name}!");
- }
- }
- abstract class Fighter
- {
- protected string Type;
- protected int Armor;
- protected int Damage;
- protected int ChanceUseSkill;
- protected int NumberHit = 0;
- protected int СountHit;
- protected string DescriptionFeature;
- public string Name { get; protected set; }
- public int Health { get; protected set; }
- public Fighter(string name, int health, int armor, int damage, int chanceUseSkill)
- {
- Name = name;
- Health = health;
- Armor = armor;
- Damage = damage;
- ChanceUseSkill = chanceUseSkill;
- }
- public void ShowInfo()
- {
- Console.WriteLine($"{Name} | {Type} | {Health} HP | {Armor} ARM | {Damage} DMG | {DescriptionFeature}");
- }
- public virtual int GiveDamage()
- {
- NumberHit++;
- return Damage;
- }
- public virtual void TakeDamage(int damage)
- {
- if (damage == 0)
- {
- Console.WriteLine("BLOCK!");
- }
- else if (Armor >= damage)
- {
- Health -= 1;
- Console.WriteLine($"HIT = 1");
- }
- else
- {
- Health -= damage - Armor;
- Console.WriteLine($"HIT = {damage - Armor}");
- }
- }
- public void ToAttack(Fighter opponent)
- {
- opponent.TakeDamage(GiveDamage());
- }
- protected bool UseSkillOnChance(int probability)
- {
- Random random = new Random();
- int percent = 101;
- int chance = random.Next(percent);
- return (chance < probability);
- }
- }
- class Warrior : Fighter
- {
- public Warrior(string name, int health, int armor, int damage, int chanceUseSkill) : base(name, health, armor, damage, chanceUseSkill)
- {
- СountHit = 3;
- Type = "Воин ";
- DescriptionFeature = $"Каждый 3 удар наносит удвоенный урон";
- }
- public override int GiveDamage()
- {
- base.GiveDamage();
- int damage = Damage;
- if (NumberHit % СountHit == 0)
- {
- damage += damage;
- Console.WriteLine("CRITICAL!");
- }
- return damage;
- }
- }
- class Magician : Fighter
- {
- public Magician(string name, int health, int armor, int damage, int chanceUseSkill) : base(name, health, armor, damage, chanceUseSkill)
- {
- Type = "Маг ";
- DescriptionFeature = $"Имеет {ChanceUseSkill}% увернуться от полученного урона";
- }
- public override void TakeDamage(int damage)
- {
- if (UseSkillOnChance(ChanceUseSkill))
- damage = 0;
- base.TakeDamage(damage);
- }
- }
- class Witch : Fighter
- {
- public Witch(string name, int health, int armor, int damage, int chanceUseSkill) : base(name, health, armor, damage, chanceUseSkill)
- {
- Type = "Ведьма";
- DescriptionFeature = $"При получении урона немного себя лечит";
- }
- public override void TakeDamage(int damage)
- {
- base.TakeDamage(damage);
- int healthUp = 0;
- if (Health > 0)
- healthUp = Convert.ToInt32(Math.Round(Math.Sqrt(Health)));
- if(healthUp > 0)
- Console.WriteLine($"+{healthUp} HP (Ведьма немного излечилась!)");
- Health += healthUp;
- }
- }
- class Soldier : Fighter
- {
- public Soldier(string name, int health, int armor, int damage, int chanceUseSkill) : base(name, health, armor, damage, chanceUseSkill)
- {
- Type = "Солдат";
- DescriptionFeature = $"Имеет {chanceUseSkill}% шанс сдаться!";
- }
- public override void TakeDamage(int damage)
- {
- if (UseSkillOnChance(ChanceUseSkill))
- {
- damage = int.MaxValue;
- Console.WriteLine("Солдат сдался!");
- }
- base.TakeDamage(damage);
- }
- }
- class Monk : Fighter
- {
- public Monk(string name, int health, int armor, int damage, int chanceUseSkill) : base(name, health, armor, damage, chanceUseSkill)
- {
- Type = "Монах ";
- DescriptionFeature = $"Получает в 2 раза меньше урона";
- }
- public override void TakeDamage(int damage)
- {
- int reductionFactorDamage = 2;
- damage /= reductionFactorDamage;
- base.TakeDamage(damage);
- }
- }
- }
Add Comment
Please, Sign In to add comment