diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java index 67ef7b53..f07679eb 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java @@ -175,7 +175,6 @@ private void handleGame(Notification notification) { if(n.getCard() == BonusCard.TURBO) { guiHandler.turbo(); app.getModelSynchronize().animationEnd(); - return; } if(n.getColor() == ownColor) guiHandler.playCardOwn(n.getCard()); 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 c7859758..88292f25 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 @@ -92,9 +92,9 @@ public Game() { * This method initializes the draw pile with the predefined number of bonus cards. */ private void initializeDrawPile() { -// this.addBonusCards(new TurboCard(), AMOUNT_OF_TURBO_CARDS); + this.addBonusCards(new TurboCard(), AMOUNT_OF_TURBO_CARDS); // this.addBonusCards(new SwapCard(), AMOUNT_OF_SWAP_CARDS); - this.addBonusCards(new ShieldCard(), AMOUNT_OF_SHIELD_CARDS); +// this.addBonusCards(new ShieldCard(), AMOUNT_OF_SHIELD_CARDS); Collections.shuffle(this.drawPile); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/RollDiceState.java index 7f7ce11d..225c79a0 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/RollDiceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/RollDiceState.java @@ -22,6 +22,7 @@ public class RollDiceState extends TurnAutomatonState { private final FirstRollState firstRollState; private final SecondRollState secondRollState; private final ThirdRollState thirdRollState; + private boolean resetModifier = true; /** * Constructs a server state of the specified game logic. @@ -39,12 +40,16 @@ public RollDiceState(TurnState turnAutomaton, ServerGameLogic logic) { @Override public void enter() { LOGGER.log(System.Logger.Level.DEBUG, "Entered RollDiceState state."); + if (resetModifier){ + logic.getGame().setDiceModifier(1); + } this.setCurrentState(this.firstRollState); } @Override public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Exited RollDiceState state."); + resetModifier = true; } /** @@ -73,6 +78,10 @@ public RollDiceAutomatonState getCurrentState() { return this.currentState; } + public void setResetModifier(boolean resetModifier) { + this.resetModifier = resetModifier; + } + /** * This method will be used to return firstRollState attribute of RollDiceState class. * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/ChoosePieceAutomatonState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/ChoosePieceAutomatonState.java index b4d5c679..48fe982a 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/ChoosePieceAutomatonState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/ChoosePieceAutomatonState.java @@ -64,6 +64,9 @@ private boolean canInfieldMove(Piece piece, int steps){ int moveIndex = (pieceIndex + steps) % logic.getGame().getBoard().getInfield().length; Piece occupant = logic.getGame().getBoard().getInfield()[moveIndex].getOccupant(); if (occupant != null){ + if (occupant.isShielded()){ + return false; + } return occupant.getColor() != piece.getColor(); } return true; diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/SelectPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/SelectPieceState.java index 9aca4089..e389da54 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/SelectPieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/SelectPieceState.java @@ -1,10 +1,9 @@ package pp.mdga.server.automaton.game.turn.choosepiece; -import pp.mdga.game.Node; -import pp.mdga.game.Piece; -import pp.mdga.game.PieceState; -import pp.mdga.game.ShieldState; +import pp.mdga.game.*; +import pp.mdga.game.card.HiddenCard; import pp.mdga.message.client.RequestMoveMessage; +import pp.mdga.message.server.DrawCardMessage; import pp.mdga.message.server.MoveMessage; import pp.mdga.message.server.SelectPieceMessage; import pp.mdga.server.ServerGameLogic; @@ -82,6 +81,17 @@ public void received(RequestMoveMessage msg, int from){ movePiece.setShield(ShieldState.NONE); } else { Node targetNode = logic.getGame().getBoard().getInfield()[targIdx]; + + if(targetNode.isBonus()) { + for (Player p : logic.getGame().getPlayersAsList()) { + if(p.isActive()) { + logic.getServerSender().send(logic.getGame().getPlayerIdByColor(p.getColor()), new DrawCardMessage(logic.getGame().draw())); + } else { + logic.getServerSender().send(logic.getGame().getPlayerIdByColor(p.getColor()), new DrawCardMessage(new HiddenCard())); + } + } + } + Piece occ = targetNode.getOccupant(); if (occ != null) { logic.getGame().getPlayerByColor(occ.getColor()).addWaitingPiece(occ); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/StartPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/StartPieceState.java index ff3e62e0..8c595d87 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/StartPieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/choosepiece/StartPieceState.java @@ -2,7 +2,10 @@ import pp.mdga.game.Node; import pp.mdga.game.Piece; +import pp.mdga.game.Player; +import pp.mdga.game.card.HiddenCard; import pp.mdga.message.client.RequestMoveMessage; +import pp.mdga.message.server.DrawCardMessage; import pp.mdga.message.server.MoveMessage; import pp.mdga.message.server.StartPieceMessage; import pp.mdga.server.ServerGameLogic; @@ -42,6 +45,17 @@ public void received(RequestMoveMessage msg, int from){ if (piece.equals(msg.getPiece())) { int targetIndex = calculateTargetIndex(piece); Node targetNode = logic.getGame().getBoard().getInfield()[targetIndex]; + + if(targetNode.isBonus()) { + for (Player p : logic.getGame().getPlayersAsList()) { + if(p.isActive()) { + logic.getServerSender().send(logic.getGame().getPlayerIdByColor(p.getColor()), new DrawCardMessage(logic.getGame().draw())); + } else { + logic.getServerSender().send(logic.getGame().getPlayerIdByColor(p.getColor()), new DrawCardMessage(new HiddenCard())); + } + } + } + //send MoveMessage logic.getServerSender().broadcast(new MoveMessage(piece, false, targetIndex)); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java index 74d40d0d..38f04f5a 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java @@ -28,6 +28,7 @@ public void enter() { this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), new ArrayList<>(), this.logic.getGame().getDiceModifier())); this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).removeHandCard(this.powerCardAutomaton.getSelectedCard()); this.logic.getGame().getDiscardPile().add(this.powerCardAutomaton.getSelectedCard()); + this.powerCardAutomaton.getTurnAutomaton().getRollDiceState().setResetModifier(false); this.powerCardAutomaton.getTurnAutomaton().setCurrentState(this.powerCardAutomaton.getTurnAutomaton().getPlayPowerCardState()); }