From 177bfe30010ce7d2336789da1239248cafa793ae Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Mon, 2 Dec 2024 01:01:42 +0100 Subject: [PATCH] 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)); + } + } + } } }