Created
April 21, 2024 17:38
-
-
Save Dead-in-side/130b4c3733de857294fab5388ec8ece5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace IJunior | |
{ | |
public class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
BattleArena arena = new BattleArena(); | |
arena.Fight(); | |
} | |
} | |
public class BattleArena | |
{ | |
private List<Warior> wariors = new List<Warior>(); | |
private List<Warior> wariorsInArena = new List<Warior>(); | |
public void Fight() | |
{ | |
AddWarior(); | |
Console.WriteLine("Добро пожаловать на арену!\nВам доступны следующие бойцы: "); | |
ShowFighters(); | |
Console.WriteLine("Выберите первого бойца"); | |
VoteWariors(); | |
Console.WriteLine("Выберите второго бойца"); | |
VoteWariors(); | |
while (wariorsInArena[0].Health > 0 && wariorsInArena[1].Health > 0) | |
{ | |
wariorsInArena[0].MakeDamage(wariorsInArena[1]); | |
wariorsInArena[1].MakeDamage(wariorsInArena[0]); | |
Console.WriteLine(wariorsInArena[0].Name + ". Здоровье: " + wariorsInArena[0].Health + "||" + wariorsInArena[1] + ". Здоровье: " + wariorsInArena[1].Health); | |
Console.ReadLine(); | |
} | |
if (wariorsInArena[0].Health <= 0 && wariorsInArena[1].Health <= 0) | |
{ | |
Console.WriteLine("Победила дружба"); | |
} | |
else if (wariorsInArena[1].Health > 0) | |
{ | |
Console.WriteLine("Победил " + wariorsInArena[1].Name); | |
} | |
else | |
{ | |
Console.WriteLine("Победил " + wariors[0].Name); | |
} | |
} | |
private void AddWarior() | |
{ | |
wariors.Add(new Knight()); | |
wariors.Add(new Rogue()); | |
wariors.Add(new Paladin()); | |
wariors.Add(new Wizard()); | |
wariors.Add(new Assasin()); | |
} | |
private void VoteWariors() | |
{ | |
Console.WriteLine("Введите номер бойца: "); | |
if (int.TryParse(Console.ReadLine(), out int number) && number <= wariors.Count) | |
{ | |
number--; | |
Console.WriteLine("На арену выходит " + wariors[number].ShowInfo()); | |
wariorsInArena.Add(wariors[number].Clone()); | |
} | |
} | |
private void ShowFighters() | |
{ | |
int i = 1; | |
foreach (var warior in wariors) | |
{ | |
Console.WriteLine(i + ". " + warior.ShowInfo()); | |
i++; | |
} | |
} | |
} | |
public abstract class Warior | |
{ | |
private int _health = 100; | |
private int _damage = 15; | |
private int _maxHealth = 100; | |
public abstract string Name { get; } | |
public int MaxHealth | |
{ | |
get | |
{ | |
return _maxHealth; | |
} | |
private set | |
{ | |
_maxHealth = value; | |
} | |
} | |
public int Health | |
{ | |
get | |
{ | |
return _health; | |
} | |
protected set | |
{ | |
_health = value; | |
} | |
} | |
public int Damage | |
{ | |
get | |
{ | |
return _damage; | |
} | |
private set { } | |
} | |
public virtual void MakeDamage(Warior warior) | |
{ | |
warior.TakeDamage(Damage); | |
} | |
public virtual void TakeDamage(int damage) | |
{ | |
Health -= damage; | |
} | |
public Warior Clone() | |
{ | |
Warior clone = this.MemberwiseClone() as Warior; | |
return clone; | |
} | |
public string ShowInfo() | |
{ | |
return Name; | |
} | |
} | |
public class Knight : Warior | |
{ | |
private List<int> _luckyNumbers = new List<int> { 7, 8, 9 }; | |
private int _damageFactor = 2; | |
private string _name = "Knight"; | |
public override string Name => _name; | |
public override void MakeDamage(Warior warior) | |
{ | |
Random random = new Random(); | |
int lowRandomLimit = 0; | |
int highRandomLimit = 10; | |
if (_luckyNumbers.Contains(random.Next(lowRandomLimit, highRandomLimit))) | |
{ | |
int increasedDamage = Damage * _damageFactor; | |
warior.TakeDamage(increasedDamage); | |
} | |
else | |
{ | |
warior.TakeDamage(Damage); | |
} | |
} | |
} | |
public class Rogue : Warior | |
{ | |
private int _attackCounter; | |
private int _maxAttackCounter = 3; | |
private string _name = "Rogue"; | |
public override string Name => _name; | |
public override void MakeDamage(Warior warior) | |
{ | |
base.MakeDamage(warior); | |
_attackCounter++; | |
if (_attackCounter == _maxAttackCounter) | |
{ | |
base.MakeDamage(warior); | |
_attackCounter = 0; | |
} | |
} | |
} | |
public class Paladin : Warior | |
{ | |
private int _rageCounter; | |
private int _healPercent = 20; | |
private int _maxRage = 3; | |
private string _name = "Paladin"; | |
public override string Name => _name; | |
public override void TakeDamage(int damage) | |
{ | |
base.TakeDamage(damage); | |
_rageCounter++; | |
if (_rageCounter == _maxRage) | |
{ | |
Heal(); | |
_rageCounter = 0; | |
} | |
} | |
private void Heal() | |
{ | |
int percentFactor = 100; | |
int healHealth = MaxHealth * _healPercent / percentFactor; | |
if (MaxHealth >= Health + healHealth) | |
{ | |
Health += healHealth; | |
} | |
else | |
{ | |
Health = MaxHealth; | |
} | |
} | |
} | |
public class Wizard : Warior | |
{ | |
private int _mana = 30; | |
private int _fireballManacost = 10; | |
private int _fireballFactor = 3; | |
private string _name = "Wizard"; | |
public override string Name => _name; | |
public override void MakeDamage(Warior warior) | |
{ | |
if (_mana - _fireballManacost > 0) | |
{ | |
warior.TakeDamage(CastFireball()); | |
} | |
else | |
{ | |
base.MakeDamage(warior); | |
} | |
} | |
private int CastFireball() | |
{ | |
int fireballDamage = Damage * _fireballFactor; | |
_mana -= _fireballManacost; | |
return fireballDamage; | |
} | |
} | |
public class Assasin : Warior | |
{ | |
private List<int> _missNumers = new List<int> { 9, 10 }; | |
private string _name = "Assasin"; | |
public override string Name => _name; | |
public override void TakeDamage(int damage) | |
{ | |
Random random = new Random(); | |
int lowRandomLimit = 1; | |
int highRandomLimit = 11; | |
if (_missNumers.Contains(random.Next(lowRandomLimit, highRandomLimit)) == false) | |
{ | |
base.TakeDamage(damage); | |
} | |
else | |
{ | |
Console.WriteLine("Уворот!"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment