From 1a562a8d383f12c575d9420e8f741d3a05179d13 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Fri, 6 Dec 2024 03:29:11 +0100 Subject: [PATCH] Updated 'DeterminStartPlayerState' class. Updated the 'DetermineStartPlayerState' class by adding the multi roll support to it. In Addition, the server model will be updated correctly. --- .../game/DetermineStartPlayerState.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 d0193564..f0dcf05d 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 @@ -1,5 +1,6 @@ package pp.mdga.server.automaton.game; +import pp.mdga.game.Color; import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; import pp.mdga.message.server.ActivePlayerMessage; @@ -24,10 +25,10 @@ public class DetermineStartPlayerState extends GameAutomatonState { /** * Create DetermineStartPlayerState attributes. */ - private Map diceResults = new HashMap<>(); - private Map rankedResults = new HashMap<>(); + private final Map diceResults = new HashMap<>(); private final List playersHaveToRoll = new ArrayList<>(); - private Map messageReceived = new HashMap<>(); + private final Map messageReceived = new HashMap<>(); + private int rolls = 0; /** * Constructs a server state of the specified game logic. @@ -48,7 +49,7 @@ public void enter() { public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); this.diceResults.clear(); - this.rankedResults.clear(); + this.messageReceived.clear(); } /** @@ -63,6 +64,7 @@ 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); + this.rolls++; if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { int maximumRoll = 0; @@ -79,6 +81,7 @@ else if (maximumRoll < entry.getKey()) { this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage()); } } + } } @@ -92,16 +95,20 @@ else if (maximumRoll < entry.getKey()) { @Override public void received(AnimationEndMessage msg, int from) { this.messageReceived.put(from, true); - if (this.messageReceived.size() == this.logic.getGame().getPlayers().size()) { + if (this.messageReceived.size() == this.rolls) { + this.messageReceived.clear(); if (this.playersHaveToRoll.size() > 1) { for (Integer id : this.playersHaveToRoll) { this.logic.getServerSender().send(id, new DiceNowMessage()); } + this.rolls = 0; } else { + 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 ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor())); - this.gameAutomaton.setCurrentState(this.gameAutomaton.getTurnState()); + this.logic.getServerSender().broadcast(new ActivePlayerMessage(color)); + this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState()); } } }