Updated 'Die' class. #31

Merged
j23f0712 merged 4 commits from development into dev/test 2024-12-02 01:49:23 +01:00
5 changed files with 40 additions and 29 deletions
Showing only changes of commit 601366f08d - Show all commits

View File

@@ -2,6 +2,7 @@
import com.jme3.network.serializing.Serializable; import com.jme3.network.serializing.Serializable;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
@@ -9,7 +10,7 @@
*/ */
@Serializable @Serializable
public class Board { public class Board {
private Map<Color, PlayerData> playerData; private Map<Color, PlayerData> playerData = new HashMap<>();
private final Node[] infield; private final Node[] infield;
/** /**

View File

@@ -34,6 +34,7 @@ public class PlayerData {
*/ */
public PlayerData(Color color) { public PlayerData(Color color) {
homeNodes = new HomeNode[4]; homeNodes = new HomeNode[4];
pieces = new Piece[4];
waitingArea = new Piece[4]; waitingArea = new Piece[4];
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
homeNodes[i] = new HomeNode(); homeNodes[i] = new HomeNode();

View File

@@ -25,9 +25,9 @@ public class GameState extends ServerState {
* Create GameState states. * Create GameState states.
*/ */
private GameAutomatonState currentState; private GameAutomatonState currentState;
private final GameAutomatonState determineStartPlayerState; private final DetermineStartPlayerState determineStartPlayerState;
private final GameAutomatonState animationState; private final AnimationState animationState;
private final GameAutomatonState turnState; private final TurnState turnState;
/** /**
* Constructor. * Constructor.
@@ -122,27 +122,27 @@ public GameAutomatonState getCurrentState() {
/** /**
* This method will be used to return determineStartPlayerState attribute of GameState class. * This method will be used to return determineStartPlayerState attribute of GameState class.
* *
* @return determineStartPlayerState as a GameAutomatonState object. * @return determineStartPlayerState as a DetermineStartPlayerState object.
*/ */
public GameAutomatonState getDetermineStartPlayerState() { public DetermineStartPlayerState getDetermineStartPlayerState() {
return this.determineStartPlayerState; return this.determineStartPlayerState;
} }
/** /**
* This method will be used to return animationState attribute of GameState class. * This method will be used to return animationState attribute of GameState class.
* *
* @return animationState as a GameAutomatonState object. * @return animationState as a AnimationState object.
*/ */
public GameAutomatonState getAnimationState() { public AnimationState getAnimationState() {
return this.animationState; return this.animationState;
} }
/** /**
* This method will be used to return turnState attribute of GameState class. * This method will be used to return turnState attribute of GameState class.
* *
* @return turnState as a GameAutomatonState object. * @return turnState as a TurnState object.
*/ */
public GameAutomatonState getTurnState() { public TurnState getTurnState() {
return this.turnState; return this.turnState;
} }

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