From 177bfe30010ce7d2336789da1239248cafa793ae Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Mon, 2 Dec 2024 01:01:42 +0100 Subject: [PATCH 1/4] Updated 'DetermineStartPlayerState' class. Updated the 'DeterminStartPlayerState' class by removing the 'getDiceResults' method from it. In Addition, the logic inside the 'received(RequestDieMessage msg, int from)' was added. --- .../game/DetermineStartPlayerState.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 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 f6294206..3e76cf70 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 @@ -2,12 +2,14 @@ import pp.mdga.game.Player; import pp.mdga.message.client.RequestDieMessage; +import pp.mdga.message.server.ActivePlayerMessage; import pp.mdga.message.server.DieMessage; import pp.mdga.server.ServerGameLogic; import pp.mdga.server.automaton.GameState; -import pp.mdga.server.automaton.game.turn.RollDiceState; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -21,7 +23,8 @@ public class DetermineStartPlayerState extends GameAutomatonState { /** * Create DetermineStartPlayerState attributes. */ - private Map diceResults = new HashMap<>(); + private Map diceResults = new HashMap<>(); + private List playersHaveToRoll = new ArrayList<>(); /** * Constructs a server state of the specified game logic. @@ -36,6 +39,9 @@ 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,23 +59,26 @@ public void exit() { @Override public void received(RequestDieMessage msg, int from) { int roll = this.logic.getGame().getDie().shuffle(); - this.diceResults.put(this.logic.getGame().getPlayerById(from), roll); + this.diceResults.put(from, roll); + int maximumRoll = 0; if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { - Map frequencyMap = diceResults.values().stream() - .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); - Map.Entry result = frequencyMap.entrySet().stream() - .max(Map.Entry.comparingByKey()) - .orElseThrow(() -> new IllegalStateException("Die Map ist leer")); - } - this.logic.getServerSender().send(from, new DieMessage(roll)); - } + for (Map.Entry entry: this.diceResults.entrySet()) { + if (maximumRoll == 0) { + maximumRoll = this.diceResults.get(entry.getKey()); + } else if (maximumRoll < entry.getValue()) { + maximumRoll = entry.getValue(); + } else { + this.playersHaveToRoll.remove(entry.getKey()); + } + } - /** - * This method will be used to return diceResults attribute of DetermineStartPlayerState class. - * - * @return diceResults as a Map combing Player objects and Integers. - */ - public Map getDiceResults() { - return this.diceResults; + if (this.playersHaveToRoll.size() == 1) { + this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor())); + } else { + for (Integer id: this.playersHaveToRoll) { + this.logic.getServerSender().send(id, new DieMessage(roll)); + } + } + } } } From 149931d2cbe884d9dc361e8929f5dbf29fa40c61 Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Mon, 2 Dec 2024 01:16:33 +0100 Subject: [PATCH 2/4] fixed PlayerData mistake --- .../src/main/java/pp/mdga/client/dialogState/LobbyState.java | 2 +- Projekte/mdga/model/src/main/java/pp/mdga/game/PlayerData.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java index 6adfcf6f..7678624a 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java @@ -79,7 +79,7 @@ public void received(ServerStartGameMessage msg){ logic.addNotification(new GameNotification(logic.getGame().getPlayers().get(parent.getOwnPlayerId()).getColor())); for(Map.Entry entry : msg.getBoard().getPlayerData().entrySet()){ List pieceIds = new ArrayList<>(); - for (Piece piece : entry.getValue().getPieces()){ + for(Piece piece : entry.getValue().getPieces()){ pieceIds.add(piece.getUuid()); } logic.addNotification(new PlayerInGameNotification(entry.getKey(), pieceIds, logic.getGame().getPlayerByColor(entry.getKey()).getName())); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/PlayerData.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/PlayerData.java index 818abeb2..8fcc85ae 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/PlayerData.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/PlayerData.java @@ -34,6 +34,7 @@ public class PlayerData { */ public PlayerData(Color color) { homeNodes = new HomeNode[4]; + pieces = new Piece[4]; waitingArea = new Piece[4]; for (int i = 0; i < 4; i++) { homeNodes[i] = new HomeNode(); From 79f0e55c52480982dcad5bbad51ac1100952deee Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Mon, 2 Dec 2024 01:19:41 +0100 Subject: [PATCH 3/4] default value of playerData in 'Board' --- Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java index 0348c5a6..b24382fe 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java @@ -2,6 +2,7 @@ import com.jme3.network.serializing.Serializable; +import java.util.HashMap; import java.util.Map; /** @@ -9,7 +10,7 @@ */ @Serializable public class Board { - private Map playerData; + private Map playerData = new HashMap<>(); private final Node[] infield; /** From a19ac2fc510de51d6307dac950831576ea8ca37b Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Mon, 2 Dec 2024 01:27:21 +0100 Subject: [PATCH 4/4] Updated 'GameState' class. Updated the 'GameState' class by changing the data types of 'determineStartPlayerState, 'animationState' and 'turnState' attributes in it. --- .../pp/mdga/server/automaton/GameState.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 10045e97..d9ac8431 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 @@ -25,9 +25,9 @@ public class GameState extends ServerState { * Create GameState states. */ private GameAutomatonState currentState; - private final GameAutomatonState determineStartPlayerState; - private final GameAutomatonState animationState; - private final GameAutomatonState turnState; + private final DetermineStartPlayerState determineStartPlayerState; + private final AnimationState animationState; + private final TurnState turnState; /** * Constructor. @@ -122,27 +122,27 @@ public GameAutomatonState getCurrentState() { /** * This method will be used to return determineStartPlayerState attribute of GameState class. * - * @return determineStartPlayerState as a GameAutomatonState object. + * @return determineStartPlayerState as a DetermineStartPlayerState object. */ - public GameAutomatonState getDetermineStartPlayerState() { + public DetermineStartPlayerState getDetermineStartPlayerState() { return this.determineStartPlayerState; } /** * This method will be used to return animationState attribute of GameState class. * - * @return animationState as a GameAutomatonState object. + * @return animationState as a AnimationState object. */ - public GameAutomatonState getAnimationState() { + public AnimationState getAnimationState() { return this.animationState; } /** * This method will be used to return turnState attribute of GameState class. * - * @return turnState as a GameAutomatonState object. + * @return turnState as a TurnState object. */ - public GameAutomatonState getTurnState() { + public TurnState getTurnState() { return this.turnState; }