예제 #1
0
        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;
        }
예제 #2
0
파일: Unit.cs 프로젝트: arturcp/Samjokgo
 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;
 }
예제 #3
0
파일: Unit.cs 프로젝트: arturcp/Samjokgo
        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;
        }
예제 #4
0
파일: Unit.cs 프로젝트: arturcp/Samjokgo
        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);

                }
            }
        }
예제 #5
0
파일: Team.cs 프로젝트: arturcp/Samjokgo
 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));
 }
예제 #6
0
 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;
 }