Updated 'DetermineStartPlayerState' class.

Updated the 'DetermineStartPlayerState' class by updating the whole start player determination process in it.
This commit is contained in:
Daniel Grigencha
2024-12-05 23:29:21 +01:00
parent 0ce8184069
commit 8a438ab069

View File

@@ -28,7 +28,6 @@ public class DetermineStartPlayerState extends GameAutomatonState {
*/ */
private Map<Integer, Integer> diceResults = new HashMap<>(); private Map<Integer, Integer> diceResults = new HashMap<>();
private Map<Integer, Integer> rankedResults = new HashMap<>(); private Map<Integer, Integer> rankedResults = 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.
@@ -43,9 +42,6 @@ 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,7 +49,6 @@ public void exit() {
LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state.");
this.diceResults.clear(); this.diceResults.clear();
this.rankedResults.clear(); this.rankedResults.clear();
this.playersHaveToRoll.clear();
} }
/** /**
@@ -70,29 +65,31 @@ public void received(RequestDieMessage msg, int from) {
this.diceResults.put(from, roll); this.diceResults.put(from, roll);
if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) {
int maximumRoll = 0; int maximumRoll = 0;
for (Map.Entry<Integer, Integer> entry: this.diceResults.entrySet()) { List<Integer> playersHaveToRoll = new ArrayList<>();
if (maximumRoll <= entry.getValue()) {
for (Map.Entry<Integer, Integer> entry : this.diceResults.entrySet()) {
if (maximumRoll == entry.getKey()) {
playersHaveToRoll.add(entry.getKey());
}
else if (maximumRoll < entry.getKey()) {
maximumRoll = entry.getValue(); maximumRoll = entry.getValue();
} else { playersHaveToRoll.clear();
this.rankedResults.put(entry.getKey(), entry.getValue()); playersHaveToRoll.add(entry.getKey());
this.playersHaveToRoll.remove(entry.getKey()); }
else {
this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage()); this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage());
} }
} }
for (Map.Entry<Integer, Integer> entry: this.rankedResults.entrySet()) { if (playersHaveToRoll.size() > 1) {
System.out.println("[SERVER] Player: %s rolled a %d".formatted(this.logic.getGame().getPlayerById(entry.getKey()).getName(), entry.getKey())); for (Integer id : playersHaveToRoll) {
}
if (this.playersHaveToRoll.size() == 1) {
this.logic.getServerSender().broadcast(new RankingResponseMessage(this.rankedResults));
this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor()));
this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState());
} else {
for (Integer id: this.playersHaveToRoll) {
this.logic.getServerSender().send(id, new DiceNowMessage()); this.logic.getServerSender().send(id, new DiceNowMessage());
} }
this.diceResults.clear(); }
else {
this.logic.getServerSender().broadcast(new RankingResponseMessage(this.diceResults));
this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(playersHaveToRoll.get(0)).getColor()));
this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState());
} }
} }
} }