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.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<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.
@@ -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<Integer, Player> 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<Integer, Long> frequencyMap = diceResults.values().stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Map.Entry<Integer, Long> 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<Integer, Integer> 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<Player, Integer> 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));
}
}
}
}
}