コード例 #1
0
        private string[] TryMagicAttack(IUnit aiUser, IUnit target)
        {
            string[] message      = new string[6];
            var      magicAttacks = aiUser.MagicAttacks
                                    .Where(m => m is BuffMagic || m is DebuffMagic)
                                    .Where(m => m.MPCost <= aiUser.MP)
                                    .ToList();

            if (magicAttacks.Count > 0)
            {
                IMagicAttack randomMagicAttack = magicAttacks[Random.Next(0, magicAttacks.Count)];
                message = randomMagicAttack.CastMagic(aiUser, target);
            }
            else
            {
                INormalAttack randomAttack =
                    aiUser.NormalAttacks.FirstOrDefault(a => a.Kickback < aiUser.HP);
                if (randomAttack == null)
                {
                    message =
                        aiUser.NormalAttacks[Random.Next(0, aiUser.NormalAttacks.Count)].ExecuteAttack(aiUser, target);
                }
                else
                {
                    message = randomAttack.ExecuteAttack(aiUser, target);
                }
            }

            return(message);
        }
コード例 #2
0
        public void ReplaceNormalAttack(INormalAttack attackToRemove, INormalAttack attackToAdd)
        {
            int indexOfAttackToRemove = this.NormalAttacks.IndexOf(attackToRemove);

            this.NormalAttacks.Remove(attackToRemove);
            this.NormalAttacks.Insert(indexOfAttackToRemove, attackToAdd);
        }
コード例 #3
0
        private string[] TryNormalAttack(IUnit aiUser, IUnit target)
        {
            string[]      message      = new string[6];
            int           maxKickback  = 0;
            INormalAttack chosenAttack = aiUser.NormalAttacks[0];

            foreach (var normalAttack in aiUser.NormalAttacks)
            {
                if (normalAttack.Kickback >= maxKickback && normalAttack.Kickback < aiUser.HP)
                {
                    maxKickback  = normalAttack.Kickback;
                    chosenAttack = normalAttack;
                }
            }

            if (chosenAttack.Kickback >= aiUser.HP)
            {
                var magicAttacks = aiUser.MagicAttacks
                                   .Where(m => m is BuffMagic || m is DebuffMagic)
                                   .Where(m => m.MPCost <= aiUser.MP)
                                   .ToList();

                if (magicAttacks.Count > 0)
                {
                    IMagicAttack randomMagicAttack = magicAttacks[Random.Next(0, magicAttacks.Count)];
                    message = randomMagicAttack.CastMagic(aiUser, target);
                }
                else
                {
                    message = chosenAttack.ExecuteAttack(aiUser, target);
                }
            }
            else
            {
                message = chosenAttack.ExecuteAttack(aiUser, target);
            }

            return(message);
        }
コード例 #4
0
ファイル: Attack.cs プロジェクト: cealer/PatternDesign
 public Attack(INormalAttack attack)
 {
     _attack = attack;
 }
コード例 #5
0
 public void RemoveNormalAttack(INormalAttack normalAttack)
 {
     this.NormalAttacks.Remove(normalAttack);
 }
コード例 #6
0
 public void AddNormalAttack(INormalAttack normalAttack)
 {
     this.NormalAttacks.Add(normalAttack);
 }
コード例 #7
0
 public void NormalAttack(INormalAttack normalAttack)
 {
     _characterAction = new Attack(normalAttack);
     _characterAction.Execute(_characterTo);
 }