SetStateAi: add more logic for transforming, now use always evaluated value check

unblocked should only care about transformed power for now.
thats the next step in making the AI use Elusive Tormentor better.
This commit is contained in:
Hanmac
2016-08-02 10:55:49 +00:00
parent a714ecb3ee
commit afd50154d1

View File

@@ -76,15 +76,21 @@ public class SetStateAi extends SpellAbilityAi {
} }
if("Transform".equals(sa.getParam("Mode"))) { if("Transform".equals(sa.getParam("Mode"))) {
// need a copy for evaluation
Card transformed = CardUtil.getLKICopy(source);
transformed.getCurrentState().copyFrom(source, source.getAlternateState());
transformed.updateStateForView();
int valueSource = ComputerUtilCard.evaluateCreature(source);
int valueTransformed = ComputerUtilCard.evaluateCreature(transformed);
// it would not survive being transformed
if (transformed.getNetToughness() < 1) {
return false;
}
// check which state would be better for attacking // check which state would be better for attacking
if (ph.isPlayerTurn(ai) && ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) { if (ph.isPlayerTurn(ai) && ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) {
// need a copy for evaluation
Card transformed = CardUtil.getLKICopy(source);
transformed.getCurrentState().copyFrom(source, source.getAlternateState());
transformed.updateStateForView();
int valueSource = ComputerUtilCard.evaluateCreature(source);
int valueTransformed = ComputerUtilCard.evaluateCreature(transformed);
boolean transformAttack = false; boolean transformAttack = false;
// if an opponent can't block it, no need to transform (back) // if an opponent can't block it, no need to transform (back)
@@ -105,11 +111,15 @@ public class SetStateAi extends SpellAbilityAi {
if (transformAttack) { if (transformAttack) {
return true; return true;
} }
} else if (ph.isPlayerTurn(ai) && ph.getPhase().equals(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
// no clear way, alternate state is better, if (ph.inCombat() && ph.getCombat().isUnblocked(source)) {
// but for more cleaner way use Evaluate for check // if source is unblocked, check for the power
return valueSource <= valueTransformed; return source.getNetPower() <= transformed.getNetPower();
}
} }
// no clear way, alternate state is better,
// but for more cleaner way use Evaluate for check
return valueSource <= valueTransformed;
} }
return true; return true;
} }