Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Security.Cryptography.X509Certificates;
- namespace gladiator_fights
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- Arena arena = new Arena();
- arena.Work();
- }
- }
- class Healer
- {
- public Healer(int health = 150, int damage = 10, int rage = 0, string name = "Целитель")
- {
- Health = health;
- Damage = damage;
- Rage = rage;
- Name = name;
- }
- public int Health { get; private set; }
- public int Damage { get; private set; }
- public int Rage { get; private set; }
- public string Name { get; private set; }
- public int Attack()
- {
- return Damage;
- }
- public void TakeDamage(int enemyDamage)
- {
- Health -= enemyDamage;
- RageRegen();
- Heal();
- }
- private void RageRegen()
- {
- int maxPointOfRageRegen = 8;
- int minPointOfRageRegen = 7;
- int pointOfRageRegen = UserUnits.GenerateRandomNumber(minPointOfRageRegen, maxPointOfRageRegen);
- Rage += pointOfRageRegen;
- if (Rage > 100) Rage = 100;
- }
- public void Heal()
- {
- int pointOfHeal = 50;
- if (Rage == 100)
- {
- Health += pointOfHeal;
- Rage = 0;
- }
- if (Health > 150) Health = 150;
- }
- }
- class Dredevil
- {
- private int _numerAttack = 0;
- private int _numberForDoubleAttack = 3;
- public Dredevil(int health = 150, int damage = 10, string name = "Смельчак")
- {
- Health = health;
- Damage = damage;
- Name = name;
- }
- public int Health { get; private set; }
- public int Damage { get; private set; }
- public string Name { get; private set; }
- public int Attack()
- {
- _numerAttack++;
- if (_numerAttack == _numberForDoubleAttack)
- {
- _numberForDoubleAttack = 0;
- return Damage * 2;
- }
- return Damage;
- }
- public void TakeDamage(int enemyDamage)
- {
- Health -= enemyDamage;
- }
- }
- class LuckyGuy
- {
- private int _numberForChanceDodge = 1;
- public LuckyGuy(int health = 150, int damage = 10, string name = "Проныра")
- {
- Health = health;
- Damage = damage;
- Name = name;
- }
- public int Health { get; private set; }
- public int Damage { get; private set; }
- public string Name { get; private set; }
- public int Attack()
- {
- return Damage;
- }
- public void TakeDamage(int enemyDamage)
- {
- if (IsDodge() == true) return;
- Health -= enemyDamage;
- }
- private bool IsDodge()
- {
- bool isDodge = false;
- int minRandomNumber = 1;
- int maxRandomNumber = 11;
- if (_numberForChanceDodge == UserUnits.GenerateRandomNumber(minRandomNumber, maxRandomNumber)) return true;
- return isDodge;
- }
- }
- class Warlock
- {
- private int _manaNeedForFireBallAttack = 20;
- public Warlock(int health = 150, int damage = 10, int damageForFireBall = 18, int mana = 100, string name = "Чернокнижник")
- {
- Health = health;
- Damage = damage;
- DamageForFireBall = damageForFireBall;
- Mana = mana;
- Name = name;
- }
- public int Health { get; private set; }
- public int Damage { get; private set; }
- public int DamageForFireBall { get; private set; }
- public int Mana { get; private set; }
- public string Name { get; private set; }
- public int Attack()
- {
- if (IsManaEnough()) return DamageForFireBall;
- return Damage;
- }
- public void TakeDamage(int enemyDamage)
- {
- Health -= enemyDamage;
- }
- private bool IsManaEnough()
- {
- if (Mana >= _manaNeedForFireBallAttack)
- {
- Mana -= _manaNeedForFireBallAttack;
- return true;
- }
- return false;
- }
- }
- class Knight
- {
- private int _numberForCriticalAttack = 1;
- public Knight(int health = 150, int damage = 10, string name = "Рыцарь")
- {
- Health = health;
- Damage = damage;
- Name = name;
- }
- public int Health { get; private set; }
- public int Damage { get; private set; }
- public string Name { get; private set; }
- public int Attack()
- {
- if (IsChanseCriticalAttack()) return Damage * 2;
- return Damage;
- }
- public void TakeDamage(int enemyDamage)
- {
- Health -= enemyDamage;
- }
- private bool IsChanseCriticalAttack()
- {
- bool isAttack = false;
- int minRandomNumber = 1;
- int maxRandomNumber = 11;
- if (_numberForCriticalAttack == UserUnits.GenerateRandomNumber(minRandomNumber, maxRandomNumber)) return true;
- return isAttack;
- }
- }
- class Arena
- {
- public void Work()
- {
- dynamic fighterOne = ChooseFighter();
- dynamic fighterTwo = ChooseFighter();
- Fight(fighterOne, fighterTwo);
- }
- private void Fight(dynamic fighterOne, dynamic fighterTwo)
- {
- Console.Clear();
- ShowInfo(fighterOne, fighterTwo);
- while (fighterOne.Health > 0 && fighterTwo.Health > 0)
- {
- fighterTwo.TakeDamage(fighterOne.Attack());
- ShowInfo(fighterOne, fighterTwo);
- if (fighterTwo.Health <= 0)
- {
- Console.WriteLine($"{fighterOne.Name} победил.");
- return;
- }
- fighterOne.TakeDamage(fighterTwo.Attack());
- ShowInfo(fighterOne, fighterTwo);
- }
- if (fighterOne.Health <= 0)
- {
- Console.WriteLine($"Игрок 2 {fighterTwo.Name} победил.");
- }
- else
- {
- Console.WriteLine($"Игрок 1 {fighterOne.Name} победил.");
- }
- }
- private void ShowInfo(dynamic fighter, dynamic fighterTwo)
- {
- Console.WriteLine($"У 1 игрока {fighter.Name} осталось {fighter.Health} жизней.");
- Console.WriteLine($"У 2 игрока {fighterTwo.Name} осталось {fighterTwo.Health} жизней.");
- Console.ReadKey();
- Console.Clear();
- }
- private dynamic ChooseFighter()
- {
- const int ChooseKnightCommand = 1;
- const int ChooseHealerCommand = 2;
- const int ChooseDredevilCommand = 3;
- const int ChooseWarlockCommand = 4;
- const int ChooseLuckyGuyCommand = 5;
- Knight knight = new Knight();
- Healer healer = new Healer();
- Dredevil dredevil = new Dredevil();
- Warlock warlock = new Warlock();
- LuckyGuy luckyGuy = new LuckyGuy();
- Console.Clear();
- Console.WriteLine($"Выберете персонажа:'\n" +
- $"1. {knight.Name}\n" +
- $"2. {healer.Name}\n" +
- $"3. {dredevil.Name}\n" +
- $"4. {warlock.Name}\n" +
- $"5. {luckyGuy.Name}");
- int userInput = UserUnits.ReadNumber();
- switch (userInput)
- {
- case ChooseKnightCommand:
- return knight;
- case ChooseHealerCommand:
- return healer;
- case ChooseDredevilCommand:
- return dredevil;
- case ChooseWarlockCommand:
- return warlock;
- case ChooseLuckyGuyCommand:
- return luckyGuy;
- default:
- Console.WriteLine("Вы ввели не верную команду.");
- break;
- }
- return null;
- }
- }
- class UserUnits
- {
- private static Random s_random = new Random();
- public static int GenerateRandomNumber(int min, int max)
- {
- return s_random.Next(min, max);
- }
- public static int ReadNumber()
- {
- bool isNumber = false;
- int result = 0;
- while (isNumber == false)
- {
- if (int.TryParse(Console.ReadLine(), out result))
- {
- return result;
- }
- }
- return result;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement