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:
@@ -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.logic.getServerSender().send(from, new DieMessage(roll));
|
this.playersHaveToRoll.remove(entry.getKey());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
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;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user