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); }
// 敵人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); } } } }