diff --git a/forge-ai/src/main/java/simulation/GameSimulator.java b/forge-ai/src/main/java/simulation/GameSimulator.java index 27e641a5f11..e8c9b1957b6 100644 --- a/forge-ai/src/main/java/simulation/GameSimulator.java +++ b/forge-ai/src/main/java/simulation/GameSimulator.java @@ -40,12 +40,11 @@ public class GameSimulator { debugPrint = false; // TODO: Make this logic more bulletproof. Player origAiPlayer = origGame.getPlayers().get(1); - Player origOpponent = origGame.getPlayers().get(0); - origScore = eval.getScoreForGameState(origGame, origAiPlayer, origOpponent); + origScore = eval.getScoreForGameState(origGame, origAiPlayer); ArrayList simLines = new ArrayList(); debugLines = simLines; - int simScore = eval.getScoreForGameState(simGame, aiPlayer, opponent); + int simScore = eval.getScoreForGameState(simGame, aiPlayer); if (simScore != origScore) { // Print debug info. printDiff(origLines, simLines); @@ -155,6 +154,7 @@ public class GameSimulator { System.err.println("Stack empty: " + sa); return Integer.MIN_VALUE; } + // TODO: This needs to set an AI controller for all opponents, in case of multiplayer. opponent.runWithController(new Runnable() { @Override public void run() { @@ -181,7 +181,7 @@ public class GameSimulator { ArrayList simLines = new ArrayList(); debugLines = simLines; debugPrint = false; - int score = eval.getScoreForGameState(simGame, aiPlayer, opponent); + int score = eval.getScoreForGameState(simGame, aiPlayer); debugLines = null; debugPrint = true; printDiff(origLines, simLines); diff --git a/forge-ai/src/main/java/simulation/GameStateEvaluator.java b/forge-ai/src/main/java/simulation/GameStateEvaluator.java index 972f033eaa4..1f1a755f81c 100644 --- a/forge-ai/src/main/java/simulation/GameStateEvaluator.java +++ b/forge-ai/src/main/java/simulation/GameStateEvaluator.java @@ -8,7 +8,7 @@ import forge.game.zone.ZoneType; public class GameStateEvaluator { - public int getScoreForGameState(Game game, Player aiPlayer, Player opponent) { + public int getScoreForGameState(Game game, Player aiPlayer) { if (game.isGameOver()) { return game.getOutcome().getWinningPlayer() == aiPlayer ? Integer.MAX_VALUE : Integer.MIN_VALUE; } @@ -43,13 +43,19 @@ public class GameStateEvaluator { if (!nonAbilityText.isEmpty()) { GameSimulator.debugPrint(" "+nonAbilityText.replaceAll("CARDNAME", c.getName())); } - - } GameSimulator.debugPrint(" My life: " + aiPlayer.getLife()); score += aiPlayer.getLife(); - GameSimulator.debugPrint(" Opponent life: -" + opponent.getLife()); - score -= opponent.getLife(); + int opponentIndex = 1; + int opponentLife = 0; + for (Player opponent : game.getPlayers()) { + if (opponent != aiPlayer) { + GameSimulator.debugPrint(" Opponent " + opponentIndex + " life: -" + opponent.getLife()); + opponentLife += opponent.getLife(); + opponentIndex++; + } + } + score -= opponentLife / (game.getPlayers().size() - 1); GameSimulator.debugPrint("Score = " + score); return score; }