diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/choosepiecestate/SelectPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/choosepiecestate/SelectPieceState.java index b85899b5..038d049d 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/choosepiecestate/SelectPieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/choosepiecestate/SelectPieceState.java @@ -4,6 +4,7 @@ import pp.mdga.client.ClientState; import pp.mdga.client.gamestate.turnstate.ChoosePieceState; import pp.mdga.game.Piece; +import pp.mdga.game.PieceState; import pp.mdga.message.client.RequestMoveMessage; import pp.mdga.message.client.SelectedPiecesMessage; import pp.mdga.message.server.MoveMessage; @@ -49,10 +50,30 @@ public void selectPiece(Piece piece) { public void received(MoveMessage msg) { Piece piece = logic.getGame().getPieceThroughUUID(msg.getPiece().getUuid()); //logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(piece)].clearOccupant(); + System.out.println("Client: selectPieceState: receivedMoveMessage: msg.isHomeMoved():"+msg.isHomeMove()); if (msg.isHomeMove()) { + System.out.println("Client: selectPieceState: receivedMoveMessage: msg.getPiece.getState():"+piece.getState()); + if(piece.getState().equals(PieceState.ACTIVE)){ + logic.addNotification(new HomeMoveNotification(piece.getUuid(), msg.getTargetIndex())); + int infieldIndex=logic.getGame().getBoard().getInfieldIndexOfPiece(piece); + System.out.println("Client: SelectState: activePiece in Home: infieldIndex"+infieldIndex); + logic.getGame().getBoard().getInfield()[infieldIndex].clearOccupant(); + logic.getGame().getPlayerByColor(piece.getColor()).setPieceInHome(msg.getTargetIndex(), piece); + } + else{ + System.out.println("Client: SelectPieceState: receivedMoveMessage:reached else"); + logic.addNotification(new HomeMoveNotification(piece.getUuid(), msg.getTargetIndex())); + System.out.println("Client: electPieceState: homeindex"+logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece)); + int pieceHomeIndex = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece); + logic.getGame().getActivePlayer().getHomeNodes()[pieceHomeIndex].clearOccupant(); + logic.getGame().getPlayerByColor(piece.getColor()).setPieceInHome(msg.getTargetIndex(), piece); + } + /* logic.addNotification(new HomeMoveNotification(piece.getUuid(), msg.getTargetIndex())); logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(piece)].clearOccupant(); logic.getGame().getPlayerByColor(piece.getColor()).setPieceInHome(msg.getTargetIndex(), piece); + + */ } else { int oldIndex = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); 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 a6f2deeb..1cc9758f 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 @@ -87,7 +87,7 @@ public Game() { gameStatistics = new Statistic(); initializeDrawPile(); board = new Board(); - die = new Die(2,5,6,3,6); + die = new Die(5,5,5,5,5,5,5,5,1,2,1,2,2,6,3,6); } /** 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 97f8b0ed..19476493 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 @@ -120,93 +120,97 @@ protected int calculateTargetIndex(Piece piece) { * @param piece the piece that will be checked * @return true, if the piece can move */ - protected boolean canMove(Piece piece){ - System.out.println("Server: ChoosePieceStateMachine: canMove: piece.getState()"+piece.getState()); + protected boolean canMove(Piece piece) { + System.out.println("Server: ChoosePieceStateMachine: canMove: piece.getState()" + piece.getState()); int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); - System.out.println("Server: ChoosePieceStateAutomaton: canMove:"+canPieceMoveInHome(piece,steps)); - if(canPieceMoveInHome(piece,steps)){ + 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; } int pieceIdx = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); - System.out.println("ChoosePieceAutomaton: pieceIndex:"+ pieceIdx); + System.out.println("ChoosePieceAutomaton: pieceIndex:" + pieceIdx); int startIdx = logic.getGame().getActivePlayer().getStartNodeIndex(); - int normPieceIdx = (-startIdx+pieceIdx+40)%40; - int targetIdx = normPieceIdx+steps; - if(40> targetIdx){ + int normPieceIdx = (-startIdx + pieceIdx + 40) % 40; + int targetIdx = normPieceIdx + steps; + //checks if the piece will not go over its home-field + if (40 > targetIdx) { Color activeColor = logic.getGame().getActiveColor(); - System.out.println("ChoosePieceAutomaton: targetindex:"+ (pieceIdx+steps)%40); - Node tartgetNode =logic.getGame().getBoard().getInfield()[(pieceIdx+steps)%40]; - if(!tartgetNode.isOccupied(activeColor)){ - if(!tartgetNode.isOccupied()||tartgetNode.getOccupant().getShield() != ShieldState.ACTIVE){ + 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; } } - return true; } + //returns false it the piece can't move return false; } /** * tests if the piece can move in the home or inside the home + * * @param piece * @param steps * @return false, if the piece can't move in the home */ - protected boolean canPieceMoveInHome(Piece piece, int steps){ + 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()); - if(piece.getState()==PieceState.HOME){ + System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceState:" + piece.getState()); + steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); + if (piece.getState() == PieceState.HOME) { System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceState:reached if(piece.getState()==PieceState.HOME)"); - int homeIdx =logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece); - if((4-homeIdx)>steps){ - System.out.println("Server: canPieceMoveInHome: !jumpOver"+ !jumpOver(steps,homeIdx,false)); - return !jumpOver(steps,homeIdx,false); + 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); } } //tests if the piece can move in the home - if(piece.getState()==PieceState.ACTIVE){ + if (piece.getState() == PieceState.ACTIVE) { int pieceIdx = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); int startIdx = logic.getGame().getActivePlayer().getStartNodeIndex(); - int normPieceIdx = (-startIdx+pieceIdx+40)%40; - int targetIdx = normPieceIdx+steps; - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceIndex:" +pieceIdx); - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: targetIdx:" +targetIdx); - if(targetIdx >= 40){ - int stepsToHome = 39- normPieceIdx; - int restMovement = steps-stepsToHome; - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: stepsToHome:" +stepsToHome); - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: restMovement:" +restMovement); - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: jumpOver:" +jumpOver(restMovement,0,true)); - if(4> restMovement){ - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: return:" +true); - return !jumpOver(restMovement,0,true); - } + int normPieceIdx = (-startIdx + pieceIdx + 40) % 40; + int targetIdx = normPieceIdx + steps; + System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: pieceIndex:" + pieceIdx + "targetIdx:" + targetIdx); + if (targetIdx >= 40) { + int stepsToHome = 39 - normPieceIdx; + int restMovement = steps - stepsToHome - 1; + System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: stepsToHome:" + stepsToHome + "restMovement:" + restMovement + "jumpOver:" + jumpOver(restMovement, 0, true) + "canPieceMoveInHome: return:" + true); + return !jumpOver(restMovement, 0, true); } } - System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: return:" +false); + System.out.println("Server: ChoosePieceStateMachine: canPieceMoveInHome: return:" + false); return false; } + /** * tests if the piece, when moved in or inside a home, must jump over another piece * * @param stepsInHome the steps walked inside the home - * @param homeIdx the index of the piece inside, or 0 if come from outside - * @param outside a boolean, if the piece moves inside a house or in a house + * @param homeIdx the index of the piece inside, or 0 if come from outside + * @param outside a boolean, if the piece moves inside a house or in a house * @return false, if there is no piece to jump over */ - private boolean jumpOver(int stepsInHome,int homeIdx,boolean outside){ + private boolean jumpOver(int stepsInHome, int homeIdx, boolean outside) { //tests if the piece comes from the outside in the home - if(outside){ - for(int i =0;i < stepsInHome;i++){ - if(logic.getGame().getActivePlayer().getHomeNodes()[i].isOccupied()) return true; + if (outside) { + System.out.println("Server: ChoosePieceState: jumpOver: from outside"); + for (int i = 0; i < stepsInHome; i++) { + if (logic.getGame().getActivePlayer().getHomeNodes()[i].isOccupied()) return true; } } - //tests if the piece jumps over a piece inside the home - else{ - for(int i = 1+homeIdx; i moveablePieces = new ArrayList<>(); for (Piece piece : activePlayer.getPieces()){ if (piece.getState().equals(PieceState.ACTIVE) || piece.getState().equals(PieceState.HOME)){ - System.out.println("Server: NoPieceState: movablePieces.size()"+piece.getState()); moveablePieces.add(piece); } } 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 ff53a471..93d0d956 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 @@ -64,13 +64,13 @@ public void enter(){ for (Piece piece : moveablePieces) { if(canPieceMoveInHome(piece,steps)){ - int target= getHomeTargetIdx(piece); + 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); + int target = getInfieldTarget(piece,steps); System.out.println("Server: SelectPieceState: enter in else: targetIndex:"+target); targetIndex.add(target); isHomeMove.add(false); @@ -85,6 +85,7 @@ public void received(RequestMoveMessage msg, int from){ if(!moveablePieces.contains(msg.getPiece())){ throw new RuntimeException("invalid Piece"); } + int indexOfPiece = moveablePieces.indexOf(msg.getPiece()); int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes(); Piece piece = moveablePieces.get(indexOfPiece); @@ -96,7 +97,7 @@ public void received(RequestMoveMessage msg, int from){ int homeIndex = logic.getGame().getActivePlayer().getHomeIndexOfPiece(piece); Node oldNode = logic.getGame().getActivePlayer().getHomeNodes()[homeIndex]; //gets the targetNode - int targetHomeIdx = getHomeTargetIdx(piece); + int targetHomeIdx = getHomeTargetIdx(piece,steps); Node targetNode = logic.getGame().getActivePlayer().getHomeNodes()[targetHomeIdx]; oldNode.clearOccupant(); @@ -114,7 +115,7 @@ public void received(RequestMoveMessage msg, int from){ Node oldNode = logic.getGame().getBoard().getInfield()[oldNoteIdx]; //gets the targetNode - int targetHomeIdx = getHomeTargetIdx(piece); + int targetHomeIdx = getHomeTargetIdx(piece,steps); Node targetNode = logic.getGame().getActivePlayer().getHomeNodes()[targetHomeIdx]; oldNode.clearOccupant(); @@ -126,26 +127,28 @@ public void received(RequestMoveMessage msg, int from){ piece.setState(PieceState.HOME); System.out.println("Server: SelectPieceMessage: received(RequestMoveMessage): setPiece(Home)"+piece.getState()); } + LOGGER.log(System.Logger.Level.INFO,"Server : SelectPieceState: PieceState:"+piece.getState()); } else{ + LOGGER.log(System.Logger.Level.INFO,"Server : SelectPieceState: PieceState:"+piece.getState()); int oldNoteIdx = logic.getGame().getBoard().getInfieldIndexOfPiece(piece); Node oldNode = logic.getGame().getBoard().getInfield()[oldNoteIdx]; int targetIndex = (oldNoteIdx+steps)%40; Node targetNode = logic.getGame().getBoard().getInfield()[targetIndex]; - oldNode.clearOccupant(); - targetNode.setOccupant(piece); - Piece occ = targetNode.getOccupant(); if (occ != null) { logic.getGame().getPlayerByColor(occ.getColor()).addWaitingPiece(occ); } - if(targetNode instanceof StartNode){ + if(targetNode.isStart()){ if(piece.getShield()== ShieldState.ACTIVE) piece.setShield(ShieldState.SUPPRESSED); } + oldNode.clearOccupant(); + targetNode.setOccupant(piece); + } System.out.println("Server: SelectPieceMessage: received(RequestMoveMessage): pieceState: wichtig"+piece.getState()); @@ -186,6 +189,7 @@ public void received(RequestMoveMessage msg, int from){ } */ + LOGGER.log(System.Logger.Level.INFO,"Server : SelectPieceState: PieceState: end:"+piece.getState()); logic.getServerSender().broadcast(new MoveMessage(piece, homeMove, targIdx)); System.out.println("Server changes from SelectPieceState to movePieceState"); this.choosePieceAutomaton.getTurnAutomaton().setCurrentState(this.choosePieceAutomaton.getTurnAutomaton().getMovePieceState());