From 03d005ed8e58a7f066733b39c19fb15c82333be7 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sat, 16 Mar 2013 13:03:52 +0000 Subject: [PATCH] - The AI will now try to fetch duallands with fetchlands. --- .../java/forge/card/ability/ai/ChangeZoneAi.java | 12 ++++++++---- src/main/java/forge/game/ai/ComputerUtilCard.java | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java index 43d741c1196..6bc32e6f9a5 100644 --- a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java @@ -424,8 +424,7 @@ public class ChangeZoneAi extends SpellAbilityAi { * a {@link forge.CardList} object. * @return a {@link forge.Card} object. */ - private static Card basicManaFixing(final Player ai, final List list) { // Search for a - // Basic Land + private static Card basicManaFixing(final Player ai, final List list) { // Search for a Basic Land final List combined = new ArrayList(ai.getCardsIn(ZoneType.Battlefield)); combined.addAll(ai.getCardsIn(ZoneType.Hand)); @@ -457,6 +456,11 @@ public class ChangeZoneAi extends SpellAbilityAi { if (minType != null) { result = CardLists.getType(list, minType); } + + // pick dual lands if available + if (Iterables.any(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS))) { + result = CardLists.filter(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS)); + } return result.get(0); } @@ -1173,7 +1177,7 @@ public class ChangeZoneAi extends SpellAbilityAi { } else if (origin.contains(ZoneType.Library) && (type.contains("Basic") || areAllBasics(type))) { c = basicManaFixing(ai, fetchList); - } else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").size() == 0) { + } else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").isEmpty()) { c = chooseCreature(ai, fetchList); } else if (ZoneType.Battlefield.equals(destination) || ZoneType.Graveyard.equals(destination)) { if (!activator.equals(ai) && sa.hasParam("GainControl")) { @@ -1190,7 +1194,7 @@ public class ChangeZoneAi extends SpellAbilityAi { // Does AI need a land? List hand = ai.getCardsIn(ZoneType.Hand); - if (CardLists.filter(hand, Presets.LANDS).size() == 0 && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) { + if (CardLists.filter(hand, Presets.LANDS).isEmpty() && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) { boolean canCastSomething = false; for (Card cardInHand : hand) { canCastSomething |= ComputerUtilMana.payManaCost(cardInHand.getFirstSpellAbility(), ai, true, 0, false); diff --git a/src/main/java/forge/game/ai/ComputerUtilCard.java b/src/main/java/forge/game/ai/ComputerUtilCard.java index 8185acb6271..b4b3ba56d98 100644 --- a/src/main/java/forge/game/ai/ComputerUtilCard.java +++ b/src/main/java/forge/game/ai/ComputerUtilCard.java @@ -124,14 +124,14 @@ public class ComputerUtilCard { */ public static Card getBestLandAI(final List list) { final List land = CardLists.filter(list, CardPredicates.Presets.LANDS); - if (!(land.size() > 0)) { + if (land.isEmpty()) { return null; } // prefer to target non basic lands final List nbLand = CardLists.filter(land, Predicates.not(CardPredicates.Presets.BASIC_LANDS)); - if (nbLand.size() > 0) { + if (!nbLand.isEmpty()) { // TODO - Rank non basics? return Aggregates.random(nbLand); } @@ -243,11 +243,11 @@ public class ComputerUtilCard { public static Card getBestAI(final List list) { // Get Best will filter by appropriate getBest list if ALL of the list // is of that type - if (CardLists.getNotType(list, "Creature").size() == 0) { + if (CardLists.getNotType(list, "Creature").isEmpty()) { return ComputerUtilCard.getBestCreatureAI(list); } - if (CardLists.getNotType(list, "Land").size() == 0) { + if (CardLists.getNotType(list, "Land").isEmpty()) { return getBestLandAI(list); }