diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java index 8e5e955a..4d856635 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java @@ -37,7 +37,6 @@ public GameState(ServerGameLogic logic) { this.determineStartPlayerState = new DetermineStartPlayerState(this, logic); this.animationState = new AnimationState(this, logic); this.turnState = new TurnState(this, logic); - this.setCurrentState(this.determineStartPlayerState); } /** @@ -46,6 +45,7 @@ public GameState(ServerGameLogic logic) { @Override public void enter() { LOGGER.log(System.Logger.Level.DEBUG, "Entered GameState state."); + this.setCurrentState(this.determineStartPlayerState); } /** 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 0e3816d9..d1481445 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 @@ -30,8 +30,10 @@ public class DetermineStartPlayerState extends GameAutomatonState { * Create DetermineStartPlayerState attributes. */ private final Map diceResults = new HashMap<>(); + private final Map finalDiceResults = new HashMap<>(); private final List playersHaveToRoll = new ArrayList<>(); private final Set messageReceived = new HashSet<>();; + private int playerToStart; /** * Constructs a server state of the specified game logic. @@ -45,12 +47,13 @@ public DetermineStartPlayerState(GameState gameAutomaton, ServerGameLogic logic) @Override public void enter() { - LOGGER.log(System.Logger.Level.DEBUG, "Entered DetermineStartPlayerState state."); + LOGGER.log(System.Logger.Level.INFO, "Entered DetermineStartPlayerState state."); + playerToStart = this.logic.getGame().getPlayers().size(); } @Override public void exit() { - LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); + LOGGER.log(Level.INFO, "Exited DetermineStartPlayerState state."); this.diceResults.clear(); this.messageReceived.clear(); } @@ -67,23 +70,21 @@ public void received(RequestDieMessage msg, int from) { int roll = this.logic.getGame().getDie().shuffle(); this.logic.getServerSender().send(from, new DieMessage(roll)); this.diceResults.put(from, roll); - if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { + if (this.diceResults.size() == playerToStart) { int maximumRoll = 0; for (Map.Entry entry : this.diceResults.entrySet()) { if (maximumRoll == entry.getValue()) { this.playersHaveToRoll.add(entry.getKey()); + LOGGER.log(Level.INFO, "Players have to roll(RD same as maximum): {0}", this.playersHaveToRoll.size()); } else if (maximumRoll < entry.getValue()) { maximumRoll = entry.getValue(); this.playersHaveToRoll.clear(); this.playersHaveToRoll.add(entry.getKey()); + LOGGER.log(Level.INFO, "Players have to roll(RD higher as maximum): {0}", this.playersHaveToRoll.size()); } } - - for (int id: this.playersHaveToRoll) { - this.diceResults.remove(id); - } } } @@ -97,18 +98,24 @@ else if (maximumRoll < entry.getValue()) { @Override public void received(AnimationEndMessage msg, int from) { this.messageReceived.add(from); - if (this.messageReceived.size() == this.logic.getGame().getPlayers().size()) { + if (this.messageReceived.size() == playerToStart) { this.messageReceived.clear(); + LOGGER.log(Level.INFO, "Players have to roll(Animation End): {0}", this.playersHaveToRoll.size()); if (this.playersHaveToRoll.size() > 1) { + playerToStart = this.playersHaveToRoll.size(); for (Integer id : this.playersHaveToRoll) { + diceResults.remove(id); this.logic.getServerSender().send(id, new DiceNowMessage()); } + finalDiceResults.putAll(this.diceResults); + diceResults.clear(); } else { + finalDiceResults.putAll(this.diceResults); LOGGER.log(Level.INFO, "Players have to roll: %s".formatted(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)))); Color color = this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor(); this.logic.getGame().setActiveColor(color); - this.logic.getServerSender().broadcast(new RankingResponseMessage(this.diceResults)); + this.logic.getServerSender().broadcast(new RankingResponseMessage(this.finalDiceResults)); this.logic.getServerSender().broadcast(new ActivePlayerMessage(color)); this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState()); }