fixed the move-logic
This commit is contained in:
		@@ -31,31 +31,27 @@ public ChoosePieceAutomatonState(ChoosePieceState choosePieceAutomaton, ServerGa
 | 
			
		||||
     * @return true, if the piece can move
 | 
			
		||||
     */
 | 
			
		||||
    protected boolean canMove(Piece piece) {
 | 
			
		||||
        System.out.println("Server: reached canMove() for piece: " + piece);
 | 
			
		||||
        int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
 | 
			
		||||
        int pieceIdx = logic.getGame().getBoard().getInfieldIndexOfPiece(piece);
 | 
			
		||||
        System.out.println("ChoosePieceAutomaton: pieceIndex:" + pieceIdx);
 | 
			
		||||
        int startIdx = logic.getGame().getActivePlayer().getStartNodeIndex();
 | 
			
		||||
        int normPieceIdx = (-startIdx + pieceIdx + 40) % 40;
 | 
			
		||||
        int targetIdx = normPieceIdx + steps;
 | 
			
		||||
 | 
			
		||||
        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 (piece.getState().equals(PieceState.HOME)) {
 | 
			
		||||
            if (canPieceMoveInHome(piece, steps)) {
 | 
			
		||||
                System.out.println("Server: ChoosePieceStateMachine:canMove: entered canMove/canPieceMoveInHome");
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        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)) {
 | 
			
		||||
@@ -80,17 +76,15 @@ else if (40 > targetIdx && (!piece.getState().equals(PieceState.HOME) || !piece.
 | 
			
		||||
     */
 | 
			
		||||
    protected boolean canPieceMoveInHome(Piece piece, int steps) {
 | 
			
		||||
        //tests if the piece can move inside the home
 | 
			
		||||
        System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceState:" + piece.getState());
 | 
			
		||||
        steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
 | 
			
		||||
        System.out.println("Server: reached canPieceMoveInHome for piece: " + piece +" and the steps: "+steps);
 | 
			
		||||
 | 
			
		||||
        if (piece.getState().equals(PieceState.HOME)) {
 | 
			
		||||
            System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceState:reached if(piece.getState()==PieceState.HOME)");
 | 
			
		||||
            int homeIdx = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece);
 | 
			
		||||
            System.out.println("Server: reached canPieceMoveInHome for piece: " + piece + " and the steps: "+steps + " and the homeIndex: "+homeIdx + " and the if-clause ((3 - homeIdx) >= steps - 1): "+((3 - homeIdx) >= steps - 1));
 | 
			
		||||
            //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 ((3 - homeIdx) >= steps - 1) {
 | 
			
		||||
                //TODO
 | 
			
		||||
                System.out.println("Server: canPieceMoveInHome: !jumpOver" + !jumpOver(steps-1, homeIdx, false));
 | 
			
		||||
                return !jumpOver(steps-1, homeIdx, false);
 | 
			
		||||
                return !jumpOver(steps, homeIdx, false);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                return false;
 | 
			
		||||
@@ -102,17 +96,16 @@ else if (piece.getState() == PieceState.ACTIVE) {
 | 
			
		||||
            int startIdx = logic.getGame().getActivePlayer().getStartNodeIndex();
 | 
			
		||||
            int normPieceIdx = (-startIdx + pieceIdx + 40) % 40;
 | 
			
		||||
            int targetIdx = normPieceIdx + steps;
 | 
			
		||||
            System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceIndex:" + pieceIdx + "targetIdx:" + targetIdx);
 | 
			
		||||
            System.out.println("Server: canPieceHomeMove: else: Active: with pieceIndex: "+pieceIdx+" and the steps: "+steps+ " and startIdx: "+startIdx+" and targetIdx: "+targetIdx +" and the if-statement (targetIdx >= 40): "+(targetIdx >= 40));
 | 
			
		||||
            if (targetIdx >= 40) {
 | 
			
		||||
                int stepsToHome = 39 - normPieceIdx;
 | 
			
		||||
                int restMovement = steps - stepsToHome - 1;
 | 
			
		||||
                if (restMovement >= 3) return false;
 | 
			
		||||
                System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: stepsToHome:" + stepsToHome + "restMovement:" + restMovement + "jumpOver:" + jumpOver(restMovement, 0, true) + "canPieceMoveInHome: return:" + true);
 | 
			
		||||
                int restMovement = steps - stepsToHome-1;
 | 
			
		||||
                System.out.println("Server: canPieceHomeMove:else: restMovement: "+restMovement+ " and the if-clause(restMovement >= 3):"+(restMovement >= 3));
 | 
			
		||||
                if (restMovement >= 4) return false;
 | 
			
		||||
                return !jumpOver(restMovement, 0, true);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: return:" + false);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
@@ -127,19 +120,20 @@ else if (piece.getState() == PieceState.ACTIVE) {
 | 
			
		||||
     * @return false, if there is no piece to jump over
 | 
			
		||||
     */
 | 
			
		||||
    private boolean jumpOver(int stepsInHome, int homeIdx, boolean outside) {
 | 
			
		||||
 | 
			
		||||
        //tests if the piece comes from the outside in the home
 | 
			
		||||
        if (outside) {
 | 
			
		||||
            System.out.println("Server: jumpOver: for the homeIndex: "+ homeIdx+" ,stepsInHome: "+stepsInHome+ " , outside: "+outside + " annd the targetIndex: "+stepsInHome);
 | 
			
		||||
            if (logic.getGame().getActivePlayer().getHomeNodes()[stepsInHome].isOccupied()) return true;
 | 
			
		||||
            System.out.println("Server: ChoosePieceState: jumpOver: from outside");
 | 
			
		||||
            for (int i = 0; i < stepsInHome; i++) {
 | 
			
		||||
            for (int i = 0; i <= stepsInHome; i++) {
 | 
			
		||||
                if (logic.getGame().getActivePlayer().getHomeNodes()[i].isOccupied()) return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //tests if the piece jumps over a piece from inside the home
 | 
			
		||||
        else {
 | 
			
		||||
            if (logic.getGame().getActivePlayer().getHomeNodes()[stepsInHome + homeIdx].isOccupied()) return true;
 | 
			
		||||
            for (int i = 1 + homeIdx; i < homeIdx-1 + stepsInHome; i++) {
 | 
			
		||||
            int targetIndex = stepsInHome + homeIdx;
 | 
			
		||||
            System.out.println("Server: jumpOver: for the homeIndex: "+ homeIdx+" ,stepsInHome: "+stepsInHome+ " , outside: "+outside + " and the targetIndex: "+targetIndex);
 | 
			
		||||
            if (logic.getGame().getActivePlayer().getHomeNodes()[targetIndex].isOccupied()) return true;
 | 
			
		||||
            for (int i = 1 + homeIdx; i <= targetIndex; i++) {
 | 
			
		||||
                if (logic.getGame().getActivePlayer().getHomeNodes()[i].isOccupied()) return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -164,11 +158,13 @@ protected int getHomeTargetIdx(Piece piece, int steps) {
 | 
			
		||||
            int stepsToHome = 39 - normPieceIdx;
 | 
			
		||||
            //calculates the rest-movement inside a home
 | 
			
		||||
            int restMovement = steps - stepsToHome - 1;
 | 
			
		||||
            System.out.println("Server: getHomeTargetIndex for the piece: "+ piece + " with the index: "+restMovement);
 | 
			
		||||
            return restMovement;
 | 
			
		||||
        }
 | 
			
		||||
        //the else handles the logic if the piece is in the home and moves inside the house
 | 
			
		||||
        else {
 | 
			
		||||
            int pieceHomeIdx = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece);
 | 
			
		||||
            System.out.println("Server: getHomeTargetIndex for the piece: "+ piece + " with the index: "+(pieceHomeIdx + steps));
 | 
			
		||||
            return pieceHomeIdx + steps;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -181,14 +177,15 @@ protected int getHomeTargetIdx(Piece piece, int steps) {
 | 
			
		||||
     */
 | 
			
		||||
    protected int getInfieldTarget(Piece piece, int steps) {
 | 
			
		||||
        int index = logic.getGame().getBoard().getInfieldIndexOfPiece(piece);
 | 
			
		||||
        System.out.println("Server: calculated the targetIndex in the Infield for:"+piece+"with the value"+ ((steps + index) % 40));
 | 
			
		||||
        return (steps + index) % 40;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * this method is used for calculating the targetIndex
 | 
			
		||||
     *
 | 
			
		||||
     * @param piece
 | 
			
		||||
     * @return
 | 
			
		||||
     * @param piece the piece give
 | 
			
		||||
     * @return the index
 | 
			
		||||
     */
 | 
			
		||||
    protected int calculateTargetIndex(Piece piece) {
 | 
			
		||||
        int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
 | 
			
		||||
@@ -196,7 +193,6 @@ protected int calculateTargetIndex(Piece piece) {
 | 
			
		||||
            System.out.println("Server: ChoosePieceStateAutomaton: calculate index in home:" + getHomeTargetIdx(piece, steps));
 | 
			
		||||
            return getHomeTargetIdx(piece, steps);
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("Server: ChoosePieceStateAutomaton: calculate index in Infield:" + getInfieldTarget(piece, steps));
 | 
			
		||||
        return getInfieldTarget(piece, steps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -60,10 +60,7 @@ private void checkSelectPiece(Player activePlayer){
 | 
			
		||||
                moveablePieces.add(piece);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("Server: NoPieceState: movablePieces.size()"+moveablePieces.size());
 | 
			
		||||
        System.out.println("Server: NoPiece: piece.getState"+moveablePieces.get(0).getState());
 | 
			
		||||
        moveablePieces.removeIf(piece -> !canMove(piece));
 | 
			
		||||
        System.out.println("Server: NoPieceState: movablePieces.size(): after deletion:"+moveablePieces.size());
 | 
			
		||||
        if (moveablePieces.isEmpty()) {
 | 
			
		||||
            this.choosePieceAutomaton.setCurrentState(this.choosePieceAutomaton.getNoTurnState());
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -41,24 +41,20 @@ public void setMoveablePieces(ArrayList<Piece> moveablePieces) {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter(){
 | 
			
		||||
        LOGGER.log(System.Logger.Level.DEBUG, "Entered SelectPieceState state in the Server.");
 | 
			
		||||
        int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
 | 
			
		||||
        for (Piece piece : moveablePieces) {
 | 
			
		||||
 | 
			
		||||
            if(canPieceMoveInHome(piece,steps)){
 | 
			
		||||
                int target= getHomeTargetIdx(piece,steps);
 | 
			
		||||
                System.out.println("Server: SelectPieceState: enter in canPieceMoveInHome: targetIndex:"+target);
 | 
			
		||||
                targetIndex.add(target);
 | 
			
		||||
                isHomeMove.add(true);
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
                int target = getInfieldTarget(piece,steps);
 | 
			
		||||
                System.out.println("Server: SelectPieceState: enter in else: targetIndex:"+target);
 | 
			
		||||
                targetIndex.add(target);
 | 
			
		||||
                isHomeMove.add(false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("Server: SelectPiece: enter: send:  "+moveablePieces.get(0)+isHomeMove.get(0)+targetIndex.get(0));
 | 
			
		||||
        logic.getServerSender().send(logic.getGame().getActivePlayerId(), new SelectPieceMessage(moveablePieces, isHomeMove, targetIndex));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -72,9 +68,7 @@ public void received(RequestMoveMessage msg, int from){
 | 
			
		||||
        int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
 | 
			
		||||
        Piece piece = moveablePieces.get(indexOfPiece);
 | 
			
		||||
        if(canPieceMoveInHome(piece,steps)){
 | 
			
		||||
            System.out.println("Server: SelectPieceState: canPieceMoveInHome(piece,steps)");
 | 
			
		||||
            if(piece.getState().equals(PieceState.HOME)) {
 | 
			
		||||
                System.out.println("Server: SelectPieceState: piece.getState()==PieceState.HOME");
 | 
			
		||||
                //gets the oldNode
 | 
			
		||||
                int homeIndex = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece);
 | 
			
		||||
                Node oldNode = logic.getGame().getActivePlayer().getHomeNodes()[homeIndex];
 | 
			
		||||
@@ -90,11 +84,9 @@ public void received(RequestMoveMessage msg, int from){
 | 
			
		||||
 | 
			
		||||
                oldNode.clearOccupant();
 | 
			
		||||
                targetNode.setOccupant(piece);
 | 
			
		||||
                System.out.println("sets homefinsihed here:"+ (targetHomeIdx ==logic.getGame().getActivePlayer().getHighestHomeIdx())+"targetIdx:"+targetHomeIdx+"HighestHomeIdx:"+logic.getGame().getActivePlayer().getHighestHomeIdx());
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
                System.out.println("Server: SelectPieceState: entered else");
 | 
			
		||||
                int oldNoteIdx = logic.getGame().getBoard().getInfieldIndexOfPiece(piece);
 | 
			
		||||
                Node oldNode = logic.getGame().getBoard().getInfield()[oldNoteIdx];
 | 
			
		||||
 | 
			
		||||
@@ -111,9 +103,7 @@ public void received(RequestMoveMessage msg, int from){
 | 
			
		||||
 | 
			
		||||
                oldNode.clearOccupant();
 | 
			
		||||
                targetNode.setOccupant(piece);
 | 
			
		||||
                System.out.println("sets homefinsihed:"+ (targetHomeIdx ==logic.getGame().getActivePlayer().getHighestHomeIdx())+"targetIdx:"+targetHomeIdx+"HighestHomeIdx:"+logic.getGame().getActivePlayer().getHighestHomeIdx());
 | 
			
		||||
 | 
			
		||||
                System.out.println("Server: SelectPieceMessage: received(RequestMoveMessage): setPiece(Home)"+piece.getState());
 | 
			
		||||
            }
 | 
			
		||||
            LOGGER.log(System.Logger.Level.INFO,"Server : SelectPieceState: PieceState:"+piece.getState());
 | 
			
		||||
        }
 | 
			
		||||
@@ -139,7 +129,6 @@ public void received(RequestMoveMessage msg, int from){
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        System.out.println("Server: SelectPieceMessage: received(RequestMoveMessage): pieceState: wichtig"+piece.getState());
 | 
			
		||||
        boolean homeMove = isHomeMove.get(indexOfPiece);
 | 
			
		||||
        int targIdx = targetIndex.get(indexOfPiece);
 | 
			
		||||
 | 
			
		||||
@@ -159,7 +148,6 @@ public void received(RequestMoveMessage msg, int from){
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("Server changes from SelectPieceState to movePieceState");
 | 
			
		||||
        this.choosePieceAutomaton.getTurnAutomaton().setCurrentState(this.choosePieceAutomaton.getTurnAutomaton().getMovePieceState());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user