From c1db466d0573c4727bd9023f00f7497eec03a90c Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 24 Jul 2021 05:52:02 +0400 Subject: [PATCH] AI: fixed computer's errors if all players quit the game; --- .../src/mage/player/ai/GameStateEvaluator2.java | 6 +++++- .../java/mage/player/ai/simulators/ActionSimulator.java | 6 +++++- .../src/mage/player/ai/GameStateEvaluator.java | 6 +++++- Mage.Server/src/main/java/mage/server/util/SystemUtil.java | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/GameStateEvaluator2.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/GameStateEvaluator2.java index 0997159e820..5b51bad6bfe 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/GameStateEvaluator2.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/GameStateEvaluator2.java @@ -26,7 +26,11 @@ public final class GameStateEvaluator2 { public static PlayerEvaluateScore evaluate(UUID playerId, Game game) { Player player = game.getPlayer(playerId); - Player opponent = game.getPlayer(game.getOpponents(playerId).iterator().next()); // TODO: add multi opponent support? + Player opponent = game.getPlayer(game.getOpponents(playerId).stream().findFirst().orElse(null)); // TODO: add multi opponent support? + if (opponent == null) { + return new PlayerEvaluateScore(WIN_GAME_SCORE); + } + if (game.checkIfGameIsOver()) { if (player.hasLost() || opponent.hasWon()) { diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/ActionSimulator.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/ActionSimulator.java index ec823c3e910..1f3c00d3ab2 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/ActionSimulator.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/ActionSimulator.java @@ -34,7 +34,11 @@ public class ActionSimulator { } public int evaluateState() { - Player opponent = game.getPlayer(game.getOpponents(player.getId()).iterator().next()); + Player opponent = game.getPlayer(game.getOpponents(player.getId()).stream().findFirst().orElse(null)); + if (opponent == null) { + return Integer.MAX_VALUE; + } + if (game.checkIfGameIsOver()) { if (player.hasLost() || opponent.hasWon()) { return Integer.MIN_VALUE; diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java index 0ff2571cbd9..236bc2e19e1 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java @@ -42,7 +42,11 @@ public final class GameStateEvaluator { public static int evaluate(UUID playerId, Game game, boolean ignoreTapped) { Player player = game.getPlayer(playerId); - Player opponent = game.getPlayer(game.getOpponents(playerId).iterator().next()); + Player opponent = game.getPlayer(game.getOpponents(playerId).stream().findFirst().orElse(null)); + if (opponent == null) { + return WIN_SCORE; + } + if (game.checkIfGameIsOver()) { if (player.hasLost() || opponent.hasWon()) { return LOSE_SCORE; diff --git a/Mage.Server/src/main/java/mage/server/util/SystemUtil.java b/Mage.Server/src/main/java/mage/server/util/SystemUtil.java index 38cef7431f1..95f4d8dc1db 100644 --- a/Mage.Server/src/main/java/mage/server/util/SystemUtil.java +++ b/Mage.Server/src/main/java/mage/server/util/SystemUtil.java @@ -376,7 +376,7 @@ public final class SystemUtil { // 3. system commands if (runGroup.isSpecialCommand) { - Player opponent = game.getPlayer(game.getOpponents(feedbackPlayer.getId()).iterator().next()); + Player opponent = game.getPlayer(game.getOpponents(feedbackPlayer.getId()).stream().findFirst().orElse(null)); String info; switch (runGroup.name) {