/// <summary> /// Ejecuta un ataque hacia un villano. /// Aquí entran en juego los puntos de salud del villano, el ataque del héroe y los puntos de /// defensa del villano. Estos últimos pueden ser nada o muy efectivos, se genera un número random /// desde 0 hasta el valor de la defensa del villano, el número resultante se le resta al ataque del héroe /// y el valor resultante se le resta a los puntos de salud del villano. /// </summary> /// <param name="villain">El <see cref="AbstractVillain"/> a atacar.</param> /// <exception cref="CannotAttackDeadException">Arrojada cuando cualquiera de los dos personajes se encuentra sin vida.</exception> public void Attack(AbstractVillain villain) { if (!this.IsAlive() || !villain.IsAlive()) { throw new CannotAttackDeadException("Uno de los dos caracteres que iba a ser atacado estaba muerto."); } villain.Hp = Math.Max(0, villain.Hp - Math.Max(0, this.Damage - new Random().Next(villain.Defense))); if (!villain.IsAlive()) { TorreDeLosCaidos.Instance.Notify(this, villain); } }
/// <summary> /// Constructor utilizado para crear batallas entre bandos de 1 personaje. /// Se aplica el patrón creator ya que en este constructor se crean las nuevas /// listas que contienen a cada uno de los personajes. /// </summary> /// <param name="hero"></param> /// <param name="villain"></param> public BattleEncounter(AbstractHero hero, AbstractVillain villain) : this(new List <AbstractHero>() { hero }, new List <AbstractVillain>() { villain }) { }