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.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));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user