mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
forge.game.ai created - just a small step towards AI isolation
This commit is contained in:
13
.gitattributes
vendored
13
.gitattributes
vendored
@@ -13621,6 +13621,12 @@ src/main/java/forge/game/MatchController.java -text
|
|||||||
src/main/java/forge/game/MatchStartHelper.java -text
|
src/main/java/forge/game/MatchStartHelper.java -text
|
||||||
src/main/java/forge/game/PlanarDice.java -text
|
src/main/java/forge/game/PlanarDice.java -text
|
||||||
src/main/java/forge/game/PlayerStartConditions.java -text
|
src/main/java/forge/game/PlayerStartConditions.java -text
|
||||||
|
src/main/java/forge/game/ai/AiController.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/ai/AiInputBlock.java -text
|
||||||
|
src/main/java/forge/game/ai/AiInputCommon.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/ai/ComputerUtil.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/ai/ComputerUtilAttack.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/ai/ComputerUtilBlock.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/event/BlockerAssignedEvent.java -text
|
src/main/java/forge/game/event/BlockerAssignedEvent.java -text
|
||||||
src/main/java/forge/game/event/CardDamagedEvent.java -text
|
src/main/java/forge/game/event/CardDamagedEvent.java -text
|
||||||
src/main/java/forge/game/event/CardDestroyedEvent.java -text
|
src/main/java/forge/game/event/CardDestroyedEvent.java -text
|
||||||
@@ -13676,13 +13682,6 @@ src/main/java/forge/game/phase/Untap.java -text
|
|||||||
src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/AIPlayer.java svneol=native#text/plain
|
src/main/java/forge/game/player/AIPlayer.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/Computer.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/ComputerAiInputBlock.java -text
|
|
||||||
src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/game/player/HumanPlayer.java svneol=native#text/plain
|
src/main/java/forge/game/player/HumanPlayer.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/LobbyPlayer.java -text
|
src/main/java/forge/game/player/LobbyPlayer.java -text
|
||||||
src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import forge.card.abilityfactory.ApiType;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.mana.ManaCostBeingPaid;
|
import forge.card.mana.ManaCostBeingPaid;
|
||||||
|
import forge.card.replacement.ReplaceMoved;
|
||||||
import forge.card.replacement.ReplacementEffect;
|
import forge.card.replacement.ReplacementEffect;
|
||||||
import forge.card.replacement.ReplacementResult;
|
import forge.card.replacement.ReplacementResult;
|
||||||
import forge.card.spellability.AbilityManaPart;
|
import forge.card.spellability.AbilityManaPart;
|
||||||
@@ -57,12 +58,12 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.card.trigger.ZCTrigger;
|
import forge.card.trigger.ZCTrigger;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.event.CounterAddedEvent;
|
import forge.game.event.CounterAddedEvent;
|
||||||
import forge.game.event.CardEquippedEvent;
|
import forge.game.event.CardEquippedEvent;
|
||||||
import forge.game.event.CounterRemovedEvent;
|
import forge.game.event.CounterRemovedEvent;
|
||||||
import forge.game.event.SetTappedEvent;
|
import forge.game.event.SetTappedEvent;
|
||||||
import forge.game.phase.Combat;
|
import forge.game.phase.Combat;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
@@ -9069,4 +9070,58 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
clearBlockedThisTurn();
|
clearBlockedThisTurn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* hasETBTrigger.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* a {@link forge.Card} object.
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
public boolean hasETBTrigger() {
|
||||||
|
for (final Trigger tr : this.getTriggers()) {
|
||||||
|
final HashMap<String, String> params = tr.getMapParams();
|
||||||
|
if (tr.getMode() != TriggerType.ChangesZone) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* hasETBTrigger.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
public boolean hasETBReplacement() {
|
||||||
|
for (final ReplacementEffect re : getReplacementEffects()) {
|
||||||
|
final HashMap<String, String> params = re.getMapParams();
|
||||||
|
if (!(re instanceof ReplaceMoved)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // end Card class
|
} // end Card class
|
||||||
|
|||||||
@@ -59,11 +59,11 @@ import forge.game.GameLossReason;
|
|||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
import forge.game.MatchController;
|
import forge.game.MatchController;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.event.CardDestroyedEvent;
|
import forge.game.event.CardDestroyedEvent;
|
||||||
import forge.game.event.CardRegeneratedEvent;
|
import forge.game.event.CardRegeneratedEvent;
|
||||||
import forge.game.event.CardSacrificedEvent;
|
import forge.game.event.CardSacrificedEvent;
|
||||||
import forge.game.event.DuelOutcomeEvent;
|
import forge.game.event.DuelOutcomeEvent;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerType;
|
import forge.game.player.PlayerType;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
|
|||||||
@@ -54,10 +54,10 @@ import forge.control.input.InputPayDiscardCost;
|
|||||||
import forge.control.input.InputPayManaCostAbility;
|
import forge.control.input.InputPayManaCostAbility;
|
||||||
import forge.control.input.InputPayReturnCost;
|
import forge.control.input.InputPayReturnCost;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.event.CardDamagedEvent;
|
import forge.game.event.CardDamagedEvent;
|
||||||
import forge.game.event.FlipCoinEvent;
|
import forge.game.event.FlipCoinEvent;
|
||||||
import forge.game.event.LifeLossEvent;
|
import forge.game.event.LifeLossEvent;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ import forge.card.spellability.SpellAbilityCondition;
|
|||||||
import forge.card.spellability.SpellAbilityRestriction;
|
import forge.card.spellability.SpellAbilityRestriction;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package forge.card.abilityfactory;
|
|||||||
|
|
||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public abstract class SpellAiLogic {
|
public abstract class SpellAiLogic {
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.staticability.StaticAbility;
|
import forge.card.staticability.StaticAbility;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -31,11 +31,11 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
|
import forge.game.ai.ComputerUtilBlock;
|
||||||
import forge.game.phase.Combat;
|
import forge.game.phase.Combat;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.ComputerUtilBlock;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package forge.card.abilityfactory.ai;
|
|||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public class ChooseCardNameAi extends SpellAiLogic {
|
public class ChooseCardNameAi extends SpellAiLogic {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.spellability.TargetSelection;
|
import forge.card.spellability.TargetSelection;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.spellability.TargetSelection;
|
import forge.card.spellability.TargetSelection;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import forge.card.cost.CostSacrifice;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import forge.Singletons;
|
|||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import forge.Singletons;
|
|||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public class PoisonAi extends SpellAiLogic {
|
public class PoisonAi extends SpellAiLogic {
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ import forge.card.cost.CostUtil;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellAbilityRestriction;
|
import forge.card.spellability.SpellAbilityRestriction;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import forge.card.abilityfactory.SpellAiLogic;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import forge.card.cardfactory.CardFactoryUtil;
|
|||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import forge.Card;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public class StoreSVarAi extends SpellAiLogic {
|
public class StoreSVarAi extends SpellAiLogic {
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import forge.card.abilityfactory.SpellAiLogic;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import forge.card.cost.Cost;
|
|||||||
import forge.card.cost.CostUtil;
|
import forge.card.cost.CostUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import forge.card.cardfactory.CardFactoryUtil;
|
|||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import forge.card.spellability.Spell;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellAbilityRestriction;
|
import forge.card.spellability.SpellAbilityRestriction;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import forge.Singletons;
|
|||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.abilityfactory.SpellEffect;
|
import forge.card.abilityfactory.SpellEffect;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import forge.card.spellability.AbilityActivated;
|
|||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.control.input.InputSelectManyCards;
|
import forge.control.input.InputSelectManyCards;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ import forge.card.spellability.Target;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.control.input.InputPayManaCost;
|
import forge.control.input.InputPayManaCost;
|
||||||
import forge.control.input.InputPayManaCostAbility;
|
import forge.control.input.InputPayManaCostAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerUtil;
|
import forge.game.player.PlayerUtil;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
|
|||||||
@@ -70,10 +70,10 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.control.input.InputPayManaCostUtil;
|
import forge.control.input.InputPayManaCostUtil;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.event.TokenCreatedEvent;
|
import forge.game.event.TokenCreatedEvent;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.card.spellability.SpellAbilityStackInstance;
|
import forge.card.spellability.SpellAbilityStackInstance;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import forge.control.input.Input;
|
|||||||
import forge.control.input.InputPayManaCost2;
|
import forge.control.input.InputPayManaCost2;
|
||||||
import forge.control.input.InputPayManaX;
|
import forge.control.input.InputPayManaX;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import forge.CounterType;
|
|||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.mana.ManaCostBeingPaid;
|
import forge.card.mana.ManaCostBeingPaid;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import forge.Singletons;
|
|||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
|
|||||||
@@ -42,9 +42,8 @@ import forge.card.trigger.Trigger;
|
|||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerAIGeneral;
|
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
@@ -299,7 +298,7 @@ public class SpellPermanent extends Spell {
|
|||||||
}
|
}
|
||||||
// save cards with flash for surprise blocking
|
// save cards with flash for surprise blocking
|
||||||
if (card.hasKeyword("Flash")
|
if (card.hasKeyword("Flash")
|
||||||
&& !ComputerAIGeneral.hasETBTrigger(card)
|
&& !card.hasETBTrigger()
|
||||||
&& (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(ai)
|
&& (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(ai)
|
||||||
|| Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) {
|
|| Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) {
|
||||||
return false;
|
return false;
|
||||||
@@ -381,8 +380,8 @@ public class SpellPermanent extends Spell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (card.isCreature() && (card.getNetDefense() <= 0) && !card.hasStartOfKeyword("etbCounter")
|
if (card.isCreature() && (card.getNetDefense() <= 0) && !card.hasStartOfKeyword("etbCounter")
|
||||||
&& mana.countX() == 0 && !ComputerAIGeneral.hasETBTrigger(card)
|
&& mana.countX() == 0 && !card.hasETBTrigger()
|
||||||
&& !ComputerAIGeneral.hasETBReplacement(card)) {
|
&& !card.hasETBReplacement()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
//import forge.util.TextUtil;
|
//import forge.util.TextUtil;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import forge.card.spellability.SpellAbilityRestriction;
|
|||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
// Wrapper ability that checks the requirements again just before
|
// Wrapper ability that checks the requirements again just before
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -15,24 +15,18 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.esotericsoftware.minlog.Log;
|
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
|
||||||
import forge.card.abilityfactory.ApiType;
|
import forge.card.abilityfactory.ApiType;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
|
||||||
import forge.card.replacement.ReplaceMoved;
|
|
||||||
import forge.card.replacement.ReplacementEffect;
|
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
import forge.card.trigger.Trigger;
|
|
||||||
import forge.card.trigger.TriggerType;
|
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,7 +37,7 @@ import forge.game.zone.ZoneType;
|
|||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class ComputerAIGeneral implements Computer {
|
public class AiController {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final GameState game;
|
private final GameState game;
|
||||||
@@ -52,66 +46,11 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
* Constructor for ComputerAI_General.
|
* Constructor for ComputerAI_General.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public ComputerAIGeneral(final Player computerPlayer, final GameState game0) {
|
public AiController(final Player computerPlayer, final GameState game0) {
|
||||||
player = computerPlayer;
|
player = computerPlayer;
|
||||||
game = game0;
|
game = game0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* main.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public final void playLands()
|
|
||||||
{
|
|
||||||
List<Card> landsWannaPlay = ComputerUtil.getLandsToPlay(player);
|
|
||||||
|
|
||||||
while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) {
|
|
||||||
Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player);
|
|
||||||
landsWannaPlay.remove(land);
|
|
||||||
player.playLand(land);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* hasACardGivingHaste.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a boolean.
|
|
||||||
*/
|
|
||||||
public static boolean hasACardGivingHaste(final Player ai) {
|
|
||||||
final List<Card> all = new ArrayList<Card>(ai.getCardsIn(ZoneType.Battlefield));
|
|
||||||
all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai));
|
|
||||||
all.addAll(ai.getCardsIn(ZoneType.Hand));
|
|
||||||
|
|
||||||
for (final Card c : all) {
|
|
||||||
for (final SpellAbility sa : c.getSpellAbility()) {
|
|
||||||
|
|
||||||
if (sa.getApi() == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// ????
|
|
||||||
// if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue
|
|
||||||
if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
} // hasACardGivingHaste
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* getAvailableSpellAbilities.
|
* getAvailableSpellAbilities.
|
||||||
@@ -120,77 +59,21 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private List<Card> getAvailableCards() {
|
private List<Card> getAvailableCards() {
|
||||||
|
|
||||||
final Player opp = player.getOpponent();
|
|
||||||
List<Card> all = new ArrayList<Card>(player.getCardsIn(ZoneType.Hand));
|
List<Card> all = new ArrayList<Card>(player.getCardsIn(ZoneType.Hand));
|
||||||
all.addAll(player.getCardsIn(ZoneType.Battlefield));
|
//all.addAll(player.getCardsIn(ZoneType.Battlefield));
|
||||||
all.addAll(player.getCardsIn(ZoneType.Exile));
|
//all.addAll(player.getCardsIn(ZoneType.Exile));
|
||||||
all.addAll(player.getCardsIn(ZoneType.Graveyard));
|
all.addAll(player.getCardsIn(ZoneType.Graveyard));
|
||||||
all.addAll(player.getCardsIn(ZoneType.Command));
|
all.addAll(player.getCardsIn(ZoneType.Command));
|
||||||
if (!player.getCardsIn(ZoneType.Library).isEmpty()) {
|
if (!player.getCardsIn(ZoneType.Library).isEmpty()) {
|
||||||
all.add(player.getCardsIn(ZoneType.Library).get(0));
|
all.add(player.getCardsIn(ZoneType.Library).get(0));
|
||||||
}
|
}
|
||||||
all.addAll(opp.getCardsIn(ZoneType.Exile));
|
for(Player p : game.getPlayers()) {
|
||||||
all.addAll(opp.getCardsIn(ZoneType.Battlefield));
|
all.addAll(p.getCardsIn(ZoneType.Exile));
|
||||||
|
all.addAll(p.getCardsIn(ZoneType.Battlefield));
|
||||||
|
}
|
||||||
return all;
|
return all;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* hasETBTrigger.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param card
|
|
||||||
* a {@link forge.Card} object.
|
|
||||||
* @return a boolean.
|
|
||||||
*/
|
|
||||||
public static boolean hasETBTrigger(final Card card) {
|
|
||||||
for (final Trigger tr : card.getTriggers()) {
|
|
||||||
final HashMap<String, String> params = tr.getMapParams();
|
|
||||||
if (tr.getMode() != TriggerType.ChangesZone) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* hasETBTrigger.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param card
|
|
||||||
* a {@link forge.Card} object.
|
|
||||||
* @return a boolean.
|
|
||||||
*/
|
|
||||||
public static boolean hasETBReplacement(final Card card) {
|
|
||||||
for (final ReplacementEffect re : card.getReplacementEffects()) {
|
|
||||||
final HashMap<String, String> params = re.getMapParams();
|
|
||||||
if (!(re instanceof ReplaceMoved)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* getPossibleETBCounters.
|
* getPossibleETBCounters.
|
||||||
@@ -271,40 +154,13 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
* declare_attackers.
|
* declare_attackers.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
@Override
|
|
||||||
public final void declareAttackers() {
|
|
||||||
// 12/2/10(sol) the decision making here has moved to getAttackers()
|
|
||||||
game.setCombat(ComputerUtil.getAttackers(player));
|
|
||||||
|
|
||||||
final List<Card> att = game.getCombat().getAttackers();
|
|
||||||
if (!att.isEmpty()) {
|
|
||||||
game.getPhaseHandler().setCombat(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final Card element : att) {
|
|
||||||
// tapping of attackers happens after Propaganda is paid for
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker.");
|
|
||||||
Log.debug(sb.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
player.getZone(ZoneType.Battlefield).updateObservers();
|
|
||||||
|
|
||||||
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
|
||||||
|
|
||||||
// ai is about to attack, cancel all phase skipping
|
|
||||||
for (Player p : game.getPlayers()) {
|
|
||||||
p.getController().autoPassCancel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* stack_not_empty.
|
* stack_not_empty.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
@Override
|
|
||||||
public final List<SpellAbility> getSpellAbilitiesToPlay() {
|
public final List<SpellAbility> getSpellAbilitiesToPlay() {
|
||||||
// if top of stack is owned by me
|
// if top of stack is owned by me
|
||||||
if (!game.getStack().isEmpty() && game.getStack().peekInstance().getActivatingPlayer().equals(player)) {
|
if (!game.getStack().isEmpty() && game.getStack().peekInstance().getActivatingPlayer().equals(player)) {
|
||||||
@@ -326,7 +182,11 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
return ComputerUtil.playSpellAbilities(player, getSpellAbilities(cards), game);
|
return ComputerUtil.playSpellAbilities(player, getSpellAbilities(cards), game);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public GameState getGame()
|
||||||
|
{
|
||||||
|
return game;
|
||||||
|
}
|
||||||
|
|
||||||
public Player getPlayer()
|
public Player getPlayer()
|
||||||
{
|
{
|
||||||
return player;
|
return player;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -6,12 +6,13 @@ import forge.Card;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this type.
|
* TODO: Write javadoc for this type.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class ComputerAiInputBlock extends Input {
|
public class AiInputBlock extends Input {
|
||||||
|
|
||||||
private final GameState game;
|
private final GameState game;
|
||||||
/**
|
/**
|
||||||
@@ -19,7 +20,7 @@ public class ComputerAiInputBlock extends Input {
|
|||||||
* @param game
|
* @param game
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public ComputerAiInputBlock(GameState game, Player player) {
|
public AiInputBlock(GameState game, Player player) {
|
||||||
super();
|
super();
|
||||||
this.game = game;
|
this.game = game;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
@@ -15,17 +15,19 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.esotericsoftware.minlog.Log;
|
import com.esotericsoftware.minlog.Log;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Card;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -35,11 +37,13 @@ import forge.game.phase.PhaseType;
|
|||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class ComputerAIInput extends Input {
|
public class AiInputCommon extends Input {
|
||||||
/** Constant <code>serialVersionUID=-3091338639571662216L</code>. */
|
/** Constant <code>serialVersionUID=-3091338639571662216L</code>. */
|
||||||
private static final long serialVersionUID = -3091338639571662216L;
|
private static final long serialVersionUID = -3091338639571662216L;
|
||||||
|
|
||||||
private final Computer computer;
|
private final AiController computer;
|
||||||
|
private final Player player;
|
||||||
|
private final GameState game;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -49,15 +53,17 @@ public class ComputerAIInput extends Input {
|
|||||||
* @param iComputer
|
* @param iComputer
|
||||||
* a {@link forge.game.player.Computer} object.
|
* a {@link forge.game.player.Computer} object.
|
||||||
*/
|
*/
|
||||||
public ComputerAIInput(final Computer iComputer) {
|
public AiInputCommon(final AiController iComputer) {
|
||||||
this.computer = iComputer;
|
this.computer = iComputer;
|
||||||
|
player = computer.getPlayer();
|
||||||
|
this.game = computer.getGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void showMessage() {
|
public final void showMessage() {
|
||||||
// should not think when the game is over
|
// should not think when the game is over
|
||||||
if (Singletons.getModel().getGame().isGameOver()) {
|
if (game.isGameOver()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +74,7 @@ public class ComputerAIInput extends Input {
|
|||||||
* send the \"Stack Report\" and the
|
* send the \"Stack Report\" and the
|
||||||
* \"Detailed Error Trace\" to the Forge forum.");
|
* \"Detailed Error Trace\" to the Forge forum.");
|
||||||
*/
|
*/
|
||||||
GameState game = Singletons.getModel().getGame();
|
|
||||||
final PhaseType phase = game.getPhaseHandler().getPhase();
|
final PhaseType phase = game.getPhaseHandler().getPhase();
|
||||||
|
|
||||||
if (game.getStack().size() > 0) {
|
if (game.getStack().size() > 0) {
|
||||||
@@ -76,14 +82,13 @@ public class ComputerAIInput extends Input {
|
|||||||
} else {
|
} else {
|
||||||
switch(phase) {
|
switch(phase) {
|
||||||
case COMBAT_DECLARE_ATTACKERS:
|
case COMBAT_DECLARE_ATTACKERS:
|
||||||
this.computer.declareAttackers();
|
declareAttackers();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAIN1:
|
case MAIN1:
|
||||||
case MAIN2:
|
case MAIN2:
|
||||||
Log.debug("Computer " + phase.toString());
|
Log.debug("Computer " + phase.toString());
|
||||||
this.computer.playLands();
|
playLands();
|
||||||
// fall through is intended
|
// fall through is intended
|
||||||
default:
|
default:
|
||||||
playSpellAbilities(game);
|
playSpellAbilities(game);
|
||||||
@@ -93,29 +98,61 @@ public class ComputerAIInput extends Input {
|
|||||||
game.getPhaseHandler().passPriority();
|
game.getPhaseHandler().passPriority();
|
||||||
} // getMessage();
|
} // getMessage();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
*/
|
||||||
|
private void declareAttackers() {
|
||||||
|
// 12/2/10(sol) the decision making here has moved to getAttackers()
|
||||||
|
game.setCombat(ComputerUtil.getAttackers(player));
|
||||||
|
|
||||||
|
final List<Card> att = game.getCombat().getAttackers();
|
||||||
|
if (!att.isEmpty()) {
|
||||||
|
game.getPhaseHandler().setCombat(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final Card element : att) {
|
||||||
|
// tapping of attackers happens after Propaganda is paid for
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker.");
|
||||||
|
Log.debug(sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
player.getZone(ZoneType.Battlefield).updateObservers();
|
||||||
|
|
||||||
|
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
|
|
||||||
|
// ai is about to attack, cancel all phase skipping
|
||||||
|
for (Player p : game.getPlayers()) {
|
||||||
|
p.getController().autoPassCancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
*/
|
||||||
|
private void playLands() {
|
||||||
|
final Player player = computer.getPlayer();
|
||||||
|
List<Card> landsWannaPlay = ComputerUtil.getLandsToPlay(player);
|
||||||
|
|
||||||
|
while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) {
|
||||||
|
Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player);
|
||||||
|
landsWannaPlay.remove(land);
|
||||||
|
player.playLand(land);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void playSpellAbilities(final GameState game)
|
protected void playSpellAbilities(final GameState game)
|
||||||
{
|
{
|
||||||
Player ai = computer.getPlayer();
|
|
||||||
List<SpellAbility> toPlay = computer.getSpellAbilitiesToPlay();
|
List<SpellAbility> toPlay = computer.getSpellAbilitiesToPlay();
|
||||||
if ( toPlay != null ) {
|
if ( toPlay != null ) {
|
||||||
for(SpellAbility sa : toPlay) {
|
for(SpellAbility sa : toPlay) {
|
||||||
//System.out.print(sa);
|
//System.out.print(sa);
|
||||||
if (ComputerUtil.canBePlayedAndPayedByAI(ai, sa))
|
if (ComputerUtil.canBePlayedAndPayedByAI(player, sa))
|
||||||
ComputerUtil.handlePlayingSpellAbility(ai, sa, game);
|
ComputerUtil.handlePlayingSpellAbility(player, sa, game);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Getter for the field <code>computer</code>.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.game.player.Computer} object.
|
|
||||||
*/
|
|
||||||
public final Computer getComputer() {
|
|
||||||
return this.computer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.control.input.Input#isClassUpdated()
|
* @see forge.control.input.Input#isClassUpdated()
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -64,6 +64,7 @@ import forge.game.phase.Combat;
|
|||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
@@ -2089,7 +2090,7 @@ public class ComputerUtil {
|
|||||||
if (card.getSVar("PlayMain1").equals("TRUE")) {
|
if (card.getSVar("PlayMain1").equals("TRUE")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((card.isCreature() && (ComputerAIGeneral.hasACardGivingHaste(ai)
|
if ((card.isCreature() && (ComputerUtil.hasACardGivingHaste(ai)
|
||||||
|| card.hasKeyword("Haste"))) || card.hasKeyword("Exalted")) {
|
|| card.hasKeyword("Haste"))) || card.hasKeyword("Exalted")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2265,4 +2266,41 @@ public class ComputerUtil {
|
|||||||
|
|
||||||
return r.nextFloat() <= Math.pow(.95, activations);
|
return r.nextFloat() <= Math.pow(.95, activations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* hasACardGivingHaste.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
public static boolean hasACardGivingHaste(final Player ai) {
|
||||||
|
final List<Card> all = new ArrayList<Card>(ai.getCardsIn(ZoneType.Battlefield));
|
||||||
|
all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai));
|
||||||
|
all.addAll(ai.getCardsIn(ZoneType.Hand));
|
||||||
|
|
||||||
|
for (final Card c : all) {
|
||||||
|
for (final SpellAbility sa : c.getSpellAbility()) {
|
||||||
|
|
||||||
|
if (sa.getApi() == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ????
|
||||||
|
// if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue
|
||||||
|
if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} // hasACardGivingHaste
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -35,6 +35,7 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.phase.Combat;
|
import forge.game.phase.Combat;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.game.player;
|
package forge.game.ai;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -32,6 +32,7 @@ import forge.GameEntity;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.game.phase.Combat;
|
import forge.game.phase.Combat;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,8 +57,8 @@ import forge.card.trigger.TriggerHandler;
|
|||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.ComputerUtilBlock;
|
import forge.game.ai.ComputerUtilBlock;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.control.input.InputSelectManyCards;
|
import forge.control.input.InputSelectManyCards;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ import forge.CardPredicates;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.AiController;
|
||||||
|
import forge.game.ai.AiInputBlock;
|
||||||
|
import forge.game.ai.AiInputCommon;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
@@ -42,6 +46,7 @@ import forge.util.MyRandom;
|
|||||||
*/
|
*/
|
||||||
public class AIPlayer extends Player {
|
public class AIPlayer extends Player {
|
||||||
|
|
||||||
|
private final AiController brains;
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Constructor for AIPlayer.
|
* Constructor for AIPlayer.
|
||||||
@@ -53,8 +58,9 @@ public class AIPlayer extends Player {
|
|||||||
*/
|
*/
|
||||||
public AIPlayer(final LobbyPlayer player, final GameState game) {
|
public AIPlayer(final LobbyPlayer player, final GameState game) {
|
||||||
super(player, game, new PlayerController());
|
super(player, game, new PlayerController());
|
||||||
getController().setDefaultInput(new ComputerAIInput(new ComputerAIGeneral(this, game)));
|
brains = new AiController(this, game);
|
||||||
getController().setBlockInput(new ComputerAiInputBlock(game, this));
|
getController().setDefaultInput(new AiInputCommon(brains));
|
||||||
|
getController().setBlockInput(new AiInputBlock(game, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.game.player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import forge.card.spellability.SpellAbility;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Computer interface.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public interface Computer {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* declare_attackers.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
void declareAttackers();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* stack_not_empty.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
List<SpellAbility> getSpellAbilitiesToPlay();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
*/
|
|
||||||
void playLands();
|
|
||||||
|
|
||||||
public Player getPlayer();
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -52,9 +52,9 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.control.input.InputPayManaCostAbility;
|
import forge.control.input.InputPayManaCostAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.event.SpellResolvedEvent;
|
import forge.game.event.SpellResolvedEvent;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
|
|||||||
Reference in New Issue
Block a user