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