From cabd98a24a3bb71e1081c5695db72deca20adde1 Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Thu, 5 Dec 2024 17:51:18 +0100 Subject: [PATCH 01/55] adjusted a broadcast in lobby state to a send to reduce traffic (original commit f1124f32) and removed souts as well as added comments back into the code --- .../pp/mdga/client/gamestate/GameStates.java | 2 +- .../mdga/client/gamestate/WaitingState.java | 4 +- .../determinestartplayerstate/Intro.java | 3 ++ .../gamestate/turnstate/RollDiceState.java | 4 +- .../powercardstate/ChoosePowerCardState.java | 2 +- .../src/main/java/pp/mdga/game/Game.java | 46 +++++++++++++++++++ .../pp/mdga/server/automaton/LobbyState.java | 2 +- 7 files changed, 56 insertions(+), 7 deletions(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java index 66ae86a6..141bddae 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java @@ -19,7 +19,7 @@ public GameStates(ClientState parent, ClientGameLogic logic) { protected void handlePowerCard(PlayCardMessage msg) { if (msg.getCard().equals(BonusCard.TURBO)) { - //logic.getGame().setDiceModifier(msg.getDiceModifier()); + logic.getGame().setDiceModifier(msg.getDiceModifier()); } else if (msg.getCard().equals(BonusCard.SHIELD)) { if (logic.getGame().getBoard().getInfieldIndexOfPiece(logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier())) % 10 != 0) { logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).setShield(ShieldState.SUPPRESSED); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java index 5567f413..a8bdcf40 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java @@ -40,8 +40,8 @@ public void received(DiceNowMessage msg) { @Override public void received(DieMessage msg) { -// logic.getGame().setDiceEyes(msg.getDiceEye()); -// logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes(), logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier())); + logic.getGame().setDiceEyes(msg.getDiceEye()); + logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes())); if (msg.getDiceEye() == 6) { logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseDiced6(); logic.getGame().getGameStatistics().increaseDiced6(); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java index edbfae59..f9873e16 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java @@ -5,6 +5,7 @@ import pp.mdga.client.gamestate.DetermineStartPlayerState; import pp.mdga.game.Player; import pp.mdga.message.client.AnimationEndMessage; +import pp.mdga.notification.ActivePlayerNotification; import pp.mdga.notification.MovePieceNotification; import java.util.Map; @@ -73,8 +74,10 @@ public void selectAnimationEnd(){ logic.send(new AnimationEndMessage()); if (logic.getGame().getActivePlayerId() == logic.getOwnPlayerId()){ parent.getParent().setState(parent.getParent().getTurn()); + logic.addNotification(new ActivePlayerNotification(logic.getGame().getActiveColor())); } else { parent.getParent().setState(parent.getParent().getWaiting()); + logic.addNotification(new ActivePlayerNotification(logic.getGame().getActiveColor())); } } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java index 1c7fff2f..50bfc2a1 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java @@ -22,7 +22,7 @@ public void enter() { @Override public void exit() { - //logic.getGame().setDiceModifier(1); + logic.getGame().setDiceModifier(1); } public TurnState getParent() { @@ -30,7 +30,7 @@ public TurnState getParent() { } public void received(DieMessage msg){ -// logic.getGame().setDiceEyes(msg.getDiceEye()); + logic.getGame().setDiceEyes(msg.getDiceEye()); parent.setState(parent.getChoosePiece()); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java index 27174204..a17b01f7 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java @@ -80,7 +80,7 @@ public void selectCard(BonusCard card){ @Override public void received(PlayCardMessage msg){ if(msg.getCard().equals(BonusCard.TURBO)){ - //logic.getGame().setDiceModifier(msg.getDiceModifier()); + logic.getGame().setDiceModifier(msg.getDiceModifier()); } else { LOGGER.log(System.Logger.Level.ERROR, "Received card that is not turbo"); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java index 498a9a8d..5d7ac7d0 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java @@ -63,6 +63,16 @@ public class Game { */ private Color activeColor; + /** + * The dice modifier. + */ + private int diceModifier; + + /** + * The number of eyes on the dice. + */ + private int diceEyes; + /** * This constructor creates a new Game object. */ @@ -414,4 +424,40 @@ public void setDie(Die die) { public void setHost(int host) { this.host = host; } + + /** + * This method will be used to get the dice eyes. + * + * @return the dice eyes + */ + public int getDiceEyes() { + return diceEyes; + } + + /** + * This method is used to get the dice modifier. + * + * @return the dice modifier + */ + public int getDiceModifier() { + return diceModifier; + } + + /** + * This method will be used to set the dice eyes. + * + * @param diceEyes the new dice eyes + */ + public void setDiceEyes(int diceEyes) { + this.diceEyes = diceEyes; + } + + /** + * This method is used to set the dice modifier. + * + * @param diceModifier the new dice modifier + */ + public void setDiceModifier(int diceModifier) { + this.diceModifier = diceModifier; + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java index 378f2635..f40cee6f 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java @@ -68,7 +68,7 @@ public void received(JoinedLobbyMessage msg, int from) { this.logic.getServerSender().broadcast(new LobbyPlayerJoinedMessage(entry.getKey(), entry.getValue(), entry.getKey() == this.logic.getGame().getHost())); if(entry.getKey() != from) { - this.logic.getServerSender().broadcast(new UpdateReadyMessage(entry.getKey(), entry.getValue().isReady())); + this.logic.getServerSender().send(from, new UpdateReadyMessage(entry.getKey(), entry.getValue().isReady())); } } } From 60ebef35180fcaa418fad599aa9eb890aef60a9c Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 19:58:23 +0100 Subject: [PATCH 02/55] Updated 'LobbyState' class. Updated the 'LobbyState' class by adding an 'IncorrectRequestMessage' to the start game handling. --- .../src/main/java/pp/mdga/server/automaton/LobbyState.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java index f40cee6f..3394b397 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java @@ -153,6 +153,8 @@ public void received(StartGameMessage msg, int from) { this.initializeGame(); this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getPlayersAsList(), this.logic.getGame().getBoard())); this.logic.setCurrentState(this.logic.getGameState()); + } else { + this.logic.getServerSender().send(from, new IncorrectRequestMessage(5)); } } } From 5d76a89b95ec7e55af2be8ec115c99d6b94c727d Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 21:58:20 +0100 Subject: [PATCH 03/55] Updated 'LobbyState' class. Updated the 'LobbyState' class by updating the 'JoinedLobbyMessage' and 'LobbyReadyMessage' handlings in it. --- .../java/pp/mdga/server/automaton/LobbyState.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java index 3394b397..50d490e0 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java @@ -67,7 +67,7 @@ public void received(JoinedLobbyMessage msg, int from) { for (Map.Entry entry : this.logic.getGame().getPlayers().entrySet()) { this.logic.getServerSender().broadcast(new LobbyPlayerJoinedMessage(entry.getKey(), entry.getValue(), entry.getKey() == this.logic.getGame().getHost())); - if(entry.getKey() != from) { + if (entry.getKey() != from && entry.getValue().isReady()) { this.logic.getServerSender().send(from, new UpdateReadyMessage(entry.getKey(), entry.getValue().isReady())); } } @@ -86,7 +86,8 @@ public void received(SelectTSKMessage msg, int from) { this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, Color.NONE, false)); this.logic.getGame().getPlayerById(from).setColor(msg.getColor()); this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, msg.getColor(), true)); - } else { + } + else { this.logic.getServerSender().send(from, new IncorrectRequestMessage(0)); } } @@ -116,10 +117,11 @@ public void received(LobbyReadyMessage msg, int from) { if (this.logic.getGame().getPlayerById(from).getColor() == Color.NONE) { Color color = this.logic.getGame().getFirstUnusedColor(); - if (color != null) { + if (color != Color.NONE) { this.logic.getGame().getPlayerById(from).setColor(color); this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, color, true)); - } else { + } + else { this.logic.getServerSender().send(from, new IncorrectRequestMessage(1)); } } @@ -153,7 +155,8 @@ public void received(StartGameMessage msg, int from) { this.initializeGame(); this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getPlayersAsList(), this.logic.getGame().getBoard())); this.logic.setCurrentState(this.logic.getGameState()); - } else { + } + else { this.logic.getServerSender().send(from, new IncorrectRequestMessage(5)); } } From 2da1fec7ddfd38ba531dd69a6bba69593b61d758 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 22:01:05 +0100 Subject: [PATCH 04/55] Updated 'RankingResponseMessage' class. Updated the 'RankingResponseMessage' class by removing the 'startingPlayerId' attribute and its getter method from it. In Addition the 'rankingResults' attribute and its getter method were added. --- .../server/RankingResponseMessage.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/RankingResponseMessage.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/RankingResponseMessage.java index 604b1d89..c0233ef8 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/RankingResponseMessage.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/RankingResponseMessage.java @@ -2,37 +2,45 @@ import com.jme3.network.serializing.Serializable; +import java.util.HashMap; +import java.util.Map; + /** * A message sent by the server to all client to inform them about the current ranking. (only in DetermineStartPlayer) */ @Serializable public class RankingResponseMessage extends ServerMessage { - - private final int startingPlayerId; - /** - * Constructs a new RankingResponse instance. + * Create RankingResponseMessage attributes. */ - public RankingResponseMessage(int startingPlayerId) { - super(); - this.startingPlayerId = startingPlayerId; - } + private final Map rankingResults; /** - * Constructs a new RankingResponse instance. + * Constructor. */ public RankingResponseMessage() { super(); - this.startingPlayerId = 0; + this.rankingResults = new HashMap(); } /** - * The id of the starting Player. + * Constructor. * - * @return the id of the starting player as an int + * @param rankingResults as the results of all players after the start player was determined as a Map combining + * Integers and Integers. */ - public int getStartingPlayerId() { - return startingPlayerId; + public RankingResponseMessage(Map rankingResults) { + super(); + this.rankingResults = rankingResults; + } + + /** + * This method will be used to return rankingResults attribute of RankingResponseMessage class. + * + * @return rankingResults as a Map combining Integers and Integers. + */ + public Map getRankingResults() { + return this.rankingResults; } /** @@ -52,6 +60,14 @@ public void accept(ServerInterpreter interpreter) { */ @Override public String toString() { - return "RankingResponseMessage{" + "startingPlayerId=" + startingPlayerId + '}'; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("RankingResponseMessage{"); + for (Map.Entry entry : this.rankingResults.entrySet()) { + stringBuilder.append("Player with ID: ").append(entry.getKey()).append(" rolled: ").append(entry.getValue()).append(", "); + } + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + stringBuilder.append("}"); + return stringBuilder.toString(); } } From f2c34aee2d3c94a940245b3af129eb2555db6420 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 22:03:48 +0100 Subject: [PATCH 05/55] Updated 'DetermineStartPlayerState' class. Updated the 'DetermineStartPlayerState' class by updating the 'received(RequestDieMessage msg, int from)' method in it. --- .../automaton/game/DetermineStartPlayerState.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 1c4a23a3..cb98f8b1 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 @@ -6,6 +6,7 @@ import pp.mdga.message.server.DiceNowMessage; import pp.mdga.message.server.DieMessage; import pp.mdga.message.server.EndOfTurnMessage; +import pp.mdga.message.server.RankingResponseMessage; import pp.mdga.server.ServerGameLogic; import pp.mdga.server.automaton.GameState; @@ -26,6 +27,7 @@ public class DetermineStartPlayerState extends GameAutomatonState { * Create DetermineStartPlayerState attributes. */ private Map diceResults = new HashMap<>(); + private Map rankedResults = new HashMap<>(); private List playersHaveToRoll = new ArrayList<>(); /** @@ -50,6 +52,7 @@ public void enter() { public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); this.diceResults.clear(); + this.rankedResults.clear(); this.playersHaveToRoll.clear(); } @@ -71,19 +74,25 @@ public void received(RequestDieMessage msg, int from) { if (maximumRoll <= entry.getValue()) { maximumRoll = entry.getValue(); } else { + this.rankedResults.put(entry.getKey(), entry.getValue()); this.playersHaveToRoll.remove(entry.getKey()); 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) { this.logic.getServerSender().send(id, new DiceNowMessage()); } - diceResults.clear(); + this.diceResults.clear(); } } } From 1214d3c87c7158b77533172515ea2cb6d17e2725 Mon Sep 17 00:00:00 2001 From: Hanno Fleischer Date: Thu, 5 Dec 2024 21:11:40 +0100 Subject: [PATCH 06/55] added an getter for the error id in the IncorrectrequestMessage and implemeted how to handle it in the client game logic. --- .../src/main/java/pp/mdga/client/ClientGameLogic.java | 2 +- .../pp/mdga/message/server/IncorrectRequestMessage.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java index 1b7a7be5..02b5ff76 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java @@ -413,7 +413,7 @@ public void received(ShutdownMessage msg) { */ @Override public void received(IncorrectRequestMessage msg) { - state.received(msg); + addNotification(new InfoNotification(Resources.stringLookup("incorrect.request." + msg.getId()))); } /** diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/IncorrectRequestMessage.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/IncorrectRequestMessage.java index 59429c01..79fe528e 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/IncorrectRequestMessage.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/IncorrectRequestMessage.java @@ -27,6 +27,15 @@ public IncorrectRequestMessage() { this.id = 0; } + /** + * Returns the id of the incorrect request message + * + * @return the id of the error message + */ + public int getId(){ + return id; + } + /** * Accepts a visitor to process this message. * From 0ce8184069b3c36651ce6dd915a2eb9d9013ce9e Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 23:27:06 +0100 Subject: [PATCH 07/55] Updated 'Game' class. Updated the 'Game' class by adding the 'draw' method to it. In Addition, the 'initializeDrawPile' method was updated by shuffling the 'drawPile' attribute after filling it. --- .../model/src/main/java/pp/mdga/game/Game.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java index 5d7ac7d0..e66d877c 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java @@ -90,6 +90,20 @@ private void initializeDrawPile() { addBonusCards(BonusCard.TURBO, AMOUNT_OF_TURBO_CARDS); addBonusCards(BonusCard.SWAP, AMOUNT_OF_SWAP_CARDS); addBonusCards(BonusCard.SHIELD, AMOUNT_OF_SHIELD_CARDS); + Collections.shuffle(this.drawPile); + } + + /** + * This method will be used to remove the first card of the drawPile attribute of Game class. + * + * @return first card as a BonusCard enumeration. + */ + public BonusCard draw() { + if (!this.drawPile.isEmpty()) { + return this.drawPile.remove(0); + } + + return null; } /** From 8a438ab069cb664ec055d31b9e3952d0918cf3d4 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Thu, 5 Dec 2024 23:29:21 +0100 Subject: [PATCH 08/55] Updated 'DetermineStartPlayerState' class. Updated the 'DetermineStartPlayerState' class by updating the whole start player determination process in it. --- .../game/DetermineStartPlayerState.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 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 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()); } } } From f0080118d096be9d9c8a737f44f4a9d791d72554 Mon Sep 17 00:00:00 2001 From: Hanno Fleischer Date: Thu, 5 Dec 2024 22:34:53 +0100 Subject: [PATCH 09/55] Changed and : removed the selectAnimationEnd Method from Waitranking and moved logic into the receivedActivePlayerMessage. Added in selectStart to always send a StartGameMessage in order to trigger incorrectRequestMEssage --- Projekte/.run/MdgaApp.run.xml | 1 + .../mdga/client/dialogstate/LobbyState.java | 1 + .../WaitRankingState.java | 22 ++----------------- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/Projekte/.run/MdgaApp.run.xml b/Projekte/.run/MdgaApp.run.xml index 4c60627e..776076f1 100644 --- a/Projekte/.run/MdgaApp.run.xml +++ b/Projekte/.run/MdgaApp.run.xml @@ -1,5 +1,6 @@ +