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 CSLight
- {
- class Program
- {
- static void Main(string[] args)
- {
- War war = new War();
- war.PrepareForBattle();
- war.Battle();
- }
- }
- class War
- {
- private List<Warrior> _warriorsForLeftCorner = new List<Warrior> {
- new Barbarian("Goah", 80, 15, 5, 1),
- new Knight("Artur", 100, 25, 8, 2),
- new Engineer("Gnom", 75, 80, 5, 3),
- new Kamikaze("Ji", 50, 0, 9, 3),
- new Viking("Torin", 110, 10, 6, 1.2f)
- };
- private List<Warrior> _warriorsForRightCorner = new List<Warrior> {
- new Barbarian("Goah", 80, 15, 5, 1),
- new Knight("Artur", 100, 25, 8, 2),
- new Engineer("Gnom", 75, 80, 5, 3),
- new Kamikaze("Ji", 50, 0, 9, 3),
- new Viking("Torin", 110, 10, 6, 1.2f)
- };
- private List<Warrior> _gladiators = new List<Warrior>();
- private void ChooseWarrior(ref int numberOfTeam)
- {
- int warriorChoice;
- string input;
- string numberOfChoice = "";
- if (numberOfTeam == 1)
- numberOfChoice = "первого";
- else if (numberOfTeam == 2)
- numberOfChoice = "второго";
- Console.WriteLine($"Выберите {numberOfChoice} бойца:\n1) Варвар\n2) Рыцарь\n3) Инженер\n4) Камикадзе\n5) Викинг\n");
- input = Console.ReadLine();
- if (int.TryParse(input, out warriorChoice) && warriorChoice > 0 && warriorChoice < 6)
- {
- if (numberOfTeam == 1)
- {
- var person1 = _warriorsForLeftCorner[warriorChoice - 1];
- _gladiators.Add(person1);
- }
- else if (numberOfTeam == 2)
- {
- var person2 = _warriorsForRightCorner[warriorChoice - 1];
- _gladiators.Add(person2);
- }
- numberOfTeam += 1;
- }
- else
- {
- Console.WriteLine("\n\nПовторите ввод:\n\n");
- }
- }
- public void PrepareForBattle()
- {
- int currentChoice = 1;
- bool isBattlePreparing = true;
- while (isBattlePreparing)
- {
- if (currentChoice == 1 || currentChoice == 2)
- {
- ChooseWarrior(ref currentChoice);
- }
- else if (currentChoice == 3)
- {
- isBattlePreparing = false;
- }
- else
- {
- continue;
- }
- }
- }
- public void Battle()
- {
- if (_gladiators.Count == 2)
- {
- var person1 = _gladiators[0];
- var person2 = _gladiators[1];
- while (person1.HealthPoints > 0 && person2.HealthPoints > 0)
- {
- person1.TakeDamage(person2.Damage);
- person2.TakeDamage(person1.Damage);
- Console.WriteLine((int)person1.HealthPoints + " " + (int)person2.HealthPoints);
- }
- if (person1.HealthPoints <= 0)
- {
- Console.WriteLine($"Победил - {person2.Name}");
- }
- else
- {
- Console.WriteLine($"Победил - {person1.Name}");
- }
- Console.ReadKey();
- }
- else
- {
- Console.WriteLine("Сражение невозможно. Гладиаторы не выбраны. Вызовите метод .Start");
- Console.ReadKey();
- }
- }
- }
- class Warrior
- {
- private float _decreaseDamage;
- private float _decreaseArmor;
- protected static Random Random = new Random();
- public string Name { get; private set; }
- public float HealthPoints { get; protected set; }
- public float Armor { get; protected set; }
- public float Damage { get; protected set; }
- public Warrior(string name, float healthPoints, float armor, float damage)
- {
- Name = name;
- HealthPoints = healthPoints;
- Armor = armor;
- Damage = damage;
- _decreaseDamage = damage / 2;
- _decreaseArmor = armor / 3;
- }
- public virtual void TakeDamage(float damage)
- {
- if (damage > Armor)
- {
- if (Armor > 0)
- {
- Armor -= _decreaseArmor;
- HealthPoints -= damage - Armor;
- }
- else
- {
- HealthPoints -= damage;
- }
- }
- else
- {
- Armor -= damage;
- HealthPoints -= _decreaseDamage;
- }
- }
- }
- class Barbarian : Warrior
- {
- private float _attackMagnifier;
- public Barbarian(string name, float healthPoints, float armor, float damage, float attackMagnifier) : base(name, healthPoints, armor, damage)
- {
- _attackMagnifier = attackMagnifier;
- }
- public override void TakeDamage(float damage)
- {
- base.TakeDamage(damage);
- ChangeDamage();
- }
- private void ChangeDamage()
- {
- Damage += _attackMagnifier;
- }
- }
- class Knight : Warrior
- {
- private float _cureSpeed;
- public Knight(string name, float healthPoints, float armor, float damage, float cureSpeed) : base(name, healthPoints, armor, damage)
- {
- _cureSpeed = cureSpeed;
- }
- public override void TakeDamage(float damage)
- {
- base.TakeDamage(damage);
- HealthPoints += _cureSpeed;
- }
- }
- class Engineer : Warrior
- {
- private float _repairSpeed;
- public Engineer(string name, float healthPoints, float armor, float damage, float repairSpeed) : base(name, healthPoints, armor, damage)
- {
- _repairSpeed = repairSpeed;
- }
- public override void TakeDamage(float damage)
- {
- base.TakeDamage(damage);
- Armor += _repairSpeed;
- }
- }
- class Kamikaze : Warrior
- {
- private float _damageMultiplier;
- public Kamikaze(string name, float healthPoints, float armor, float damage, float damageMultiplier) : base(name, healthPoints, armor, damage)
- {
- Armor = 0;
- _damageMultiplier = damageMultiplier;
- }
- public override void TakeDamage(float damage)
- {
- ChangeDamage();
- base.TakeDamage(damage);
- }
- private void ChangeDamage()
- {
- int probability = Random.Next(0, 3);
- if (probability == 2)
- {
- Damage *= 3;
- }
- }
- }
- class Viking : Warrior
- {
- private float _attackSpeed;
- public Viking(string name, float healthPoints, float armor, float damage, float attackSpeed) : base(name, healthPoints, armor, damage)
- {
- Armor = 0;
- _attackSpeed = attackSpeed;
- }
- public override void TakeDamage(float damage)
- {
- base.TakeDamage(damage);
- Damage *= _attackSpeed;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement