@Override public boolean containsAll(Abilities<T> abilities) { if (this.size() < abilities.size()) { return false; } for (T ability : abilities) { if (!contains(ability)) { return false; } } return true; }
private Abilities<ActivatedManaAbilityImpl> getManaAbilitiesSortedByManaCount(MageObject mageObject, final Game game) { Abilities<ActivatedManaAbilityImpl> manaAbilities = mageObject.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game); if (manaAbilities.size() > 1) { // Sort mana abilities by number of produced manas, to use ability first that produces most mana (maybe also conditional if possible) Collections.sort(manaAbilities, new Comparator<ActivatedManaAbilityImpl>() { @Override public int compare(ActivatedManaAbilityImpl a1, ActivatedManaAbilityImpl a2) { int a1Max = 0; for (Mana netMana : a1.getNetMana(game)) { if (netMana.count() > a1Max) { a1Max = netMana.count(); } } int a2Max = 0; for (Mana netMana : a2.getNetMana(game)) { if (netMana.count() > a2Max) { a2Max = netMana.count(); } } return a2Max - a1Max; } }); } return manaAbilities; }
public int evaluate(Permanent permanent, Game game) { if (!values.containsKey(permanent.getId())) { int value = 0; if (permanent.getCardType().contains(CardType.CREATURE)) { value += combat.evaluate(permanent, game); } value += permanent.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD).size(); value += permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD).size(); values.put(permanent.getId(), value); } return values.get(permanent.getId()); }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities = input.getAbilities(); for (int i = 0; i < abilities.size(); i++) { if (abilities.get(i) instanceof EmbalmAbility) { return true; } if (abilities.get(i) instanceof EternalizeAbility) { return true; } } return false; }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities = input.getAbilities(); for (int i = 0; i < abilities.size(); i++) { if (abilities.get(i) instanceof EnchantAbility) { String enchantText = abilities.get(i).getRule(); if (enchantText.contentEquals("Enchant creature")) { return true; } } } return false; }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities = input.getAbilities(); for (int i = 0; i < abilities.size(); i++) { if (abilities.get(i) instanceof EnchantAbility) { String enchantText = abilities.get(i).getRule(); if (enchantText.contentEquals("Enchant creature")) { return true; } } } return false; }
break; case PARAM_ABILITIES_COUNT: resInfo.add(String.valueOf(card.getAbilities(game).size())); break; case PARAM_ABILITIES_LIST:
protected int combatPotential(Permanent creature, Game game) { log.debug("combatPotential"); if (!creature.canAttack(null, game)) { return 0; } int potential = creature.getPower().getValue(); potential += creature.getAbilities().getEvasionAbilities().size(); potential += creature.getAbilities().getProtectionAbilities().size(); potential += creature.getAbilities().containsKey(FirstStrikeAbility.getInstance().getId()) ? 1 : 0; potential += creature.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId()) ? 2 : 0; potential += creature.getAbilities().containsKey(TrampleAbility.getInstance().getId()) ? 1 : 0; return potential; }
for (Permanent perm : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { System.out.println(game.getTurn() + ", " + game.getPhase() + ": " + "remove from size " + perm.getAbilities().size()); for (Ability ability : ability) { perm.getAbilities().removeIf(entry -> entry.getId().equals(ability.getId()));
public int evaluate(Permanent creature, Game game) { if (!values.containsKey(creature.getId())) { int value = 0; if (creature.canAttack(null, game)) { value += 2; } value += creature.getPower().getValue(); value += creature.getToughness().getValue(); value += creature.getAbilities().getEvasionAbilities().size(); value += creature.getAbilities().getProtectionAbilities().size(); value += creature.getAbilities().containsKey(FirstStrikeAbility.getInstance().getId()) ? 1 : 0; value += creature.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId()) ? 2 : 0; value += creature.getAbilities().containsKey(TrampleAbility.getInstance().getId()) ? 1 : 0; values.put(creature.getId(), value); } return values.get(creature.getId()); }
public int evaluate(Permanent creature, Game game) { if (!values.containsKey(creature.getId())) { int value = 0; if (creature.canAttack(null, game)) { value += 2; } value += creature.getPower().getValue(); value += creature.getToughness().getValue(); value += creature.getAbilities().getEvasionAbilities().size(); value += creature.getAbilities().getProtectionAbilities().size(); value += creature.getAbilities().containsKey(FirstStrikeAbility.getInstance().getId()) ? 1 : 0; value += creature.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId()) ? 2 : 0; value += creature.getAbilities().containsKey(TrampleAbility.getInstance().getId()) ? 1 : 0; values.put(creature.getId(), value); } return values.get(creature.getId()); }
public static int evaluatePermanent(Permanent permanent, Game game, boolean ignoreTapped) { int value = 0; if (ignoreTapped) { value = 5; } else { value = permanent.isTapped() ? 4 : 5; } if (permanent.getCardType().contains(CardType.CREATURE)) { value += evaluateCreature(permanent, game) * CREATURE_FACTOR; } value += permanent.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD).size(); for (ActivatedAbility ability : permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD)) { if (!(ability instanceof ActivatedManaAbilityImpl) && ability.canActivate(ability.getControllerId(), game).canActivate()) { value += ability.getEffects().size(); } } for (Counter counter : permanent.getCounters(game).values()) { if (!(counter instanceof BoostCounter)) { value += counter.getCount(); } } value += permanent.getAbilities().getStaticAbilities(Zone.BATTLEFIELD).size(); value += permanent.getAbilities().getTriggeredAbilities(Zone.BATTLEFIELD).size(); value += permanent.getManaCost().convertedManaCost(); //TODO: add a difficulty to calculation to ManaCost - sort permanents by difficulty for casting when evaluating game states return value; }
public static int evaluateCreature(Permanent creature, Game game) { int value = 0; value += creature.getPower().getValue(); value += creature.getToughness().getValue(); // if (creature.canAttack(game)) // value += creature.getPower().getValue(); // if (!creature.isTapped()) // value += 2; value += creature.getAbilities().getEvasionAbilities().size(); value += creature.getAbilities().getProtectionAbilities().size(); value += creature.getAbilities().containsKey(FirstStrikeAbility.getInstance().getId()) ? 1 : 0; value += creature.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId()) ? 2 : 0; value += creature.getAbilities().containsKey(TrampleAbility.getInstance().getId()) ? 1 : 0; return value; }