Exemplo n.º 1
0
    public MonsterCardInstance RunStrategy(EnemyInstance self, BattleContext context)
    {
        float result = Random.Range(0f, 1.0f);

        MonsterCardInstance card = null;

        for (int cnt = 0; cnt < _probabilities.Length; cnt++)
        {
            result -= _probabilities[cnt];
            if (result <= 0.0f)
            {
                if (self.GetCards().GetCount() > cnt)
                {
                    card = self.GetCards().Get(cnt);
                }
                break;
            }
        }

        return(card);
    }
Exemplo n.º 2
0
    // 敵人AI
    public override void StartTurn(BattleContext mgr)
    {
        base.StartTurn(mgr);

        if (this._postpone > 0)
        {
            this._postpone -= 1;
            return;
        }

        // get Card
        MonsterCardInstance card = null;

        // try to get card from queue
        if (_cardQueue.GetCount() > 0)
        {
            card = _cardQueue.Pop(1)[0];
        }
        else
        {
            // try to get card from strategy
            card = this._strategy.RunStrategy(this, mgr);

            //postpone card
            if (card.Postpone > 0)
            {
                _postpone += card.Postpone;
                _cardQueue.AddItem(card);
                return;
            }
        }

        if (null != card)
        {
            // run card
            if (card.IsAgainstEnemy)
            {
                List <Actor> enemy = new List <Actor>();
                enemy.Add(mgr.Player);

                if (card.IsAOE)
                {
                    card.Play(this, enemy, mgr);
                }
                else
                {
                    List <Actor> singleTarget = new List <Actor>();
                    singleTarget.Add(enemy[Random.Range(0, enemy.Count)]);
                    card.Play(this, singleTarget, mgr);
                }
            }
            else
            {
                if (card.IsAOE)
                {
                    List <Actor> partners = new List <Actor>();
                    foreach (Actor partner in mgr.EnemyList.GetAll())
                    {
                        partners.Add(partner);
                    }

                    card.Play(this, partners, mgr);
                }
                else
                {
                    List <Actor> singleTarget = new List <Actor>();
                    singleTarget.Add(this);
                    card.Play(this, singleTarget, mgr);
                }
            }
        }
    }