From 857f45f9ece5abe625ad69d01fe652083f27fb54 Mon Sep 17 00:00:00 2001 From: Meerkov Date: Mon, 16 Apr 2018 21:31:52 -0700 Subject: [PATCH] Updates AI code to use MyRandom directly. This removes java.util.Random from lots of AI code, futher making it unlikely that developers will accidentally use "new Random()" instead of MyRandom class. This will make running AI experiments easier, because there will be exactly one class that controls the randomness. --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 6 ++---- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 8 ++++---- .../src/main/java/forge/ai/ability/ActivateAbilityAi.java | 4 +--- .../src/main/java/forge/ai/ability/ChangeZoneAllAi.java | 6 ++---- forge-ai/src/main/java/forge/ai/ability/CharmAi.java | 7 ++----- .../src/main/java/forge/ai/ability/CountersPutAi.java | 6 ++---- .../src/main/java/forge/ai/ability/CountersPutAllAi.java | 6 ++---- forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java | 5 +---- forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/DiscardAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/DrainManaAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/EffectAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/FightAi.java | 4 +--- .../src/main/java/forge/ai/ability/LifeExchangeAi.java | 7 ++----- forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java | 7 ++----- forge-ai/src/main/java/forge/ai/ability/PhasesAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/ProtectAi.java | 4 +--- forge-ai/src/main/java/forge/ai/ability/RevealAi.java | 7 ++----- forge-ai/src/main/java/forge/ai/ability/RevealHandAi.java | 5 +---- .../src/main/java/forge/ai/ability/SacrificeAllAi.java | 7 ++----- forge-ai/src/main/java/forge/ai/ability/ScryAi.java | 5 +---- forge-ai/src/main/java/forge/ai/ability/TapAllAi.java | 7 ++----- forge-ai/src/main/java/forge/ai/ability/TapOrUntapAi.java | 4 +--- .../src/main/java/forge/ai/ability/UnattachAllAi.java | 4 +--- 24 files changed, 37 insertions(+), 92 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index bf4dd6a167b..d7ee664fd33 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -1186,16 +1186,14 @@ public class ComputerUtil { int activations = sa.getRestrictions().getNumberTurnActivations(); if (sa.isTemporary()) { - final Random r = MyRandom.getRandom(); - return r.nextFloat() >= .95; // Abilities created by static abilities have no memory + return MyRandom.getRandom().nextFloat() >= .95; // Abilities created by static abilities have no memory } if (activations < 10) { //10 activations per turn should still be acceptable return false; } - final Random r = MyRandom.getRandom(); - return r.nextFloat() >= Math.pow(.95, activations); + return MyRandom.getRandom().nextFloat() >= Math.pow(.95, activations); } public static boolean activateForCost(SpellAbility sa, final Player ai) { diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 0b542206c7c..e41429127e6 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -19,7 +19,6 @@ package forge.ai; import java.util.List; import java.util.Map; -import java.util.Random; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; @@ -49,6 +48,7 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; +import forge.util.MyRandom; import forge.util.TextUtil; import forge.util.collect.FCollection; @@ -436,10 +436,10 @@ public class ComputerUtilCombat { int threshold = (((PlayerControllerAi) ai.getController()).getAi().getIntProperty(AiProps.AI_IN_DANGER_THRESHOLD)); int maxTreshold = (((PlayerControllerAi) ai.getController()).getAi().getIntProperty(AiProps.AI_IN_DANGER_MAX_THRESHOLD)) - threshold; - Random rand = new Random(); - int chance = rand.nextInt(80) + 5; + + int chance = MyRandom.getRandom().nextInt(80) + 5; while (maxTreshold > 0) { - if (rand.nextInt(100) < chance) { + if (MyRandom.getRandom().nextInt(100) < chance) { threshold++; } maxTreshold--; diff --git a/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java b/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java index 75cc8cc423f..b71f07080f7 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java @@ -12,7 +12,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class ActivateAbilityAi extends SpellAbilityAi { @@ -23,8 +22,7 @@ public class ActivateAbilityAi extends SpellAbilityAi { final TargetRestrictions tgt = sa.getTargetRestrictions(); final Card source = sa.getHostCard(); final Player opp = ComputerUtil.getOpponentFor(ai); - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); List list = CardLists.getType(opp.getCardsIn(ZoneType.Battlefield), sa.getParamOrDefault("Type", "Card")); if (list.isEmpty()) { diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java index b2486819e20..ad5de0b33b1 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java @@ -17,7 +17,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.Collections; -import java.util.Random; public class ChangeZoneAllAi extends SpellAbilityAi { @Override @@ -45,9 +44,8 @@ public class ChangeZoneAllAi extends SpellAbilityAi { } } - final Random r = MyRandom.getRandom(); // prevent run-away activations - first time will always return true - boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); // TODO targeting with ChangeZoneAll // really two types of targeting. @@ -283,7 +281,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi { } } - return (((r.nextFloat() < .8) || sa.isTrigger()) && chance); + return (((MyRandom.getRandom().nextFloat() < .8) || sa.isTrigger()) && chance); } /** diff --git a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java index 470d9f0c5f2..1f9343599df 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java @@ -11,7 +11,6 @@ import forge.util.MyRandom; import forge.util.collect.FCollection; import java.util.List; -import java.util.Random; public class CharmAi extends SpellAbilityAi { @Override @@ -19,9 +18,7 @@ public class CharmAi extends SpellAbilityAi { // sa is Entwined, no need for extra logic if (sa.isEntwine()) { return true; - } - - final Random r = MyRandom.getRandom(); + } final int num = Integer.parseInt(sa.hasParam("CharmNum") ? sa.getParam("CharmNum") : "1"); final int min = sa.hasParam("MinCharmNum") ? Integer.parseInt(sa.getParam("MinCharmNum")) : num; @@ -65,7 +62,7 @@ public class CharmAi extends SpellAbilityAi { sa.setChosenList(chosenList); // prevent run-away activations - first time will always return true - return r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + return MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); } private List chooseOptionsAi(List choices, final Player ai, boolean isTrigger, int num, diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index 249cdf8a843..3c38cfd40fa 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -30,7 +30,6 @@ import forge.util.MyRandom; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Random; public class CountersPutAi extends SpellAbilityAi { @@ -118,7 +117,6 @@ public class CountersPutAi extends SpellAbilityAi { protected boolean checkApiLogic(Player ai, final SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be - final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); final String sourceName = ComputerUtilAbility.getAbilitySourceName(sa); @@ -514,7 +512,7 @@ public class CountersPutAi extends SpellAbilityAi { } } else { final List cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa); - // Don't activate Curse abilities on my cards and non-curse abilites + // Don't activate Curse abilities on my cards and non-curse abilities // on my opponents if (cards.isEmpty() || (cards.get(0).getController().isOpponentOf(ai) && !sa.isCurse())) { return false; @@ -524,7 +522,7 @@ public class CountersPutAi extends SpellAbilityAi { // each non +1/+1 counter on the card is a 10% chance of not // activating this ability. - if (!(type.equals("P1P1") || type.equals("M1M1") || type.equals("ICE")) && (r.nextFloat() < (.1 * currCounters))) { + if (!(type.equals("P1P1") || type.equals("M1M1") || type.equals("ICE")) && (MyRandom.getRandom().nextFloat() < (.1 * currCounters))) { return false; } // Instant +1/+1 diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAllAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAllAi.java index 00498933d3b..82dc7f1adfd 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAllAi.java @@ -21,7 +21,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class CountersPutAllAi extends SpellAbilityAi { @Override @@ -29,7 +28,6 @@ public class CountersPutAllAi extends SpellAbilityAi { // AI needs to be expanded, since this function can be pretty complex // based on what // the expected targets could be - final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); List hList; @@ -89,7 +87,7 @@ public class CountersPutAllAi extends SpellAbilityAi { } // prevent run-away activations - first time will always return true - boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); if (curse) { if (type.equals("M1M1")) { @@ -139,7 +137,7 @@ public class CountersPutAllAi extends SpellAbilityAi { return chance; } - return ((r.nextFloat() < .6667) && chance); + return ((MyRandom.getRandom().nextFloat() < .6667) && chance); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java index 631cdfe6535..8f2e82a901f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java @@ -15,8 +15,6 @@ import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.MyRandom; -import java.util.Random; - public class DamageAllAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { @@ -25,8 +23,7 @@ public class DamageAllAi extends SpellAbilityAi { final Card source = sa.getHostCard(); // prevent run-away activations - first time will always return true - final Random r = MyRandom.getRandom(); - if (r.nextFloat() > Math.pow(.9, sa.getActivationsThisTurn())) { + if (MyRandom.getRandom().nextFloat() > Math.pow(.9, sa.getActivationsThisTurn())) { return false; } // abCost stuff that should probably be centralized... diff --git a/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java b/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java index 2397f6cba9d..7be26f04209 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java @@ -15,7 +15,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class DigUntilAi extends SpellAbilityAi { @@ -34,8 +33,7 @@ public class DigUntilAi extends SpellAbilityAi { chance = 1; } - final Random r = MyRandom.getRandom(); - final boolean randomReturn = r.nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1); + final boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1); Player libraryOwner = ai; Player opp = ComputerUtil.getOpponentFor(ai); diff --git a/forge-ai/src/main/java/forge/ai/ability/DiscardAi.java b/forge-ai/src/main/java/forge/ai/ability/DiscardAi.java index 4077571d282..991225e08e1 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DiscardAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DiscardAi.java @@ -16,7 +16,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class DiscardAi extends SpellAbilityAi { @@ -142,8 +141,7 @@ public class DiscardAi extends SpellAbilityAi { return false; } - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(0.9, sa.getActivationsThisTurn()); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(0.9, sa.getActivationsThisTurn()); // some other variables here, like handsize vs. maxHandSize diff --git a/forge-ai/src/main/java/forge/ai/ability/DrainManaAi.java b/forge-ai/src/main/java/forge/ai/ability/DrainManaAi.java index fd110c4e249..a922c0f0508 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DrainManaAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DrainManaAi.java @@ -10,7 +10,6 @@ import forge.game.spellability.TargetRestrictions; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class DrainManaAi extends SpellAbilityAi { @@ -21,8 +20,7 @@ public class DrainManaAi extends SpellAbilityAi { final TargetRestrictions tgt = sa.getTargetRestrictions(); final Card source = sa.getHostCard(); final Player opp = ComputerUtil.getOpponentFor(ai); - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); if (tgt == null) { // assume we are looking to tap human's stuff diff --git a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java index bed19556fa5..f79a824d169 100644 --- a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java @@ -1,7 +1,6 @@ package forge.ai.ability; import java.util.List; -import java.util.Random; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -31,8 +30,7 @@ public class EffectAi extends SpellAbilityAi { @Override protected boolean canPlayAI(final Player ai,final SpellAbility sa) { final Game game = ai.getGame(); - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= .6667; + boolean randomReturn = MyRandom.getRandom().nextFloat() <= .6667; String logic = ""; if (sa.hasParam("AILogic")) { diff --git a/forge-ai/src/main/java/forge/ai/ability/FightAi.java b/forge-ai/src/main/java/forge/ai/ability/FightAi.java index d104fca38cf..d597b5cfa6d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FightAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FightAi.java @@ -16,7 +16,6 @@ import forge.util.MyRandom; import java.util.List; import java.util.Map; -import java.util.Random; public class FightAi extends SpellAbilityAi { @Override @@ -240,8 +239,7 @@ public class FightAi extends SpellAbilityAi { if (!canKill(opponent, fighter, -pumpDefense)) { // can survive return true; } else { - final Random r = MyRandom.getRandom(); - if (r.nextInt(20)<(opponent.getCMC() - fighter.getCMC())) { // trade + if (MyRandom.getRandom().nextInt(20)<(opponent.getCMC() - fighter.getCMC())) { // trade return true; } } diff --git a/forge-ai/src/main/java/forge/ai/ability/LifeExchangeAi.java b/forge-ai/src/main/java/forge/ai/ability/LifeExchangeAi.java index a0b06ed9304..e9b7515b950 100644 --- a/forge-ai/src/main/java/forge/ai/ability/LifeExchangeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/LifeExchangeAi.java @@ -7,8 +7,6 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.util.MyRandom; -import java.util.Random; - public class LifeExchangeAi extends SpellAbilityAi { /* @@ -21,7 +19,6 @@ public class LifeExchangeAi extends SpellAbilityAi { */ @Override protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { - final Random r = MyRandom.getRandom(); final int myLife = aiPlayer.getLife(); Player opponent = ComputerUtil.getOpponentFor(aiPlayer); final int hLife = opponent.getLife(); @@ -31,7 +28,7 @@ public class LifeExchangeAi extends SpellAbilityAi { } // prevent run-away activations - first time will always return true - boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); /* * TODO - There is one card that takes two targets (Soul Conduit) @@ -58,7 +55,7 @@ public class LifeExchangeAi extends SpellAbilityAi { // cost includes sacrifice probably, so make sure it's worth it chance &= (hLife > (myLife + 8)); - return ((r.nextFloat() < .6667) && chance); + return ((MyRandom.getRandom().nextFloat() < .6667) && chance); } /** diff --git a/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java b/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java index 799e83af629..eb849eb92c9 100644 --- a/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java @@ -13,13 +13,10 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.util.MyRandom; -import java.util.Random; - public class LifeSetAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { - final Random r = MyRandom.getRandom(); // Ability_Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); final int myLife = ai.getLife(); @@ -56,7 +53,7 @@ public class LifeSetAi extends SpellAbilityAi { } // prevent run-away activations - first time will always return true - final boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + final boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); final TargetRestrictions tgt = sa.getTargetRestrictions(); if (tgt != null) { @@ -104,7 +101,7 @@ public class LifeSetAi extends SpellAbilityAi { return true; } - return ((r.nextFloat() < .6667) && chance); + return ((MyRandom.getRandom().nextFloat() < .6667) && chance); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java b/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java index 7255d558d80..dffcc09e823 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java @@ -17,7 +17,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class PhasesAi extends SpellAbilityAi { @Override @@ -26,8 +25,7 @@ public class PhasesAi extends SpellAbilityAi { final TargetRestrictions tgt = sa.getTargetRestrictions(); final Card source = sa.getHostCard(); - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); List tgtCards; if (tgt == null) { diff --git a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java index 94080169ed3..214e5f5537a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java @@ -2,7 +2,6 @@ package forge.ai.ability; import java.util.ArrayList; import java.util.List; -import java.util.Random; import com.google.common.base.Predicate; @@ -151,8 +150,7 @@ public class ProtectAi extends SpellAbilityAi { Combat combat = ai.getGame().getCombat(); int dmg = ComputerUtilCombat.damageIfUnblocked(c, opponent, combat, true); float ratio = 1.0f * dmg / opponent.getLife(); - Random r = MyRandom.getRandom(); - return r.nextFloat() < ratio; + return MyRandom.getRandom().nextFloat() < ratio; } } return false; diff --git a/forge-ai/src/main/java/forge/ai/ability/RevealAi.java b/forge-ai/src/main/java/forge/ai/ability/RevealAi.java index 3622daf3e5a..79dea1a45db 100644 --- a/forge-ai/src/main/java/forge/ai/ability/RevealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/RevealAi.java @@ -1,7 +1,5 @@ package forge.ai.ability; -import java.util.Random; - import forge.ai.AiPlayDecision; import forge.ai.PlayerControllerAi; import forge.ai.SpellAbilityAi; @@ -23,8 +21,7 @@ public class RevealAi extends RevealAiBase { return false; } - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.667, sa.getActivationsThisTurn() + 1); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.667, sa.getActivationsThisTurn() + 1); if (SpellAbilityAi.playReusable(ai, sa)) { randomReturn = true; @@ -34,7 +31,7 @@ public class RevealAi extends RevealAiBase { @Override protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { - // logic to see if it should reveal Mircacle Card + // logic to see if it should reveal Miracle Card if (sa.hasParam("MiracleCost")) { final Card c = sa.getHostCard(); for (SpellAbility s : c.getBasicSpells()) { diff --git a/forge-ai/src/main/java/forge/ai/ability/RevealHandAi.java b/forge-ai/src/main/java/forge/ai/ability/RevealHandAi.java index 4bdee1e1153..841a0cdedca 100644 --- a/forge-ai/src/main/java/forge/ai/ability/RevealHandAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/RevealHandAi.java @@ -1,7 +1,5 @@ package forge.ai.ability; -import java.util.Random; - import forge.ai.SpellAbilityAi; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -20,8 +18,7 @@ public class RevealHandAi extends RevealAiBase { return false; } - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.667, sa.getActivationsThisTurn() + 1); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.667, sa.getActivationsThisTurn() + 1); if (SpellAbilityAi.playReusable(ai, sa)) { randomReturn = true; diff --git a/forge-ai/src/main/java/forge/ai/ability/SacrificeAllAi.java b/forge-ai/src/main/java/forge/ai/ability/SacrificeAllAi.java index 8e27b2f6fd4..4a077ba19a1 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SacrificeAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SacrificeAllAi.java @@ -15,15 +15,12 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import forge.util.TextUtil; -import java.util.Random; - public class SacrificeAllAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be - final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); String valid = ""; @@ -52,7 +49,7 @@ public class SacrificeAllAi extends SpellAbilityAi { } // prevent run-away activations - first time will always return true - boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); // if only creatures are affected evaluate both lists and pass only if // human creatures are more valuable @@ -74,7 +71,7 @@ public class SacrificeAllAi extends SpellAbilityAi { return false; } - return ((r.nextFloat() < .9667) && chance); + return ((MyRandom.getRandom().nextFloat() < .9667) && chance); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/ScryAi.java b/forge-ai/src/main/java/forge/ai/ability/ScryAi.java index 1966e2a3c20..a831818c7da 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ScryAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ScryAi.java @@ -15,8 +15,6 @@ import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.MyRandom; -import java.util.Random; - public class ScryAi extends SpellAbilityAi { /* (non-Javadoc) @@ -171,8 +169,7 @@ public class ScryAi extends SpellAbilityAi { chance = .667; // 66.7% chance for sorcery speed (since it will // never activate EOT) } - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1); if (SpellAbilityAi.playReusable(ai, sa)) { randomReturn = true; diff --git a/forge-ai/src/main/java/forge/ai/ability/TapAllAi.java b/forge-ai/src/main/java/forge/ai/ability/TapAllAi.java index d23715135fd..c61ef26a721 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TapAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TapAllAi.java @@ -21,7 +21,6 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class TapAllAi extends SpellAbilityAi { @Override @@ -64,8 +63,7 @@ public class TapAllAi extends SpellAbilityAi { } } - final Random r = MyRandom.getRandom(); - if (r.nextFloat() > Math.pow(.6667, sa.getActivationsThisTurn())) { + if (MyRandom.getRandom().nextFloat() > Math.pow(.6667, sa.getActivationsThisTurn())) { return false; } @@ -135,9 +133,8 @@ public class TapAllAi extends SpellAbilityAi { return true; } - final Random r = MyRandom.getRandom(); boolean rr = false; - if (r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn())) { + if (MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn())) { rr = true; } diff --git a/forge-ai/src/main/java/forge/ai/ability/TapOrUntapAi.java b/forge-ai/src/main/java/forge/ai/ability/TapOrUntapAi.java index a60d1d7d983..b2655c16ff5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TapOrUntapAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TapOrUntapAi.java @@ -8,7 +8,6 @@ import forge.game.spellability.TargetRestrictions; import forge.util.MyRandom; import java.util.List; -import java.util.Random; public class TapOrUntapAi extends TapAiBase { @@ -20,8 +19,7 @@ public class TapOrUntapAi extends TapAiBase { final TargetRestrictions tgt = sa.getTargetRestrictions(); final Card source = sa.getHostCard(); - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); + boolean randomReturn = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); if (tgt == null) { // assume we are looking to tap human's stuff diff --git a/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java b/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java index 22494c8b557..5a105d49d00 100644 --- a/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java @@ -16,7 +16,6 @@ import forge.util.MyRandom; import java.util.ArrayList; import java.util.List; -import java.util.Random; public class UnattachAllAi extends SpellAbilityAi { @@ -25,7 +24,6 @@ public class UnattachAllAi extends SpellAbilityAi { */ @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { - final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); @@ -34,7 +32,7 @@ public class UnattachAllAi extends SpellAbilityAi { } // prevent run-away activations - first time will always return true - boolean chance = r.nextFloat() <= .9; + boolean chance = MyRandom.getRandom().nextFloat() <= .9; // Attach spells always have a target final TargetRestrictions tgt = sa.getTargetRestrictions();