From a5d949b7e5634c682f757f2139ac62141e097e92 Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Sun, 8 Dec 2024 20:17:53 +0100 Subject: [PATCH 1/3] added the functionality of multiple roll dice when all pieces in waiting --- .../pp/mdga/client/server/MdgaServer.java | 1 + .../gamestate/turnstate/RollDiceState.java | 10 ++++---- .../server/ChoosePieceStateMessage.java | 17 +++++++++++++ .../message/server/ServerInterpreter.java | 2 ++ .../game/turn/rolldice/FirstRollState.java | 3 +++ .../game/turn/rolldice/SecondRollState.java | 10 +++++++- .../game/turn/rolldice/ThirdRollState.java | 24 +++++++++---------- 7 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/message/server/ChoosePieceStateMessage.java diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java index 6f219591..5caa6192 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java @@ -152,6 +152,7 @@ private void initializeSerializables() { Serializer.registerClass(SwapCard.class); Serializer.registerClass(ShieldCard.class); Serializer.registerClass(HiddenCard.class); + Serializer.registerClass(ChoosePieceStateMessage.class); Serializer.registerClass(Color.class, new EnumSerializer()); Serializer.registerClass(PieceState.class, new EnumSerializer()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java index da78fb0d..90d473d3 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java @@ -5,6 +5,7 @@ import pp.mdga.client.gamestate.TurnState; import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; +import pp.mdga.message.server.ChoosePieceStateMessage; import pp.mdga.message.server.DieMessage; import pp.mdga.message.server.NoTurnMessage; import pp.mdga.notification.DiceNowNotification; @@ -47,13 +48,12 @@ public void received(DieMessage msg){ @Override public void selectAnimationEnd(){ logic.send(new AnimationEndMessage()); - parent.setState(parent.getChoosePiece()); } -// @Override -// public void received(ChoosePieceStateMessage msg){ -// parent.setState(parent.getChoosePiece()); -// } + @Override + public void received(ChoosePieceStateMessage msg){ + parent.setState(parent.getChoosePiece()); + } @Override public void received(NoTurnMessage msg){ diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ChoosePieceStateMessage.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ChoosePieceStateMessage.java new file mode 100644 index 00000000..65b71ea9 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ChoosePieceStateMessage.java @@ -0,0 +1,17 @@ +package pp.mdga.message.server; + +public class ChoosePieceStateMessage extends ServerMessage { + + public ChoosePieceStateMessage() { + super(); + } + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + */ + @Override + public void accept(ServerInterpreter interpreter) { + interpreter.received(this); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java index 6a9b0ddd..5ac5be99 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java @@ -221,4 +221,6 @@ public interface ServerInterpreter { * @param msg the IncorrectRequest message received. */ void received(IncorrectRequestMessage msg); + + void received(ChoosePieceStateMessage choosePieceStateMessage); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java index 3d3174df..e7eee0f9 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java @@ -5,6 +5,7 @@ import pp.mdga.game.PieceState; import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; +import pp.mdga.message.server.ChoosePieceStateMessage; import pp.mdga.message.server.DiceAgainMessage; import pp.mdga.message.server.DiceNowMessage; import pp.mdga.message.server.DieMessage; @@ -66,9 +67,11 @@ public void received(RequestDieMessage msg, int from) { @Override public void received(AnimationEndMessage msg, int from) { if (!moveablePieces.isEmpty()) { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new ChoosePieceStateMessage()); this.rollDiceAutomaton.getTurnAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getChoosePieceState()); } else { if (roll == Resources.MAX_EYES) { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new ChoosePieceStateMessage()); this.rollDiceAutomaton.getTurnAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getChoosePieceState()); } else { this.rollDiceAutomaton.setCurrentState(this.rollDiceAutomaton.getSecondRollState()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/SecondRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/SecondRollState.java index 5453259e..6b3f8819 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/SecondRollState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/SecondRollState.java @@ -1,6 +1,8 @@ package pp.mdga.server.automaton.game.turn.rolldice; +import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; +import pp.mdga.message.server.ChoosePieceStateMessage; import pp.mdga.message.server.DiceAgainMessage; import pp.mdga.message.server.DiceNowMessage; import pp.mdga.message.server.DieMessage; @@ -44,8 +46,14 @@ public void exit() { @Override public void received(RequestDieMessage msg, int from) { int roll = this.logic.getGame().getDie().shuffle(); + this.logic.getGame().setDiceEyes(roll); this.logic.getServerSender().broadcast(new DieMessage(roll)); - if (roll == 6) { + } + + @Override + public void received(AnimationEndMessage msg, int from) { + if (this.logic.getGame().getDiceEyes() == 6) { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new ChoosePieceStateMessage()); this.rollDiceAutomaton.getTurnAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getChoosePieceState()); } else { this.rollDiceAutomaton.setCurrentState(this.rollDiceAutomaton.getThirdRollState()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/ThirdRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/ThirdRollState.java index 06bd6a6c..34f0fb52 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/ThirdRollState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/ThirdRollState.java @@ -1,5 +1,6 @@ package pp.mdga.server.automaton.game.turn.rolldice; +import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; import pp.mdga.message.server.*; import pp.mdga.server.ServerGameLogic; @@ -42,23 +43,20 @@ public void exit() { @Override public void received(RequestDieMessage msg, int from) { int roll = this.logic.getGame().getDie().shuffle(); + this.logic.getGame().setDiceEyes(roll); this.logic.getServerSender().broadcast(new DieMessage(roll)); - if (roll == 6) { + } + + @Override + public void received(AnimationEndMessage msg, int from) { + if (this.logic.getGame().getDiceEyes() == 6) { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new ChoosePieceStateMessage()); this.rollDiceAutomaton.getTurnAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getChoosePieceState()); } else { this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new NoTurnMessage()); - - if (this.rollDiceAutomaton.getTurnAutomaton().getPlayer().isFinished()) { - this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new SpectatorMessage()); - - if (this.logic.getGame().getNumberOfActivePlayers() == 1) { - this.logic.getServerSender().broadcast(new CeremonyMessage()); - } else { - this.logic.getGame().setActiveColor(this.logic.getGame().getActiveColor().next(logic.getGame())); - this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getActiveColor())); - this.rollDiceAutomaton.getTurnAutomaton().getGameAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getGameAutomaton().getAnimationState()); - } - } + logic.getGame().setActiveColor(logic.getGame().getActiveColor().next(logic.getGame())); + logic.getServerSender().broadcast(new ActivePlayerMessage(logic.getGame().getActiveColor())); + this.rollDiceAutomaton.getTurnAutomaton().getGameAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getGameAutomaton().getTurnState()); } } } From 5d45cf293476fe035bef46fa16b9d9325a5ceef6 Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Sun, 8 Dec 2024 20:24:05 +0100 Subject: [PATCH 2/3] fixed an error in clientstates where a missing servermessage received istn overwritte --- .../src/main/java/pp/mdga/client/ClientGameLogic.java | 8 ++++++++ .../model/src/main/java/pp/mdga/client/ClientState.java | 5 +++++ .../model/src/main/java/pp/mdga/client/GameState.java | 5 +++++ .../src/main/java/pp/mdga/client/gamestate/TurnState.java | 5 +++++ 4 files changed, 23 insertions(+) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java index 391e7c01..6a6735fa 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java @@ -416,6 +416,14 @@ public void received(IncorrectRequestMessage msg) { addNotification(new InfoNotification(Resources.stringLookup("incorrect.request." + msg.getId()))); } + /** + * @param choosePieceStateMessage + */ + @Override + public void received(ChoosePieceStateMessage choosePieceStateMessage) { + state.received(choosePieceStateMessage); + } + /** * This method calls the method received of the state * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java index c81e56d6..e9b5c5e6 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java @@ -95,6 +95,11 @@ public void received(LobbyPlayerLeaveMessage msg) { LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); } + @Override + public void received(ChoosePieceStateMessage msg) { + LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); + } + @Override public void received(MoveMessage msg) { LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java index 2b846621..100a8072 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java @@ -281,6 +281,11 @@ public void received(PossiblePieceMessage msg){ state.received(msg); } + @Override + public void received(ChoosePieceStateMessage msg){ + state.received(msg); + } + /** * This method returns the current state * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java index 03a9b4ff..80f57ae5 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java @@ -138,6 +138,11 @@ public void received(PossiblePieceMessage msg){ state.received(msg); } + @Override + public void received(ChoosePieceStateMessage msg){ + state.received(msg); + } + public ChoosePieceState getChoosePiece() { return choosePieceState; } From 3040595193fd01538d37e7d2a42b76e71d84bcbd Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Sun, 8 Dec 2024 20:28:09 +0100 Subject: [PATCH 3/3] minor fixes to initialize method in noPiece state of server --- .../automaton/game/turn/choosepiece/NoPieceState.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/NoPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/NoPieceState.java index f32446d0..1a15946f 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/NoPieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/NoPieceState.java @@ -31,10 +31,12 @@ private void initialize(){ if (activePlayer.hasPieceInWaitingArea()){ if (!logic.getGame().getBoard().getInfield()[activePlayer.getStartNodeIndex()].isOccupied(activePlayer.getColor())){ this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getWaitingPieceState()); + } else { + this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getNoTurnState()); } + } else { this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getNoTurnState()); } - this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getNoTurnState()); } } else if (activePlayer.hasPieceInWaitingArea()) { if (!logic.getGame().getBoard().getInfield()[activePlayer.getStartNodeIndex()].isOccupied(activePlayer.getColor())){ @@ -45,6 +47,8 @@ private void initialize(){ } } else if (canMove(logic.getGame().getBoard().getInfield()[activePlayer.getStartNodeIndex()].getOccupant())){ this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getStartPieceState()); + } else { + checkSelectPiece(activePlayer); } } else { checkSelectPiece(activePlayer);