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<Figther> _figthers = new List<Figther>(1);
- private List<Figther> _survivors = new List<Figther>();
- public void Work()
- {
- bool isRun = true;
- while(isRun)
- {
- ChooseFighters(ref isRun);
- if(isRun)
- StartFight();
- }
- }
- private void ChooseFighters(ref bool isRun)
- {
- while (_figthers.Count != 2 && isRun)
- {
- Console.Write("[1] - выбрать готового бойца\n" +
- "[2] - выбрать выжившего бойца.\n" +
- "[3] - выход\n" +
- "Ввод: ");
- switch (Console.ReadLine())
- {
- case "1":
- ChooseRandomFighther();
- break;
- case "2":
- ChooseSurviour();
- break;
- case "3":
- isRun = false;
- 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 survior in _survivors)
- {
- Console.WriteLine($"№{_survivors.Count}: {survior.Name}; HP = {survior.CurrentHealth }; DMG = {survior.CurrentDamage}; ARM = {survior.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("Такого выжившего нет. Введите занового.");
- }
- }
- }
- public void StartFight()
- {
- Console.Clear();
- while (IsGameover())
- {
- ShowFightersStats();
- Console.WriteLine("\n");
- Console.WriteLine($"{_figthers[0].Name} наносит удар...");
- _figthers[0].Attack(_figthers[1]);
- Console.WriteLine();
- Console.WriteLine($"{_figthers[1].Name} наносит удар...");
- _figthers[1].Attack(_figthers[0]);
- Console.ReadKey(true);
- Console.Clear();
- }
- ClearFightersList();
- }
- public void ShowFightersStats()
- {
- _figthers[0].ShowStats();
- Console.WriteLine("=====================");
- _figthers[1].ShowStats();
- }
- public bool IsGameover()
- {
- bool flag = true;
- if (_figthers[0].IsAlive() == false)
- {
- Console.WriteLine("1 боец умер!");
- _figthers[1].RefreshStats();
- foreach (var fighter in _survivors)
- {
- if(fighter == _figthers[1])
- {
- Console.WriteLine("Боец снова выжил!");
- flag = false;
- return flag;
- }
- }
- _survivors.Add(_figthers[1]);
- flag = false;
- }
- else if (_figthers[1].IsAlive() == false)
- {
- Console.WriteLine("2 боец умер!");
- _figthers[0].RefreshStats();
- foreach (var fighter in _survivors)
- {
- if (fighter == _figthers[0])
- {
- Console.WriteLine("Боец снова выжил!");
- flag = false;
- return flag;
- }
- }
- _survivors.Add(_figthers[0]);
- flag = false;
- }
- else if (_figthers[0].IsAlive() && _figthers[1].IsAlive() == false)
- {
- Console.WriteLine("Оба бойца умерли!");
- flag = false;
- }
- return flag;
- }
- public void ClearFightersList()
- {
- Console.WriteLine("Освобождаем Арену...");
- _figthers.Clear();
- }
- }
- abstract class Figther
- {
- 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(Figther enemy);
- public void Attack(Figther 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 virtual 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 : Figther
- {
- 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(Figther 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;
- }
- public override bool IsAbilityReady()
- {
- return base.IsAbilityReady();
- }
- }
- class Mage : Figther
- {
- 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(Figther enemy)
- {
- Console.WriteLine("Маг кастует огненный шар!");
- ReloadAbillityCounter = 5;
- Random rand = new Random();
- enemy.TakeDamage(rand.Next(20, 40));
- }
- public override bool IsAbilityReady()
- {
- return base.IsAbilityReady();
- }
- }
- class Archer : Figther
- {
- 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(Figther enemy)
- {
- Console.WriteLine("Лучник стреляет в ответ!");
- ReloadAbillityCounter = 2;
- Random rand = new Random();
- enemy.TakeDamage(rand.Next(20, 40));
- IsAvoid = true;
- }
- public override bool IsAbilityReady()
- {
- return base.IsAbilityReady();
- }
- }
- class ShieldMan : Figther
- {
- 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(Figther enemy)
- {
- Console.WriteLine("Рыцарь закрылся щитом!");
- Random rand = new Random();
- CurrentArmor += rand.Next(10, 20);
- ShowStats();
- IsAvoid = true;
- ReloadAbillityCounter = 2;
- }
- public override bool IsAbilityReady()
- {
- return base.IsAbilityReady();
- }
- }
- class Assassin : Figther
- {
- 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(Figther enemy)
- {
- Console.WriteLine("Ассассин бросает ядовитые кинжалы!");
- Random rand = new Random();
- ReloadAbillityCounter = 1;
- enemy.TakeDamage(rand.Next(20, 30));
- }
- public override bool IsAbilityReady()
- {
- return base.IsAbilityReady();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement