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.
This commit is contained in:
Daniel Grigencha
2024-12-02 01:01:42 +01:00
parent 138444439d
commit 177bfe3001

View File

@@ -2,12 +2,14 @@
import pp.mdga.game.Player; import pp.mdga.game.Player;
import pp.mdga.message.client.RequestDieMessage; import pp.mdga.message.client.RequestDieMessage;
import pp.mdga.message.server.ActivePlayerMessage;
import pp.mdga.message.server.DieMessage; import pp.mdga.message.server.DieMessage;
import pp.mdga.server.ServerGameLogic; import pp.mdga.server.ServerGameLogic;
import pp.mdga.server.automaton.GameState; 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.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -21,7 +23,8 @@ public class DetermineStartPlayerState extends GameAutomatonState {
/** /**
* Create DetermineStartPlayerState attributes. * Create DetermineStartPlayerState attributes.
*/ */
private Map<Player, Integer> diceResults = new HashMap<>(); private Map<Integer, Integer> diceResults = new HashMap<>();
private List<Integer> playersHaveToRoll = new ArrayList<>();
/** /**
* Constructs a server state of the specified game logic. * Constructs a server state of the specified game logic.
@@ -36,6 +39,9 @@ public DetermineStartPlayerState(GameState gameAutomaton, ServerGameLogic logic)
@Override @Override
public void enter() { public void enter() {
LOGGER.log(System.Logger.Level.DEBUG, "Entered DetermineStartPlayerState state."); LOGGER.log(System.Logger.Level.DEBUG, "Entered DetermineStartPlayerState state.");
for (Map.Entry<Integer, Player> entry: this.logic.getGame().getPlayers().entrySet()) {
this.playersHaveToRoll.add(entry.getKey());
}
} }
@Override @Override
@@ -53,23 +59,26 @@ public void exit() {
@Override @Override
public void received(RequestDieMessage msg, int from) { public void received(RequestDieMessage msg, int from) {
int roll = this.logic.getGame().getDie().shuffle(); 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()) { if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) {
Map<Integer, Long> frequencyMap = diceResults.values().stream() for (Map.Entry<Integer, Integer> entry: this.diceResults.entrySet()) {
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); if (maximumRoll == 0) {
Map.Entry<Integer, Long> result = frequencyMap.entrySet().stream() maximumRoll = this.diceResults.get(entry.getKey());
.max(Map.Entry.comparingByKey()) } else if (maximumRoll < entry.getValue()) {
.orElseThrow(() -> new IllegalStateException("Die Map ist leer")); maximumRoll = entry.getValue();
} else {
this.playersHaveToRoll.remove(entry.getKey());
} }
this.logic.getServerSender().send(from, new DieMessage(roll));
} }
/** if (this.playersHaveToRoll.size() == 1) {
* This method will be used to return diceResults attribute of DetermineStartPlayerState class. this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor()));
* } else {
* @return diceResults as a Map combing Player objects and Integers. for (Integer id: this.playersHaveToRoll) {
*/ this.logic.getServerSender().send(id, new DieMessage(roll));
public Map<Player, Integer> getDiceResults() { }
return this.diceResults; }
}
} }
} }