public static Unit GetUnit(int type) { Unit unit = null; int currentCount = Convert.ToInt32(unitCount[type.ToString()]) + 1; unitCount[type.ToString()] = currentCount; switch (type) { case 1: unit = new Unit(5, 5, 5, 20, 4, type, currentCount); break; case 2: unit = new Unit(1, 1, 40, 17, 4, type, currentCount); break; case 3: unit = new Unit(20, 3, 10, 4, 30, type, currentCount); break; case 4: unit = new Unit(10, 10, 10, 10, 10, type, currentCount); break; case 5: unit = new Unit(9, 15, 20, 3, 20, type, currentCount); break; } return unit; }
public Unit(Unit copy) { Attack = copy.Attack; Defense = copy.Defense; Speed = copy.Speed; Damage = copy.Damage; Life = copy.Life; Type = copy.Type; Number = copy.Number; TotalLife = copy.TotalLife; }
private void AttackEnemy(Unit defender) { #region log string logUnitClass = PositionInCombat == CombatPosition.attacker? "attacker" : "defender"; string logUnitDefenderClass = defender.PositionInCombat == CombatPosition.attacker ? "attacker" : "defender"; Combat.Log.Add(string.Format("<span class='{4}'>Unidade {0}</span>, Tipo {1}, atacando <span class='{5}'>Unidade {2}</span>, Tipo {3}.", Number, Type, defender.Number, defender.Type, logUnitClass, logUnitDefenderClass)); #endregion int damage = Combat.Duel(Attack, defender.Defense, Damage, ref status); if (status == Combat.DuelResultStatus.Hit || status == Combat.DuelResultStatus.CriticalHit) defender.Life -= damage; else if (status == Combat.DuelResultStatus.CriticalError) this.Life -= damage; }
public void Fight(Unit defender) { if (this.Life <= 0 || defender.Life <=0) Combat.Log.Add("Erro na lógica de combate. Atacante ou defensor na linha de combate e sem vida"); int attackerInitiative = Dice.Throw(Speed); int defenderInitiative = Dice.Throw(defender.Speed); bool extraAttackforAttacker = (attackerInitiative >= 2 * defenderInitiative); bool extraAttackforDefender = (defenderInitiative >= 2 * attackerInitiative); Unit attacker = this; if (attackerInitiative.BiggerThan(defenderInitiative)) { Combat.Log.Add(string.Format("Atacante é {0} mais rápido que o defensor", extraAttackforAttacker? "duas vezes":"")); attacker.AttackEnemy(defender); if (defender.Life > 0 && attacker.Life > 0) { defender.AttackEnemy(attacker); if (extraAttackforAttacker && attacker.Life > 0 && defender.Life > 0) attacker.AttackEnemy(defender); } } else { Combat.Log.Add(string.Format("Defensor é {0} mais rápido que o atacante", extraAttackforDefender ? "duas vezes" : "")); defender.AttackEnemy(attacker); if (attacker.Life > 0 && defender.Life > 0) { attacker.AttackEnemy(defender); if (extraAttackforDefender && attacker.Life > 0 && defender.Life > 0) defender.AttackEnemy(attacker); } } }
public void BuryUnit(Unit unit) { cemitery.Add(unit); Combat.Log.Add(string.Format("<div class='rip'>Unidade tipo {1} <span class='{0}'>dos {0}</span> <b>morta</b></div>", Title.ToLower(), unit.Type)); }
protected void ResolveDamage(Hero hero, Unit unit, int damage, int criticalDamage, Combat.DuelResultStatus status) { if (status == Combat.DuelResultStatus.Hit) unit.Life -= damage; else if (status == Combat.DuelResultStatus.CriticalHit) unit.Life -= criticalDamage; else if (status == Combat.DuelResultStatus.CriticalError) hero.Life -= damage; }