From 3949a00932e7d4d455306167dd7e50730bca2cd6 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Sun, 17 Nov 2024 20:17:19 +0100 Subject: [PATCH] added more logic for the server state diagram --- .../src/main/java/pp.mdga/game/Game.java | 83 ++++++++++++++++++- .../main/java/pp.mdga/server/Animation.java | 14 ++++ .../server/ChoosePieceStateMachine.java | 4 +- .../pp.mdga/server/DetermineStartPlayer.java | 35 ++++++++ .../main/java/pp.mdga/server/FirstRoll.java | 24 ++++++ .../main/java/pp.mdga/server/GameState.java | 7 +- .../main/java/pp.mdga/server/Interrupt.java | 9 ++ .../src/main/java/pp.mdga/server/NoPiece.java | 48 +++++++++++ .../src/main/java/pp.mdga/server/NoTurn.java | 7 ++ .../java/pp.mdga/server/PlayPowerCard.java | 7 ++ .../main/java/pp.mdga/server/PowerCard.java | 47 +++++++++++ .../java/pp.mdga/server/RollDiceMachine.java | 4 +- .../main/java/pp.mdga/server/SecondRoll.java | 18 ++++ .../main/java/pp.mdga/server/SelectPiece.java | 14 ++++ .../main/java/pp.mdga/server/ServerState.java | 7 +- .../pp.mdga/server/ServerStateMachine.java | 10 ++- .../main/java/pp.mdga/server/StartPiece.java | 13 +++ .../main/java/pp.mdga/server/ThirdRoll.java | 18 ++++ .../src/main/java/pp.mdga/server/Turn.java | 2 + .../java/pp.mdga/server/TurnStateMachine.java | 4 +- .../java/pp.mdga/server/WaitingPiece.java | 15 ++++ 21 files changed, 374 insertions(+), 16 deletions(-) create mode 100644 Projekte/mdga/model/src/main/java/pp.mdga/server/Animation.java create mode 100644 Projekte/mdga/model/src/main/java/pp.mdga/server/PlayPowerCard.java diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/game/Game.java b/Projekte/mdga/model/src/main/java/pp.mdga/game/Game.java index 23f135e9..65b37f6d 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/game/Game.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/game/Game.java @@ -22,8 +22,12 @@ public class Game { private Map playerConnectionID; private ArrayList observers = new ArrayList<>(); + private Player startPlayer; private Boolean gameHasStarted = 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_SHIELD_AND_SWAP_CARDS = 12; @@ -309,6 +313,44 @@ public Boolean 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. * @@ -316,9 +358,44 @@ public Boolean playerHasDisconnected() { */ public void setPlayerHasDisconnected(Boolean playerHasDisconnected) { this.playerHasDisconnected = playerHasDisconnected; - if (playerHasDisconnected) { - notifyObservers(); - } + if (playerHasDisconnected) 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; } /** diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/Animation.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/Animation.java new file mode 100644 index 00000000..c7a71f92 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/Animation.java @@ -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)); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/ChoosePieceStateMachine.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/ChoosePieceStateMachine.java index 89dbefeb..2558e028 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/ChoosePieceStateMachine.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/ChoosePieceStateMachine.java @@ -6,7 +6,7 @@ public ChoosePieceStateMachine(ServerState parent, ServerGameLogic logic) { } @Override - public ServerState initialState() { - return null; + public NoPiece initialState() { + return new NoPiece(this, logic); } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/DetermineStartPlayer.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/DetermineStartPlayer.java index 6160701f..aaf401e4 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/DetermineStartPlayer.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/DetermineStartPlayer.java @@ -1,7 +1,42 @@ 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 DetermineStartPlayer(ServerState parent, ServerGameLogic 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); + } + } + } + } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/FirstRoll.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/FirstRoll.java index daa811dd..7787a229 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/FirstRoll.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/FirstRoll.java @@ -1,7 +1,31 @@ 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 FirstRoll(ServerState parent, ServerGameLogic 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)); + } + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/GameState.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/GameState.java index 53ee5901..f94b3bb2 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/GameState.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/GameState.java @@ -34,8 +34,8 @@ public void receivedNoPowerCard(NoPowerCard msg) { } @Override - public void receivedPowerCardChoice(SelectCard msg) { - gameStateMachine.receivedPowerCardChoice(msg); + public void receivedSelectCard(SelectCard msg) { + gameStateMachine.receivedSelectCard(msg); } @Override @@ -68,7 +68,8 @@ public void sentRankingResponse() { @Override public void update() { 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); } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/Interrupt.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/Interrupt.java index 0f9e0fdc..ae67c4c8 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/Interrupt.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/Interrupt.java @@ -3,5 +3,14 @@ public class Interrupt extends ServerState { public Interrupt(ServerState parent, ServerGameLogic 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); + } } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/NoPiece.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/NoPiece.java index 9b2cbb48..59a80020 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/NoPiece.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/NoPiece.java @@ -1,7 +1,55 @@ package pp.mdga.server; +import pp.mdga.game.Player; +import pp.mdga.message.server.WaitPiece; + public class NoPiece extends ServerState { public NoPiece(ServerState parent, ServerGameLogic 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()); + } } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/NoTurn.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/NoTurn.java index 9986437b..810e4966 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/NoTurn.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/NoTurn.java @@ -1,7 +1,14 @@ package pp.mdga.server; +import pp.mdga.message.server.EndOfTurn; + public class NoTurn extends ServerState { public NoTurn(ServerState parent, ServerGameLogic logic) { super(parent, logic); } + + @Override + public void sentEndOfTurn(EndOfTurn msg) { + // todo: goto end of turn + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/PlayPowerCard.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/PlayPowerCard.java new file mode 100644 index 00000000..cc7cf7b0 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/PlayPowerCard.java @@ -0,0 +1,7 @@ +package pp.mdga.server; + +public class PlayPowerCard extends ServerState { + public PlayPowerCard(ServerState parent, ServerGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/PowerCard.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/PowerCard.java index fef94ce2..5bc0c495 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/PowerCard.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/PowerCard.java @@ -1,7 +1,54 @@ 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 PowerCard(ServerState parent, ServerGameLogic 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)); + } } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/RollDiceMachine.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/RollDiceMachine.java index 49117d0c..bc788947 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/RollDiceMachine.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/RollDiceMachine.java @@ -6,7 +6,7 @@ public RollDiceMachine(ServerState parent, ServerGameLogic logic) { } @Override - public ServerState initialState() { - return null; + public FirstRoll initialState() { + return new FirstRoll(this, logic); } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/SecondRoll.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/SecondRoll.java index 63b98b9a..a225df40 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/SecondRoll.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/SecondRoll.java @@ -1,7 +1,25 @@ 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 SecondRoll(ServerState parent, ServerGameLogic 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)); + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/SelectPiece.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/SelectPiece.java index f3e21d28..a61bfc27 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/SelectPiece.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/SelectPiece.java @@ -1,7 +1,21 @@ 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 SelectPiece(ServerState parent, ServerGameLogic 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()); + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java index 3e49b41e..a831bf1e 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java @@ -2,6 +2,7 @@ import pp.mdga.game.Piece; import pp.mdga.message.client.*; +import pp.mdga.message.server.EndOfTurn; import pp.mdga.message.server.PossibleCard; 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 receivedPowerCardChoice(SelectCard msg) { /* do nothing */ } - public void receivedReady(LobbyReady msg) { /* do nothing */ } public void receivedRequestDice(RequestDice msg) { /* do nothing */ } @@ -37,12 +36,16 @@ public void receivedRequestDice(RequestDice msg) { /* do nothing */ } // todo msg? public void receivedRollRankingDice() { /* do nothing */ } + public void receivedSelectCard(SelectCard msg) { /* do nothing */ } + public void receivedSelectTSK(SelectTSK msg) { /* do nothing */ } public void receivedSelectedPieces(SelectedPieces msg) { /* do nothing */ } public void receivedStartGame(ClientStartGame msg) { /* do nothing */ } + public void sentEndOfTurn(EndOfTurn msg) { /* do nothing */ } + public void sentPossibleCard(PossibleCard msg) { /* do nothing */ } // todo msg?, sent to everyone? diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerStateMachine.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerStateMachine.java index f97d54f2..329da544 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerStateMachine.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerStateMachine.java @@ -2,6 +2,7 @@ import pp.mdga.game.Piece; import pp.mdga.message.client.*; +import pp.mdga.message.server.EndOfTurn; import pp.mdga.message.server.PossibleCard; public abstract class ServerStateMachine extends ServerState { @@ -61,8 +62,8 @@ public void receivedNotReady(LobbyNotReady msg) { } @Override - public void receivedPowerCardChoice(SelectCard msg) { - state.receivedPowerCardChoice(msg); + public void receivedSelectCard(SelectCard msg) { + state.receivedSelectCard(msg); } @Override @@ -96,6 +97,11 @@ public void receivedStartGame(ClientStartGame msg) { state.receivedStartGame(msg); } + @Override + public void sentEndOfTurn(EndOfTurn msg) { + state.sentEndOfTurn(msg); + } + @Override public void sentPossibleCard(PossibleCard msg) { state.sentPossibleCard(msg); diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/StartPiece.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/StartPiece.java index 24e23b60..0e8d8461 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/StartPiece.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/StartPiece.java @@ -1,7 +1,20 @@ package pp.mdga.server; +import pp.mdga.game.Piece; +import pp.mdga.game.Player; + public class StartPiece extends ServerState { public StartPiece(ServerState parent, ServerGameLogic 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()); + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/ThirdRoll.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/ThirdRoll.java index 5f5245d1..496ef8a5 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/ThirdRoll.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/ThirdRoll.java @@ -1,7 +1,25 @@ 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 ThirdRoll(ServerState parent, ServerGameLogic 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 + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/Turn.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/Turn.java index ce1447a6..21ec15c7 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/Turn.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/Turn.java @@ -6,4 +6,6 @@ public class Turn extends ServerState { public Turn(ServerState parent, ServerGameLogic logic) { super(parent, logic); } + + // todo: when TurnStateMachine is in the end state, and then? } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/TurnStateMachine.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/TurnStateMachine.java index b54f2e07..a5974332 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/TurnStateMachine.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/TurnStateMachine.java @@ -6,7 +6,7 @@ public TurnStateMachine(ServerState parent, ServerGameLogic logic) { } @Override - public ServerState initialState() { - return null; + public PowerCard initialState() { + return new PowerCard(this, logic); } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/WaitingPiece.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/WaitingPiece.java index dcc28f3c..b5f39d38 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/WaitingPiece.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/WaitingPiece.java @@ -1,7 +1,22 @@ 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 WaitingPiece(ServerState parent, ServerGameLogic 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()); + } + } }