diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/DetermineStartPlayerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/DetermineStartPlayerState.java index cb98f8b1..2128abbf 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/DetermineStartPlayerState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/DetermineStartPlayerState.java @@ -28,7 +28,6 @@ public class DetermineStartPlayerState extends GameAutomatonState { */ private Map diceResults = new HashMap<>(); private Map rankedResults = new HashMap<>(); - private List playersHaveToRoll = new ArrayList<>(); /** * Constructs a server state of the specified game logic. @@ -43,9 +42,6 @@ public DetermineStartPlayerState(GameState gameAutomaton, ServerGameLogic logic) @Override public void enter() { LOGGER.log(System.Logger.Level.DEBUG, "Entered DetermineStartPlayerState state."); - for (Map.Entry entry: this.logic.getGame().getPlayers().entrySet()) { - this.playersHaveToRoll.add(entry.getKey()); - } } @Override @@ -53,7 +49,6 @@ public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); this.diceResults.clear(); this.rankedResults.clear(); - this.playersHaveToRoll.clear(); } /** @@ -70,29 +65,31 @@ public void received(RequestDieMessage msg, int from) { this.diceResults.put(from, roll); if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { int maximumRoll = 0; - for (Map.Entry entry: this.diceResults.entrySet()) { - if (maximumRoll <= entry.getValue()) { + List playersHaveToRoll = new ArrayList<>(); + + for (Map.Entry entry : this.diceResults.entrySet()) { + if (maximumRoll == entry.getKey()) { + playersHaveToRoll.add(entry.getKey()); + } + else if (maximumRoll < entry.getKey()) { maximumRoll = entry.getValue(); - } else { - this.rankedResults.put(entry.getKey(), entry.getValue()); - this.playersHaveToRoll.remove(entry.getKey()); + playersHaveToRoll.clear(); + playersHaveToRoll.add(entry.getKey()); + } + else { this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage()); } } - for (Map.Entry entry: this.rankedResults.entrySet()) { - System.out.println("[SERVER] Player: %s rolled a %d".formatted(this.logic.getGame().getPlayerById(entry.getKey()).getName(), entry.getKey())); - } - - if (this.playersHaveToRoll.size() == 1) { - this.logic.getServerSender().broadcast(new RankingResponseMessage(this.rankedResults)); - this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor())); - this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState()); - } else { - for (Integer id: this.playersHaveToRoll) { + if (playersHaveToRoll.size() > 1) { + for (Integer id : playersHaveToRoll) { this.logic.getServerSender().send(id, new DiceNowMessage()); } - this.diceResults.clear(); + } + else { + this.logic.getServerSender().broadcast(new RankingResponseMessage(this.diceResults)); + this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(playersHaveToRoll.get(0)).getColor())); + this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState()); } } }