package magic.model.target; import magic.model.MagicAbility; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPlayer; public class MagicDeathtouchTargetPicker extends MagicTargetPicker<MagicPermanent> { private static final MagicDeathtouchTargetPicker INSTANCE = new MagicDeathtouchTargetPicker(); private static final int BLOCKED = 4<<8; private static final int BLOCKING = 3<<8; private static final int CAN_TAP = 2<<8; private static final int FIRST_STRIKE = 1<<8; private MagicDeathtouchTargetPicker() { } @Override protected int getTargetScore(final MagicGame game,final MagicPlayer player,final MagicPermanent permanent) { int score = 0; // no score for ability overlap or not being able to deal combat damage if (permanent.hasAbility(MagicAbility.Deathtouch) || permanent.hasAbility(MagicAbility.CannotAttackOrBlock)) { return 0; } if (permanent.isBlocked()) { score = BLOCKED; // possibility to destroy more than one blocker } else if (permanent.isBlocking()) { // good chance to destroy attacker score = BLOCKING; } else if (permanent.canTap()) { // can be in combat later or possibly use a damage ability score = CAN_TAP; } if (permanent.hasAbility(MagicAbility.FirstStrike) || permanent.hasAbility(MagicAbility.DoubleStrike)) { // higher chance to deal combat damage score += FIRST_STRIKE; } return permanent.getPower() + score; } public static MagicDeathtouchTargetPicker create() { return INSTANCE; } }