Advertisement
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 gladiatorialFight
- {
- class Program
- {
- static void Main()
- {
- Arena arena = new Arena();
- arena.Work();
- }
- }
- class Arena
- {
- private List<Fighter> _figthers = new List<Fighter>(1);
- private List<Fighter> _survivors = new List<Fighter>();
- public void Work()
- {
- bool isRun = true;
- while(isRun)
- {
- ChooseFighters();
- if(isRun)
- StartFight();
- }
- }
- private void ChooseFighters()
- {
- while (_figthers.Count != 2)
- {
- Console.Write("[1] - выбрать готового бойца\n" +
- "[2] - выбрать выжившего бойца.\n");
- switch (Console.ReadLine())
- {
- case "1":
- ChooseRandomFighther();
- break;
- case "2":
- ChooseSurviour();
- break;
- default:
- Console.WriteLine("Неправильный ввод!");
- break;
- }
- }
- }
- private void ChooseRandomFighther()
- {
- Random rand = new Random();
- Console.WriteLine("Выберите бойца:\n" +
- "[1] - Варвар\n" +
- "[2] - Маг\n" +
- "[3] - Лучник\n" +
- "[4] - Рыцарь\n" +
- "[5] - Ассассин\n");
- Console.Write("Ввод: ");
- switch (Console.ReadLine())
- {
- case "1":
- Warrior warrior = new Warrior(rand.Next(70, 100), rand.Next(20, 30), rand.Next(0, 10), "Берсерк");
- _figthers.Add(warrior);
- break;
- case "2":
- Mage mage = new Mage(rand.Next(50, 90), rand.Next(20, 40), rand.Next(5, 10), "Маг");
- _figthers.Add(mage);
- break;
- case "3":
- Archer archer = new Archer(rand.Next(40, 80), rand.Next(15, 30), rand.Next(0, 10), "Лучник");
- _figthers.Add(archer);
- break;
- case "4":
- ShieldMan shieldMan = new ShieldMan(rand.Next(30, 60), rand.Next(20, 35), rand.Next(10, 15), "Рыцарь");
- _figthers.Add(shieldMan);
- break;
- case "5":
- Assassin assassin = new Assassin(rand.Next(40, 70), rand.Next(25, 35), rand.Next(0, 6), "Ассассин");
- _figthers.Add(assassin);
- break;
- default:
- Console.WriteLine("Ошибка!");
- break;
- }
- }
- private void ChooseSurviour()
- {
- bool isChose = true;
- if(_survivors.Count == 0)
- {
- Console.WriteLine("Нет выживших бойцов!");
- return;
- }
- foreach (var survivor in _survivors)
- {
- Console.WriteLine($"№{_survivors.Count}: {survivor.Name}; HP = {survivor.CurrentHealth }; DMG = {survivor.CurrentDamage}; ARM = {survivor.CurrentArmor}");
- }
- Console.Write("Ввод: ");
- while (isChose)
- {
- isChose = int.TryParse(Console.ReadLine(), out int number);
- if (isChose)
- {
- --number;
- foreach (var figther in _figthers)
- {
- if(figther == _survivors[number])
- {
- Console.WriteLine("Этот выживший уже выбран!");
- return;
- }
- }
- _figthers.Add(_survivors[number]);
- isChose = false;
- }
- else if (isChose)
- {
- Console.WriteLine("Такого выжившего нет. Введите занового.");
- }
- }
- }
- private void StartFight()
- {
- Console.Clear();
- while (IsGameOver() == false)
- {
- ShowFightersStats();
- Console.WriteLine("\n");
- Hit(_figthers[0], _figthers[1]);
- Console.WriteLine();
- Hit(_figthers[1], _figthers[0]);
- Console.ReadKey(true);
- Console.Clear();
- }
- ClearFightersList();
- }
- private void Hit(Fighter attacker, Fighter defender)
- {
- Console.WriteLine($"{attacker.Name} наносит удар...");
- attacker.Attack(defender);
- }
- private void ShowFightersStats()
- {
- _figthers[0].ShowStats();
- Console.WriteLine("=====================");
- _figthers[1].ShowStats();
- }
- private bool IsFighterDie(Fighter fighter, Fighter deadMan)
- {
- if (deadMan.IsAlive() == false)
- {
- Console.WriteLine(deadMan.Name + " умер!");
- fighter.RefreshStats();
- foreach (var survivor in _survivors)
- {
- if (survivor == fighter)
- {
- Console.WriteLine(fighter.Name +" снова выжил!");
- return true;
- }
- }
- _survivors.Add(fighter);
- return true;
- }
- return false;
- }
- private bool IsGameOver()
- {
- if(IsFighterDie(_figthers[1], _figthers[0]))
- {
- return true;
- }
- else if (IsFighterDie(_figthers[0], _figthers[1]))
- {
- return true;
- }
- else if (IsFighterDie(_figthers[1], _figthers[0]) && IsFighterDie(_figthers[0], _figthers[1]))
- {
- Console.WriteLine("Оба бойца умерли!");
- return true;
- }
- return false;
- }
- private void ClearFightersList()
- {
- Console.WriteLine("Освобождаем Арену...");
- _figthers.Clear();
- }
- }
- abstract class Fighter
- {
- public bool IsAvoid { get; protected set; }
- public bool IsPoisonAttack { get; protected set; }
- public int ReloadAbillityCounter { get; protected set; }
- public int CurrentHealth { get; protected set; }
- public int MaxHealth { get; protected set; }
- public int CurrentDamage { get; protected set; }
- public int MaxDamage { get; protected set; }
- public int CurrentArmor { get; protected set; }
- public int MaxArmor { get; protected set; }
- public string Name { get; protected set; }
- public abstract void UseAbility(Fighter enemy);
- public void Attack(Fighter enemy)
- {
- if (IsAbilityReady())
- {
- UseAbility(enemy);
- }
- else
- {
- enemy.TakeDamage(CurrentDamage);
- }
- }
- public void TakeDamage(int damage)
- {
- if (IsAvoid)
- {
- Console.WriteLine(Name + " увернулся!");
- IsAvoid = false;
- return;
- }
- else if (IsPoisonAttack)
- {
- Console.WriteLine("Ядовитая атака проходит сквозь броню!");
- IsPoisonAttack = false;
- CurrentHealth -= damage;
- return;
- }
- CurrentHealth -= damage - (CurrentArmor / 2);
- if (CurrentHealth < 0)
- CurrentHealth = 0;
- if (CurrentArmor > 0)
- {
- CurrentArmor -= damage - (CurrentArmor / 10);
- if (CurrentArmor < 0)
- {
- CurrentArmor = 0;
- Console.WriteLine($"{Name} теряет броню!");
- }
- }
- }
- public bool IsAbilityReady()
- {
- if (ReloadAbillityCounter == 0)
- {
- Console.WriteLine("Способность готова!");
- return true;
- }
- else if (ReloadAbillityCounter > 0)
- {
- Console.WriteLine("Способность перезаряжается! Осталось: " + ReloadAbillityCounter--);
- }
- return false;
- }
- public bool IsAlive()
- {
- return CurrentHealth > 0;
- }
- public virtual void ShowStats()
- {
- Console.WriteLine($"{Name}:HP = {CurrentHealth }; DMG = {CurrentDamage}; ARM = {CurrentArmor}");
- }
- public void RefreshStats()
- {
- CurrentHealth = MaxHealth;
- CurrentArmor = MaxArmor;
- CurrentDamage = MaxDamage;
- }
- }
- class Warrior : Fighter
- {
- public Warrior(int health, int damage, int armor, string name)
- {
- MaxHealth = health;
- CurrentHealth = health;
- MaxDamage = damage;
- CurrentDamage = damage;
- MaxArmor = armor;
- CurrentArmor = armor;
- Name = name;
- }
- public override void UseAbility(Fighter enemy)
- {
- Console.WriteLine("Варвар использует Гриб-Берсерка!");
- Random rand = new Random();
- CurrentHealth += rand.Next(5, 26);
- CurrentDamage += rand.Next(5, 11);
- CurrentArmor -= rand.Next(5, 10);
- if (CurrentArmor < 0)
- CurrentArmor = 0;
- ShowStats();
- ReloadAbillityCounter = 3;
- }
- }
- class Mage : Fighter
- {
- public Mage(int health, int damage, int armor, string name)
- {
- MaxHealth = health;
- CurrentHealth = health;
- MaxDamage = damage;
- CurrentDamage = damage;
- MaxArmor = armor;
- CurrentArmor = armor;
- Name = name;
- }
- public override void UseAbility(Fighter enemy)
- {
- Console.WriteLine("Маг кастует огненный шар!");
- ReloadAbillityCounter = 5;
- Random rand = new Random();
- enemy.TakeDamage(rand.Next(20, 40));
- }
- }
- class Archer : Fighter
- {
- public Archer(int health, int damage, int armor, string name)
- {
- MaxHealth = health;
- CurrentHealth = health;
- MaxDamage = damage;
- CurrentDamage = damage;
- MaxArmor = armor;
- CurrentArmor = armor;
- Name = name;
- }
- public override void UseAbility(Fighter enemy)
- {
- Console.WriteLine("Лучник стреляет в ответ!");
- ReloadAbillityCounter = 2;
- Random rand = new Random();
- enemy.TakeDamage(rand.Next(20, 40));
- IsAvoid = true;
- }
- }
- class ShieldMan : Fighter
- {
- public ShieldMan(int health, int damage, int armor, string name)
- {
- MaxHealth = health;
- CurrentHealth = health;
- MaxDamage = damage;
- CurrentDamage = damage;
- MaxArmor = armor;
- CurrentArmor = armor;
- Name = name;
- }
- public override void UseAbility(Fighter enemy)
- {
- Console.WriteLine("Рыцарь закрылся щитом!");
- Random rand = new Random();
- CurrentArmor += rand.Next(10, 20);
- ShowStats();
- IsAvoid = true;
- ReloadAbillityCounter = 2;
- }
- }
- class Assassin : Fighter
- {
- public Assassin(int health, int damage, int armor, string name)
- {
- MaxHealth = health;
- CurrentHealth = health;
- MaxDamage = damage;
- CurrentDamage = damage;
- MaxArmor = armor;
- CurrentArmor = armor;
- Name = name;
- }
- public override void UseAbility(Fighter enemy)
- {
- Console.WriteLine("Ассассин бросает ядовитые кинжалы!");
- Random rand = new Random();
- ReloadAbillityCounter = 1;
- enemy.TakeDamage(rand.Next(20, 30));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement