From 15ff211f3ca06dba1f9d44cc3d1973c5c4a8e0e3 Mon Sep 17 00:00:00 2001 From: mcrawford620 Date: Thu, 19 Jul 2012 03:48:33 +0000 Subject: [PATCH] - AI for Fight --- res/cardsfolder/p/prey_upon.txt | 1 - .../abilityfactory/AbilityFactoryAttach.java | 1 - .../AbilityFactoryDealDamage.java | 35 ++++++++++++++++++- .../java/forge/game/player/ComputerUtil.java | 6 ++-- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/res/cardsfolder/p/prey_upon.txt b/res/cardsfolder/p/prey_upon.txt index e2b23b19a25..5f5803281b5 100644 --- a/res/cardsfolder/p/prey_upon.txt +++ b/res/cardsfolder/p/prey_upon.txt @@ -3,7 +3,6 @@ ManaCost:G Types:Sorcery Text:no text A:SP$ Fight | Cost$ G | ValidTgts$ Creature | TgtPrompt$ Select target creature | TargetsFromDifferentZone$ True | TargetMin$ 2 | TargetMax$ 2 | SpellDescription$ Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.) -SVar:RemAIDeck:True SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/prey_upon.jpg SetInfo:M13|Common|http://magiccards.info/scans/en/m13/181.jpg diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java index e0c31afd612..fc9f20b051a 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java @@ -632,7 +632,6 @@ public class AbilityFactoryAttach { prefList = prefList.filter(new CardListFilter() { @Override public boolean addCard(final Card c) { - System.out.println("Not Attaching"); return !c.getSVar("Targeting").equals("Dies"); } }); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java index f14b617cc1a..4cd18d14aa7 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java @@ -1842,9 +1842,42 @@ public class AbilityFactoryDealDamage { } private boolean fightCanPlayAI(final AbilityFactory af, final SpellAbility sa) { + Target tgt = sa.getTarget(); + tgt.resetTargets(); - //final Target tgt = sa.getTarget(); + CardList aiCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); + aiCreatures = aiCreatures.filter(new CardListFilter() { + @Override + public boolean addCard(final Card c) { + return !c.getSVar("Targeting").equals("Dies"); + } + }); + CardList humCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); + + final Random r = MyRandom.getRandom(); + boolean rr = false; + if (r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn())) { + rr = true; + } + + if (humCreatures.size() > 0 && aiCreatures.size() > 0) { + for (Card humanCreature : humCreatures) { + for (Card aiCreature : aiCreatures) { + if (humanCreature.getNetDefense() <= aiCreature.getNetAttack() + && humanCreature.getNetAttack() < aiCreature.getNetDefense()) { + // todo: check min/max targets; see if we picked the best matchup + tgt.addTarget(humanCreature); + tgt.addTarget(aiCreature); + return rr; + } else if (humanCreature.getSVar("Targeting").equals("Dies")) { + tgt.addTarget(humanCreature); + tgt.addTarget(aiCreature); + return rr; + } + } + } + } return false; } diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index 6e755083e6b..f48cfa5cecd 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -579,7 +579,7 @@ public class ComputerUtil { * (is for canPayCost, if true does not change the game state) * @param extraMana * a int. - * @param checkPlayable + * @param checkPlayable * should we check if playable? use for hypothetical "can AI play this" * @return a boolean. * @since 1.0.15 @@ -759,7 +759,7 @@ public class ComputerUtil { * @param partPriority * @param costParts * @param foundAllSources - * @return Were all mana sources found? + * @return Were all mana sources found? */ private static Boolean findManaSources(final HashMap> manaAbilityMap, final ArrayList> partSources, final ArrayList partPriority, @@ -818,7 +818,7 @@ public class ComputerUtil { srcFound.addAll(manaAbilityMap.get(costParts[nPart])); } } - + // add sources to array lists partSources.add(nPart, srcFound); // add to sorted priority list