merge dev into test #30

Merged
j23f0712 merged 45 commits from development into dev/test 2024-12-02 01:29:40 +01:00
30 changed files with 355 additions and 112 deletions
Showing only changes of commit 44378486d4 - Show all commits

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));
}
}
}
}
}