Merge branch 'development2' of https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-01 into development2
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -39,25 +39,6 @@ public void setMoveablePieces(ArrayList<Piece> 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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user