Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Basic_Task26
- {
- class Program
- {
- static void Main(string[] args)
- {
- List<Fighter> fighters = new List<Fighter>();
- fighters.Add(new Fighter("Коричневый меч"));
- fighters.Add(new Berserk("Бешеный Джони"));
- fighters.Add(new Knight("Металлическая бошка"));
- fighters.Add(new WarriorOfBlood("Красный брызг"));
- fighters.Add(new Monk("Спокойный кулак"));
- List<Fighter> choosenFighters = new List<Fighter>();
- while (choosenFighters.Count != 2)
- {
- Console.Clear();
- for (int i = 0; i < fighters.Count; i++)
- {
- Console.Write($"{i+1}. ");
- fighters[i].ShowFullInfo();
- Console.WriteLine();
- }
- int number = ReadNumberFighter("Введите номер бойца: ", fighters.Count);
- choosenFighters.Add(fighters[number - 1]);
- fighters.RemoveAt(number - 1);
- }
- while(true)
- {
- choosenFighters[0].ShowInfo();
- int damage = choosenFighters[0].Hit();
- Console.WriteLine();
- Console.WriteLine(choosenFighters[1].toString());
- if (choosenFighters[1].TakeHit(damage))
- {
- break;
- }
- Console.WriteLine();
- choosenFighters[1].ShowInfo();
- damage = choosenFighters[1].Hit();
- Console.WriteLine();
- Console.WriteLine(choosenFighters[0].toString());
- if (choosenFighters[0].TakeHit(damage))
- {
- break;
- }
- Console.WriteLine();
- }
- if (choosenFighters[0].isDead)
- {
- Console.WriteLine($"{choosenFighters[0].toString()} проиграл");
- } else
- {
- Console.WriteLine($"{choosenFighters[1].toString()} проиграл");
- }
- }
- static int ReadNumberFighter(string str, int max)
- {
- int output = 0;
- string input;
- while (true)
- {
- Console.Write(str);
- input = Console.ReadLine();
- Console.Clear();
- if (int.TryParse(input, out output) && output <= max && output > 0)
- {
- return output;
- }
- else
- {
- Console.WriteLine("Введено не верное значение, попробуйте еще!");
- }
- }
- }
- }
- class Fighter
- {
- protected static Random rnd = new Random();
- protected string _name;
- protected int _maxHP;
- protected int _currentHP;
- protected int _defence;
- protected int _minDamage;
- protected int _spreadDamage;
- protected int _chanceDodge;
- protected int _chanceBlock;
- protected int _chanceCritical;
- public bool isDead => _currentHP <= 0;
- public Fighter(string name, int maxHP, int defence, int minDamage, int spreadDamage, int chanceDodge, int chanceBlock, int chanceCritical)
- {
- _name = name;
- if (maxHP <= 0)
- {
- maxHP = 1;
- }
- _maxHP = maxHP;
- _currentHP = maxHP;
- if (defence < 0)
- {
- defence = 0;
- }
- _defence = defence;
- if (minDamage <= 0)
- {
- minDamage = 1;
- }
- _minDamage = minDamage;
- if (spreadDamage < 0)
- {
- spreadDamage = 0;
- }
- _spreadDamage = spreadDamage;
- _chanceDodge = CorrectChance(chanceDodge);
- _chanceBlock = CorrectChance(chanceBlock);
- _chanceCritical = CorrectChance(chanceCritical);
- }
- public Fighter(string name)
- {
- _name = name;
- _maxHP = rnd.Next(80, 151);
- _currentHP = _maxHP;
- _defence = rnd.Next(5, 21);
- _minDamage = rnd.Next(10, 21);
- _spreadDamage = rnd.Next(3, 11);
- _chanceDodge = rnd.Next(10, 21);
- _chanceBlock = rnd.Next(10, 36);
- _chanceCritical = rnd.Next(15, 26);
- }
- protected Fighter()
- {
- }
- protected int CorrectChance(int chance)
- {
- if (chance < 0)
- {
- chance = 0;
- }
- if (chance > 100)
- {
- chance = 100;
- }
- return chance;
- }
- protected int Dodge(int damage)
- {
- if (_chanceDodge >= rnd.Next(1, 101))
- {
- Console.WriteLine("Уклонился");
- return 0;
- } else
- {
- return damage;
- }
- }
- protected virtual int Block(int damage)
- {
- if (_chanceBlock >= rnd.Next(1, 101))
- {
- Console.WriteLine("Заблокировал");
- return damage / 2;
- } else
- {
- return damage;
- }
- }
- protected virtual int Critical(int damage)
- {
- if (_chanceCritical >= rnd.Next(1, 101))
- {
- Console.WriteLine("Критический удар!");
- return damage * 2;
- }
- else
- {
- return damage;
- }
- }
- protected virtual int Damage()
- {
- Console.WriteLine("Наносит удар");
- return Critical(_minDamage + SpreadDamage());
- }
- protected virtual int SpreadDamage()
- {
- return rnd.Next(_spreadDamage + 1);
- }
- public virtual int Hit()
- {
- return Damage();
- }
- public virtual bool TakeHit(int damage)
- {
- damage = Dodge(damage);
- if (damage != 0)
- {
- damage = Block(damage - _defence);
- if (damage > 0)
- {
- _currentHP -= damage;
- }
- }
- return isDead;
- }
- public virtual void ShowFullInfo()
- {
- Console.WriteLine($"{toString()} - {_currentHP}/{_maxHP};\n Атака: {_minDamage} - {_minDamage + _spreadDamage}; Защита: {_defence};\n"
- + $"Уклонение - {_chanceDodge}%; Блокирование - {_chanceBlock}%; Критический удар - {_chanceCritical}%;");
- }
- public virtual void ShowInfo()
- {
- Console.WriteLine($"{toString()} - {_currentHP}/{_maxHP}");
- }
- public virtual string toString()
- {
- return $"{_name} (Воин)";
- }
- }
- class Berserk : Fighter
- {
- public Berserk(string name, int maxHP, int defence, int minDamage, int spreadDamage, int chanceDodge, int chanceBlock, int chanceCritical)
- : base(name, maxHP, defence, minDamage, spreadDamage, chanceDodge, chanceBlock, chanceCritical) { }
- public Berserk(string name) : base ()
- {
- _name = name;
- _maxHP = rnd.Next(100, 201);
- _currentHP = _maxHP;
- _defence = rnd.Next(0, 13);
- _minDamage = rnd.Next(5, 21);
- _spreadDamage = rnd.Next(5, 16);
- _chanceDodge = rnd.Next(10, 26);
- _chanceBlock = rnd.Next(5, 21);
- _chanceCritical = rnd.Next(15, 26);
- }
- public override int Hit()
- {
- return Damage() + SecondHit();
- }
- public int SecondHit()
- {
- Console.WriteLine("Наносит дополнительный удар");
- return Critical(SpreadDamage() + SpreadDamage());
- }
- public override string toString()
- {
- return $"{_name} (Варвар)";
- }
- public override void ShowFullInfo()
- {
- Console.WriteLine($"{toString()} - {_currentHP}/{_maxHP};\n Атака: {_minDamage} - {_minDamage + _spreadDamage * 3}; Защита: {_defence};\n"
- + $"Уклонение - {_chanceDodge}%; Блокирование - {_chanceBlock}%; Критический удар - {_chanceCritical}%;");
- }
- }
- class Knight : Fighter
- {
- public Knight(string name, int maxHP, int defence, int minDamage, int spreadDamage, int chanceDodge, int chanceBlock, int chanceCritical)
- : base(name, maxHP, defence, minDamage, spreadDamage, chanceDodge, chanceBlock, chanceCritical) { }
- public Knight(string name) : base()
- {
- _name = name;
- _maxHP = rnd.Next(120, 251);
- _currentHP = _maxHP;
- _defence = rnd.Next(8, 21);
- _minDamage = rnd.Next(5, 13);
- _spreadDamage = rnd.Next(2, 11);
- _chanceDodge = rnd.Next(5, 21);
- _chanceBlock = rnd.Next(15, 36);
- _chanceCritical = rnd.Next(10, 21);
- }
- public override bool TakeHit(int damage)
- {
- damage = Dodge(damage);
- if (damage != 0)
- {
- damage = Block(damage - Reflex());
- if (damage > 0)
- {
- _currentHP -= damage;
- }
- }
- return isDead;
- }
- public int Reflex()
- {
- if (35 <= rnd.Next(1, 101))
- {
- Console.WriteLine("Сработали рефлексы");
- return _defence * 2;
- } else
- {
- return _defence;
- }
- }
- public override string toString()
- {
- return $"{_name} (Рыцарь)";
- }
- }
- class WarriorOfBlood : Fighter
- {
- public WarriorOfBlood(string name, int maxHP, int defence, int minDamage, int spreadDamage, int chanceDodge, int chanceBlock, int chanceCritical)
- : base(name, maxHP, defence, minDamage, spreadDamage, chanceDodge, chanceBlock, chanceCritical) { }
- public WarriorOfBlood(string name) : base()
- {
- _name = name;
- _maxHP = rnd.Next(150, 301);
- _currentHP = _maxHP;
- _defence = rnd.Next(0, 6);
- _minDamage = rnd.Next(5, 21);
- _spreadDamage = rnd.Next(5, 11);
- _chanceDodge = rnd.Next(10, 26);
- _chanceBlock = rnd.Next(0, 16);
- _chanceCritical = rnd.Next(15, 26);
- }
- protected override int SpreadDamage()
- {
- int damage = rnd.Next(_spreadDamage + 1);
- if (_currentHP + damage >= _maxHP)
- {
- _currentHP = _maxHP;
- } else
- {
- _currentHP += damage;
- }
- return damage;
- }
- public override string toString()
- {
- return $"{_name} (Воин крови)";
- }
- }
- class Monk : Fighter
- {
- public Monk(string name, int maxHP, int defence, int minDamage, int spreadDamage, int chanceDodge, int chanceBlock, int chanceCritical)
- : base(name, maxHP, defence, minDamage, spreadDamage, chanceDodge, chanceBlock, chanceCritical) { }
- public Monk(string name) : base()
- {
- _name = name;
- _maxHP = rnd.Next(60, 151);
- _currentHP = _maxHP;
- _defence = rnd.Next(0, 3);
- _minDamage = rnd.Next(1, 5);
- _spreadDamage = rnd.Next(1, 11);
- _chanceDodge = rnd.Next(20, 51);
- _chanceBlock = rnd.Next(0, 21);
- _chanceCritical = rnd.Next(10, 46);
- }
- protected override int Critical(int damage)
- {
- if (_chanceCritical >= rnd.Next(1, 101))
- {
- Console.WriteLine("Критический удар!");
- return damage * 3;
- }
- else
- {
- return damage;
- }
- }
- public override int Hit()
- {
- return Damage() + Damage() + Damage();
- }
- public override string toString()
- {
- return $"{_name} (Монах)";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement