added more logic for the server state diagram
This commit is contained in:
		@@ -22,8 +22,12 @@ public class Game {
 | 
				
			|||||||
    private Map<Color, Integer> playerConnectionID;
 | 
					    private Map<Color, Integer> playerConnectionID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private ArrayList<Observer> observers = new ArrayList<>();
 | 
					    private ArrayList<Observer> observers = new ArrayList<>();
 | 
				
			||||||
 | 
					    private Player startPlayer;
 | 
				
			||||||
    private Boolean gameHasStarted = false;
 | 
					    private Boolean gameHasStarted = false;
 | 
				
			||||||
    private Boolean playerHasDisconnected = false;
 | 
					    private Boolean playerHasDisconnected = false;
 | 
				
			||||||
 | 
					    private Boolean gameIsInterrupted = false;
 | 
				
			||||||
 | 
					    private Boolean allRanked = false;
 | 
				
			||||||
 | 
					    private Boolean movablePieces = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final int AMOUNT_OF_TURBO_CARDS = 16;
 | 
					    private static final int AMOUNT_OF_TURBO_CARDS = 16;
 | 
				
			||||||
    private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
 | 
					    private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
 | 
				
			||||||
@@ -309,6 +313,44 @@ public Boolean playerHasDisconnected() {
 | 
				
			|||||||
        return playerHasDisconnected;
 | 
					        return playerHasDisconnected;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method sets the game interruption state.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param gameIsInterrupted the new game interruption state
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setGameIsInterrupted(Boolean gameIsInterrupted) {
 | 
				
			||||||
 | 
					        this.gameIsInterrupted = gameIsInterrupted;
 | 
				
			||||||
 | 
					        if (!gameIsInterrupted) notifyObservers();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method returns whether the game is interrupted.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return true if the game is interrupted, false otherwise
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Boolean gameIsInterrupted() {
 | 
				
			||||||
 | 
					        return gameIsInterrupted;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method returns whether the game is interrupted.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return true if the game is interrupted, false otherwise
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Boolean getMovablePieces() {
 | 
				
			||||||
 | 
					        return movablePieces;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method sets the game interruption state.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param movablePieces the new game interruption state
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setMovablePieces(Boolean movablePieces) {
 | 
				
			||||||
 | 
					        this.movablePieces = movablePieces;
 | 
				
			||||||
 | 
					        if (!movablePieces) notifyObservers();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method sets the player has disconnected.
 | 
					     * This method sets the player has disconnected.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -316,9 +358,44 @@ public Boolean playerHasDisconnected() {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public void setPlayerHasDisconnected(Boolean playerHasDisconnected) {
 | 
					    public void setPlayerHasDisconnected(Boolean playerHasDisconnected) {
 | 
				
			||||||
        this.playerHasDisconnected = playerHasDisconnected;
 | 
					        this.playerHasDisconnected = playerHasDisconnected;
 | 
				
			||||||
        if (playerHasDisconnected) {
 | 
					        if (playerHasDisconnected) notifyObservers();
 | 
				
			||||||
            notifyObservers();
 | 
					    }
 | 
				
			||||||
        }
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method returns whether all players have ranked.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return true if all players have ranked, false otherwise
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Boolean allRanked() {
 | 
				
			||||||
 | 
					        return allRanked;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method sets whether all players have ranked.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param allRanked the new all ranked state
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setAllRanked(Boolean allRanked) {
 | 
				
			||||||
 | 
					        this.allRanked = allRanked;
 | 
				
			||||||
 | 
					        if (allRanked) notifyObservers();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method returns the start player.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the start player
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Player getStartPlayer() {
 | 
				
			||||||
 | 
					        return startPlayer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method sets the start player.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param startPlayer the new start player
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setStartPlayer(Player startPlayer) {
 | 
				
			||||||
 | 
					        this.startPlayer = startPlayer;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.message.client.AnimationEnd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Animation extends ServerState {
 | 
				
			||||||
 | 
					    public Animation(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedAnimationEnd(AnimationEnd msg) {
 | 
				
			||||||
 | 
					        parent.gotoState(new Turn(parent, logic));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -6,7 +6,7 @@ public ChoosePieceStateMachine(ServerState parent, ServerGameLogic logic) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public ServerState initialState() {
 | 
					    public NoPiece initialState() {
 | 
				
			||||||
        return null;
 | 
					        return new NoPiece(this, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,42 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.RequestDice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.DiceNow;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.RankingRollAgain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class DetermineStartPlayer extends ServerState {
 | 
					public class DetermineStartPlayer extends ServerState {
 | 
				
			||||||
    public DetermineStartPlayer(ServerState parent, ServerGameLogic logic) {
 | 
					    public DetermineStartPlayer(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					        logic.getGame().addObserver(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedRequestDice(RequestDice msg) {
 | 
				
			||||||
 | 
					        // todo: implement
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // todo: msg?, sent to everyone?
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sentRankingResponse() {
 | 
				
			||||||
 | 
					        // todo: implemtent
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void update() {
 | 
				
			||||||
 | 
					        if (logic.getGame().allRanked()) {
 | 
				
			||||||
 | 
					            if (logic.getGame().getStartPlayer() == null) {
 | 
				
			||||||
 | 
					                // todo: send it to everyone? or player with the same dice value? save the players with the same value?
 | 
				
			||||||
 | 
					                logic.send(new Player(1), new RankingRollAgain());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // todo: set start player
 | 
				
			||||||
 | 
					                Player startPlayer = new Player(1);
 | 
				
			||||||
 | 
					                logic.getGame().setStartPlayer(startPlayer);
 | 
				
			||||||
 | 
					                logic.send(startPlayer, new DiceNow());
 | 
				
			||||||
 | 
					                parent.gotoState(new Animation(parent, logic));
 | 
				
			||||||
 | 
					                logic.getGame().removeObserver(this);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,31 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.RequestDice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.Dice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.DiceAgain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FirstRoll extends ServerState {
 | 
					public class FirstRoll extends ServerState {
 | 
				
			||||||
    public FirstRoll(ServerState parent, ServerGameLogic logic) {
 | 
					    public FirstRoll(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedRequestDice(RequestDice msg) {
 | 
				
			||||||
 | 
					        // todo: implement player.hasMovablePieces()
 | 
				
			||||||
 | 
					        if (player.hasMovablePieces()) {
 | 
				
			||||||
 | 
					            // todo: goto ChoosePiece
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // todo: implement roll
 | 
				
			||||||
 | 
					            if (roll == 6) {
 | 
				
			||||||
 | 
					                // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					                logic.send(new Player(1), new Dice());
 | 
				
			||||||
 | 
					                // todo: goto ChoosePiece
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					                logic.send(new Player(1), new DiceAgain());
 | 
				
			||||||
 | 
					                parent.gotoState(new SecondRoll(parent, logic));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ public void receivedNoPowerCard(NoPowerCard msg) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void receivedPowerCardChoice(SelectCard msg) {
 | 
					    public void receivedSelectCard(SelectCard msg) {
 | 
				
			||||||
        gameStateMachine.receivedPowerCardChoice(msg);
 | 
					        gameStateMachine.receivedSelectCard(msg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
@@ -68,7 +68,8 @@ public void sentRankingResponse() {
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void update() {
 | 
					    public void update() {
 | 
				
			||||||
        if (logic.getGame().playerHasDisconnected()) {
 | 
					        if (logic.getGame().playerHasDisconnected()) {
 | 
				
			||||||
            parent.gotoState(new Ceremony(parent, logic));
 | 
					            parent.gotoState(new Interrupt(parent, logic));
 | 
				
			||||||
 | 
					            // todo: change to interrupt, save the last state of gamestatemachine, change from interrupt to gamestate has to restore the last state
 | 
				
			||||||
            logic.getGame().removeObserver(this);
 | 
					            logic.getGame().removeObserver(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,5 +3,14 @@
 | 
				
			|||||||
public class Interrupt extends ServerState {
 | 
					public class Interrupt extends ServerState {
 | 
				
			||||||
    public Interrupt(ServerState parent, ServerGameLogic logic) {
 | 
					    public Interrupt(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					        logic.getGame().addObserver(this);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void update() {
 | 
				
			||||||
 | 
					        if (!logic.getGame().gameIsInterrupted()) {
 | 
				
			||||||
 | 
					            parent.gotoState(new GameState(parent, logic));
 | 
				
			||||||
 | 
					            logic.getGame().removeObserver(this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,55 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.WaitPiece;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class NoPiece extends ServerState {
 | 
					public class NoPiece extends ServerState {
 | 
				
			||||||
    public NoPiece(ServerState parent, ServerGameLogic logic) {
 | 
					    public NoPiece(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					        entry();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void entry() {
 | 
				
			||||||
 | 
					        if (hasTurbo() || turbo == 0) {
 | 
				
			||||||
 | 
					            if (roll == 6 &&
 | 
				
			||||||
 | 
					                logic.getGame().getBoard().getPlayerData().getWaitingArea().hasPieces() &&
 | 
				
			||||||
 | 
					                logic.getGame().getBoard().getNodes().getStartNode(Color).isOccupied()) {
 | 
				
			||||||
 | 
					                parent.gotoState(new WaitingPiece(parent, logic));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                parent.gotoState(new NoTurn(parent, logic));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            validateHasPieces();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void validateHasPieces() {
 | 
				
			||||||
 | 
					        if (logic.getGame().getBoard().getPlayerData().getWaitingArea().hasPieces()) {
 | 
				
			||||||
 | 
					            if (logic.getGame().getBoard().getNodes().getStartNode(Color).isOccupied()) {
 | 
				
			||||||
 | 
					                if (roll == 6) {
 | 
				
			||||||
 | 
					                    logic.send(new Player(1), new WaitPiece());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    validateMove();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (logic.getGame().getBoard().getNodes().getStartNode(Color).getPiece().canMove()) {
 | 
				
			||||||
 | 
					                    logic.send(new Player(1), new WaitPiece());
 | 
				
			||||||
 | 
					                    parent.gotoState(new StartPiece(parent, logic));
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    validateMove();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            validateMove();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void validateMove() {
 | 
				
			||||||
 | 
					        if (player.canMove()) {
 | 
				
			||||||
 | 
					            parent.gotoState(new NoTurn(parent, logic));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new SelectPiece());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,14 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.message.server.EndOfTurn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class NoTurn extends ServerState {
 | 
					public class NoTurn extends ServerState {
 | 
				
			||||||
    public NoTurn(ServerState parent, ServerGameLogic logic) {
 | 
					    public NoTurn(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sentEndOfTurn(EndOfTurn msg) {
 | 
				
			||||||
 | 
					        // todo: goto end of turn
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class PlayPowerCard extends ServerState {
 | 
				
			||||||
 | 
					    public PlayPowerCard(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,54 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.NoPowerCard;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.SelectCard;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.SelectedPieces;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.DiceNow;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.PossibleCard;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class PowerCard extends ServerState {
 | 
					public class PowerCard extends ServerState {
 | 
				
			||||||
    public PowerCard(ServerState parent, ServerGameLogic logic) {
 | 
					    public PowerCard(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
 | 
					        logic.getGame().addObserver(this);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedNoPowerCard(NoPowerCard msg) {
 | 
				
			||||||
 | 
					        // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					        // todo: right msg?
 | 
				
			||||||
 | 
					        logic.send(new Player(1), new DiceNow());
 | 
				
			||||||
 | 
					        parent.gotoState(new RollDice(parent, logic));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedSelectCard(SelectCard msg) {
 | 
				
			||||||
 | 
					        // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					        logic.send(new Player(1), new PossibleCard());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedSelectedPieces(SelectedPieces msg) {
 | 
				
			||||||
 | 
					        if (verifySelectedPieces()) {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            // todo: msg PowerCardAnimation?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new PowerCardAnimation());
 | 
				
			||||||
 | 
					            parent.gotoState(new PlayPowerCard(parent, logic));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sentPossibleCard(PossibleCard msg) {
 | 
				
			||||||
 | 
					        // todo: implement
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void update() {
 | 
				
			||||||
 | 
					        if (!logic.getGame().getMovablePieces()) {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            // todo: right msg?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new DiceNow());
 | 
				
			||||||
 | 
					            parent.gotoState(new RollDice(parent, logic));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ public RollDiceMachine(ServerState parent, ServerGameLogic logic) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public ServerState initialState() {
 | 
					    public FirstRoll initialState() {
 | 
				
			||||||
        return null;
 | 
					        return new FirstRoll(this, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,25 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.RequestDice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.Dice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.DiceAgain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class SecondRoll extends ServerState {
 | 
					public class SecondRoll extends ServerState {
 | 
				
			||||||
    public SecondRoll(ServerState parent, ServerGameLogic logic) {
 | 
					    public SecondRoll(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedRequestDice(RequestDice msg) {
 | 
				
			||||||
 | 
					        if (roll == 6) {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new Dice());
 | 
				
			||||||
 | 
					            // todo: goto ChoosePiece
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new DiceAgain());
 | 
				
			||||||
 | 
					            parent.gotoState(new ThirdRoll(parent, logic));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,21 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Piece;
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.StartPiece;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class SelectPiece extends ServerState {
 | 
					public class SelectPiece extends ServerState {
 | 
				
			||||||
    public SelectPiece(ServerState parent, ServerGameLogic logic) {
 | 
					    public SelectPiece(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedConfirmPiece(Piece p) {
 | 
				
			||||||
 | 
					        if (verifyPiece(p)) {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new Animation());
 | 
				
			||||||
 | 
					            // todo: goto state
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new StartPiece());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import pp.mdga.game.Piece;
 | 
					import pp.mdga.game.Piece;
 | 
				
			||||||
import pp.mdga.message.client.*;
 | 
					import pp.mdga.message.client.*;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.EndOfTurn;
 | 
				
			||||||
import pp.mdga.message.server.PossibleCard;
 | 
					import pp.mdga.message.server.PossibleCard;
 | 
				
			||||||
import java.lang.System.Logger;
 | 
					import java.lang.System.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,8 +29,6 @@ public void receivedNoPowerCard(NoPowerCard msg) { /* do nothing */ }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public void receivedNotReady(LobbyNotReady msg) { /* do nothing */ }
 | 
					    public void receivedNotReady(LobbyNotReady msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void receivedPowerCardChoice(SelectCard msg) { /* do nothing */ }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void receivedReady(LobbyReady msg) { /* do nothing */ }
 | 
					    public void receivedReady(LobbyReady msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void receivedRequestDice(RequestDice msg) { /* do nothing */ }
 | 
					    public void receivedRequestDice(RequestDice msg) { /* do nothing */ }
 | 
				
			||||||
@@ -37,12 +36,16 @@ public void receivedRequestDice(RequestDice msg) { /* do nothing */ }
 | 
				
			|||||||
    // todo msg?
 | 
					    // todo msg?
 | 
				
			||||||
    public void receivedRollRankingDice() { /* do nothing */ }
 | 
					    public void receivedRollRankingDice() { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void receivedSelectCard(SelectCard msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void receivedSelectTSK(SelectTSK msg) { /* do nothing */ }
 | 
					    public void receivedSelectTSK(SelectTSK msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void receivedSelectedPieces(SelectedPieces msg) { /* do nothing */ }
 | 
					    public void receivedSelectedPieces(SelectedPieces msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void receivedStartGame(ClientStartGame msg) { /* do nothing */ }
 | 
					    public void receivedStartGame(ClientStartGame msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void sentEndOfTurn(EndOfTurn msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void sentPossibleCard(PossibleCard msg) { /* do nothing */ }
 | 
					    public void sentPossibleCard(PossibleCard msg) { /* do nothing */ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // todo msg?, sent to everyone?
 | 
					    // todo msg?, sent to everyone?
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import pp.mdga.game.Piece;
 | 
					import pp.mdga.game.Piece;
 | 
				
			||||||
import pp.mdga.message.client.*;
 | 
					import pp.mdga.message.client.*;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.EndOfTurn;
 | 
				
			||||||
import pp.mdga.message.server.PossibleCard;
 | 
					import pp.mdga.message.server.PossibleCard;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public abstract class ServerStateMachine extends ServerState {
 | 
					public abstract class ServerStateMachine extends ServerState {
 | 
				
			||||||
@@ -61,8 +62,8 @@ public void receivedNotReady(LobbyNotReady msg) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void receivedPowerCardChoice(SelectCard msg) {
 | 
					    public void receivedSelectCard(SelectCard msg) {
 | 
				
			||||||
        state.receivedPowerCardChoice(msg);
 | 
					        state.receivedSelectCard(msg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
@@ -96,6 +97,11 @@ public void receivedStartGame(ClientStartGame msg) {
 | 
				
			|||||||
        state.receivedStartGame(msg);
 | 
					        state.receivedStartGame(msg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sentEndOfTurn(EndOfTurn msg) {
 | 
				
			||||||
 | 
					        state.sentEndOfTurn(msg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void sentPossibleCard(PossibleCard msg) {
 | 
					    public void sentPossibleCard(PossibleCard msg) {
 | 
				
			||||||
        state.sentPossibleCard(msg);
 | 
					        state.sentPossibleCard(msg);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,20 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Piece;
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StartPiece extends ServerState {
 | 
					public class StartPiece extends ServerState {
 | 
				
			||||||
    public StartPiece(ServerState parent, ServerGameLogic logic) {
 | 
					    public StartPiece(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedConfirmPiece(Piece p) {
 | 
				
			||||||
 | 
					        if (verifyPiece(p)) {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new Animation());
 | 
				
			||||||
 | 
					            // todo: goto state
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new pp.mdga.message.server.StartPiece());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,25 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.RequestDice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.Dice;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.DiceAgain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ThirdRoll extends ServerState {
 | 
					public class ThirdRoll extends ServerState {
 | 
				
			||||||
    public ThirdRoll(ServerState parent, ServerGameLogic logic) {
 | 
					    public ThirdRoll(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedRequestDice(RequestDice msg) {
 | 
				
			||||||
 | 
					        if (roll == 6) {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new Dice());
 | 
				
			||||||
 | 
					            // todo: goto ChoosePiece
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // todo: send to everyone? or one player?
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new DiceAgain());
 | 
				
			||||||
 | 
					            // todo: goto End from Turn
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,4 +6,6 @@ public class Turn extends ServerState {
 | 
				
			|||||||
    public Turn(ServerState parent, ServerGameLogic logic) {
 | 
					    public Turn(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // todo: when TurnStateMachine is in the end state, and then?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ public TurnStateMachine(ServerState parent, ServerGameLogic logic) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public ServerState initialState() {
 | 
					    public PowerCard initialState() {
 | 
				
			||||||
        return null;
 | 
					        return new PowerCard(this, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,22 @@
 | 
				
			|||||||
package pp.mdga.server;
 | 
					package pp.mdga.server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pp.mdga.game.Piece;
 | 
				
			||||||
 | 
					import pp.mdga.game.Player;
 | 
				
			||||||
 | 
					import pp.mdga.message.client.AnimationEnd;
 | 
				
			||||||
 | 
					import pp.mdga.message.server.StartPiece;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class WaitingPiece extends ServerState {
 | 
					public class WaitingPiece extends ServerState {
 | 
				
			||||||
    public WaitingPiece(ServerState parent, ServerGameLogic logic) {
 | 
					    public WaitingPiece(ServerState parent, ServerGameLogic logic) {
 | 
				
			||||||
        super(parent, logic);
 | 
					        super(parent, logic);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void receivedConfirmPiece(Piece p) {
 | 
				
			||||||
 | 
					        if (verifyPiece(p)) {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new Animation());
 | 
				
			||||||
 | 
					            // todo: goto state
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            logic.send(new Player(1), new StartPiece());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user