From e79a1168c023af5bd7805aa0c48ccd4b02f050a7 Mon Sep 17 00:00:00 2001 From: Benjamin Feyer Date: Mon, 9 Dec 2024 21:02:46 +0100 Subject: [PATCH] corrected movelogic --- .../ChoosePieceAutomatonState.java | 151 ++++-------------- .../turn/choosepiece/SelectPieceState.java | 55 ------- 2 files changed, 34 insertions(+), 172 deletions(-) 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 b1fec104..27323b45 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 @@ -24,96 +24,6 @@ public ChoosePieceAutomatonState(ChoosePieceState choosePieceAutomaton, ServerGa this.choosePieceAutomaton = choosePieceAutomaton; } - /* - protected boolean canMove(Piece piece) { - int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); - if (piece.getState().equals(PieceState.HOME)) { - return canHomeMove(piece, steps); - } else { - int homeMoves = getHomeMoves(piece, steps); - if (homeMoves > 0) { - return canHomeMove(piece, homeMoves); - } else { - return canInfieldMove(piece, steps); - } - } - } - - */ - /* - protected int getHomeMoves(Piece piece, int steps) { - int pieceIndex = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); - Color color = piece.getColor(); - int startIndex = logic.getGame().getPlayerByColor(color).getStartNodeIndex(); - int moveIndex = pieceIndex + steps; - if (moveIndex > logic.getGame().getBoard().getInfield().length) { - if (startIndex > pieceIndex) { - return steps - (startIndex - pieceIndex - 1); - } - moveIndex %= logic.getGame().getBoard().getInfield().length; - if (moveIndex >= startIndex) { - return moveIndex - startIndex + 1; - } - return 0; - } - if (pieceIndex < startIndex && startIndex <= moveIndex) { - return moveIndex - startIndex + 1; - } - return 0; - } - - */ - /* - - - private boolean canInfieldMove(Piece piece, int steps) { - int pieceIndex = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); - 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; - } - - */ - /* - private boolean canHomeMove(Piece piece, int moveIndex) { - Color color = piece.getColor(); - Player player = logic.getGame().getPlayerByColor(color); - Node[] homeNodes = player.getHomeNodes(); - int index; - if (player.pieceInsideOfHome(piece)) { - index = player.getHomeIndexOfPiece(piece); - } else { - index = 0; - } - if (index + moveIndex >= homeNodes.length) { - return false; - } else { - for (int i = index; i <= index + moveIndex; i++) { - if (homeNodes[i].isOccupied()) { - return false; - } - } - return true; - } - } - - */ - /* - protected int calculateTargetIndex(Piece piece) { - int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); - - return (logic.getGame().getBoard().getInfieldIndexOfPiece(piece) + steps) % logic.getGame().getBoard().getInfield().length; - } - - */ - - /** * returns true, if the piece can move inside the home or infield or move from the infield to the home * @@ -131,24 +41,33 @@ protected boolean canMove(Piece piece) { System.out.println("Server: ChoosePieceStateMachine: canMove: piece.getState()" + piece.getState()); System.out.println("Server: ChoosePieceStateAutomaton: canMove:" + canPieceMoveInHome(piece, steps)); //checks if the piece can move in the home - if (canPieceMoveInHome(piece, steps)) { - System.out.println("Server: ChoosePieceStateMachine:canMove: entered canMove/canPieceMoveInHome"); - return true; - } - //checks if the piece will not go over its home-field - else if(40 > targetIdx && (!piece.getState().equals(PieceState.HOME)||!piece.getState().equals(PieceState.HOMEFINISHED))) { - Color activeColor = logic.getGame().getActiveColor(); - System.out.println("ChoosePieceAutomaton: targetindex:" + (pieceIdx + steps) % 40); - Node tartgetNode = logic.getGame().getBoard().getInfield()[(pieceIdx + steps) % 40]; - //checks if the target-node is not occupied by an own color - if (!tartgetNode.isOccupied(activeColor)) { - //checks if the targetNode is not occupied or the occupant ha no shield - if (!tartgetNode.isOccupied() || tartgetNode.getOccupant().getShield() != ShieldState.ACTIVE) { - return true; - } + if (piece.getState().equals(PieceState.HOME)) { + if (canPieceMoveInHome(piece, steps)) { + System.out.println("Server: ChoosePieceStateMachine:canMove: entered canMove/canPieceMoveInHome"); + return true; } } - //returns false it the piece can't move + else { + if (canPieceMoveInHome(piece, steps)) { + System.out.println("Server: ChoosePieceStateMachine:canMove: entered canMove/canPieceMoveInHome"); + return true; + } + //checks if the piece will not go over its home-field + else if (40 > targetIdx && (!piece.getState().equals(PieceState.HOME) || !piece.getState().equals(PieceState.HOMEFINISHED))) { + Color activeColor = logic.getGame().getActiveColor(); + System.out.println("ChoosePieceAutomaton: targetindex:" + (pieceIdx + steps) % 40); + Node tartgetNode = logic.getGame().getBoard().getInfield()[(pieceIdx + steps) % 40]; + //checks if the target-node is not occupied by an own color + if (!tartgetNode.isOccupied(activeColor)) { + //checks if the targetNode is not occupied or the occupant ha no shield + if (!tartgetNode.isOccupied() || tartgetNode.getOccupant().getShield() != ShieldState.ACTIVE) { + return true; + } + } + } + //returns false it the piece can't move + return false; + } return false; } @@ -168,9 +87,12 @@ protected boolean canPieceMoveInHome(Piece piece, int steps) { int homeIdx = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece); //tests if the steps are less than the possible movement System.out.println("Server: ChoosePieceAutomaton: canPieceMoveInHome: reached second if: (4 - homeIdx) > steps:" + ((4 - homeIdx) > steps) + "steps:" + steps + "homeIdx:" + homeIdx); - if ((4 - homeIdx) > steps) { - System.out.println("Server: canPieceMoveInHome: !jumpOver" + !jumpOver(steps, homeIdx, false)); - return !jumpOver(steps, homeIdx, false); + if ((3 - homeIdx) >= steps - 1) { + System.out.println("Server: canPieceMoveInHome: !jumpOver" + !jumpOver(steps-1, homeIdx, false)); + return !jumpOver(steps-1, homeIdx, false); + } + else { + return false; } } //tests if the piece can move in the home @@ -183,20 +105,18 @@ else if (piece.getState() == PieceState.ACTIVE) { if (targetIdx >= 40) { int stepsToHome = 39 - normPieceIdx; int restMovement = steps - stepsToHome - 1; - if(restMovement>=3) return false; + if (restMovement >= 3) return false; System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: stepsToHome:" + stepsToHome + "restMovement:" + restMovement + "jumpOver:" + jumpOver(restMovement, 0, true) + "canPieceMoveInHome: return:" + true); return !jumpOver(restMovement, 0, true); } - } else { + } + else { System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: return:" + false); return false; } return false; } - - - /** * tests if the piece, when moved in or inside a home, must jump over another piece * @@ -263,7 +183,6 @@ protected int getInfieldTarget(Piece piece, int steps) { return (steps + index) % 40; } - /** * this method is used for calculating the targetIndex * @@ -279,6 +198,4 @@ protected int calculateTargetIndex(Piece piece) { System.out.println("Server: ChoosePieceStateAutomaton: calculate index in Infield:" + getInfieldTarget(piece, steps)); return getInfieldTarget(piece, steps); } - - } 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 0ccbe5f7..05a28499 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 @@ -39,25 +39,6 @@ public void setMoveablePieces(ArrayList moveablePieces) { /** * This method will be used whenever this state will be entered. */ - /* - @Override - public void enter() { - LOGGER.log(System.Logger.Level.DEBUG, "Entered SelectPieceState state."); - int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); - for (Piece piece : moveablePieces) { - int homeMoves = getHomeMoves(piece, steps); - if (homeMoves > 0) { - isHomeMove.add(true); - targetIndex.add(homeMoves); - } else { - isHomeMove.add(false); - targetIndex.add(calculateTargetIndex(piece)); - } - } - logic.getServerSender().send(logic.getGame().getActivePlayerId(), new SelectPieceMessage(moveablePieces, isHomeMove, targetIndex)); - } - */ - @Override public void enter(){ LOGGER.log(System.Logger.Level.DEBUG, "Entered SelectPieceState state in the Server."); @@ -178,42 +159,6 @@ public void received(RequestMoveMessage msg, int from){ } } } - - /* - Node oldNode = logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(movePiece)]; - oldNode.clearOccupant(); - if (homeMove) { - //setPieceInHome - logic.getGame().getPlayerByColor(msg.getPiece().getColor()).setPieceInHome(targIdx, movePiece); - - if (logic.getGame().getPlayerByColor(msg.getPiece().getColor()).isHomeFinished(logic.getGame().getPieceThroughUUID(msg.getPiece().getUuid()))) { - movePiece.setState(PieceState.HOMEFINISHED); - } - else { - movePiece.setState(PieceState.HOME); - } - movePiece.setShield(ShieldState.NONE); - } else { - Node targetNode = logic.getGame().getBoard().getInfield()[targIdx]; - //TODO durch merge auskommentiert - if(targetNode.isBonus()) { - for (Player p : logic.getGame().getPlayersAsList()) { - if(p.getColor() == logic.getGame().getActiveColor()) { - 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); - } - targetNode.setOccupant(msg.getPiece()); - } - - */ System.out.println("Server changes from SelectPieceState to movePieceState"); this.choosePieceAutomaton.getTurnAutomaton().setCurrentState(this.choosePieceAutomaton.getTurnAutomaton().getMovePieceState()); }