/// <summary> /// 电脑思考行动,暂时制作简单处理。 /// </summary> public override void ThinkAction() { //不是自己回合不进行操作 if (duelScene.GetCurrentPlayer() != this) { return; } //受效果处理时进行根据效果类型做特殊操作 if (currentEffectProcess != null) { if (currentEffectProcess is DiscardHandCardEffectProcess) { (currentEffectProcess as DiscardHandCardEffectProcess).DiscardOneHandCard(null, FindWorstCardInHand()); } if (currentEffectProcess is ChooseCardEffectProcess) { ChooseCardEffectProcess chooseCardEffectProcess = currentEffectProcess as ChooseCardEffectProcess; chooseCardEffectProcess.ChooseCardCallBack(chooseCardEffectProcess.GetLaunchEffectCard(), FindCanBeChooseCardFromList(chooseCardEffectProcess.GetCanChooseCardList())); } return; } if (duelScene.GetCurrentPhaseType() == PhaseType.Draw) { duelScene.EnterPhaseType(PhaseType.Prepare); return; } else if (duelScene.GetCurrentPhaseType() == PhaseType.Prepare) { duelScene.EnterPhaseType(PhaseType.Main); return; } //在主要流程中 else if (duelScene.GetCurrentPhaseType() == PhaseType.Main) { //先召唤怪兽 if (GameManager.GetSingleInstance().GetUserData().opponentCanCallMonster&& CanCallMonster()) { foreach (var item in handCards) { DuelCardScript duelCardScript = item.GetDuelCardScript(); if (duelCardScript.CanCall()) { int sacrificeMonsterNumer = item.NeedSacrificeMonsterNumer(); if (sacrificeMonsterNumer > 0) { List <CardBase> sacrificeCards = new List <CardBase>();//祭品列表 for (int i = 0; i < DuelRuleManager.GetMonsterAreaNumber(); i++) { if (monsterCardArea[i] != null) { sacrificeCards.Add(monsterCardArea[i]); sacrificeMonsterNumer -= monsterCardArea[i].GetCanBeSacrificedNumber(); if (sacrificeMonsterNumer <= 0) { break; } } } CardGameState nextCardGameState = ThinkCallMonsterCardGameState(item); CallMonsterEffectProcess callMonsterEffectProcess = new CallMonsterEffectProcess(item, nextCardGameState, sacrificeCards, this); AddEffectProcess(callMonsterEffectProcess); } else { CardGameState nextCardGameState = ThinkCallMonsterCardGameState(item); CallMonsterEffectProcess callMonsterEffectProcess = new CallMonsterEffectProcess(item, nextCardGameState, this); AddEffectProcess(callMonsterEffectProcess); } return; } } } //然后使用魔法卡 else if (GameManager.GetSingleInstance().GetUserData().opponentCanLaunchEffect&& CanLanuchMagicCard()) { foreach (var item in magicTrapCardArea) { if (item != null && item.CanLaunchEffect()) { LaunchEffect(item); return; } } foreach (var item in GetHandCards()) { if (item.CanLaunchEffect()) { LaunchEffect(item); return; } } } //最后进入战斗流程 else if (GameManager.GetSingleInstance().GetUserData().opponentCanAttack&& CanEnterBattlePhaseType()) { Battle(); return; } } else if (duelScene.GetCurrentPhaseType() == PhaseType.Battle) { //先判断是否存在可以进行攻击的怪兽,并选出攻击力最大的怪兽先进行攻击 int canAttackMonsterIndex = -1; int maxAttackValue = 0; for (int i = 0; i < DuelRuleManager.GetMonsterAreaNumber(); i++) { if (monsterCardArea[i] != null && monsterCardArea[i].CanAttack() && monsterCardArea[i].GetAttackValue() > maxAttackValue) { canAttackMonsterIndex = i; maxAttackValue = monsterCardArea[i].GetAttackValue(); } } //没有的话进入第二主要回合或回合结束 if (canAttackMonsterIndex == -1) { duelScene.EnterPhaseType(PhaseType.Second); return; } else { CardBase canAttackMonster = monsterCardArea[canAttackMonsterIndex]; //如果对方没有可以受攻击的怪兽时,进行直接攻击 if (!GetOpponentPlayer().HaveBeAttackedMonster() && GetCanDirectAttack() && GetOpponentPlayer().CanBeDirectAttacked() && canAttackMonster.CanDirectAttack()) { AttackEffectProcess attackEffectProcess = new AttackEffectProcess(canAttackMonster, null, this); AddEffectProcess(attackEffectProcess); return; } //如果当前怪兽攻击力,比对方场上表侧表示的怪兽最小的攻击力或守备力大的话进行攻击 //如果对方存在里侧表示的怪兽时进行攻击 //以上皆不满足的话退出战斗流程 foreach (var item in GetOpponentPlayer().GetMonsterCardArea()) { bool attackThisMonster = false; if (item != null && item.CanBeAttacked()) { if (item.GetCardGameState() == CardGameState.FrontAttack) { if (maxAttackValue >= item.GetAttackValue()) { attackThisMonster = true; } } else if (item.GetCardGameState() == CardGameState.FrontDefense) { if (maxAttackValue >= item.GetDefenseValue()) { attackThisMonster = true; } } else if (item.GetCardGameState() == CardGameState.Back) { attackThisMonster = true; } } if (attackThisMonster) { AttackEffectProcess attackEffectProcess = new AttackEffectProcess(canAttackMonster, item, this); AddEffectProcess(attackEffectProcess); return; } } return; } } else if (duelScene.GetCurrentPhaseType() == PhaseType.End) { } if (duelScene.GetCurrentPhaseType() == PhaseType.Main || duelScene.GetCurrentPhaseType() == PhaseType.Battle || duelScene.GetCurrentPhaseType() == PhaseType.Second) { EndTurn(); } }