Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Dead-in-side/130b4c3733de857294fab5388ec8ece5 to your computer and use it in GitHub Desktop.
Save Dead-in-side/130b4c3733de857294fab5388ec8ece5 to your computer and use it in GitHub Desktop.
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