Finished castling method. Basically checks if the catsling move is done

and on which side. Then moves the rook accordingly. Had to update user
touch to recognize that when the king moves 2 then the casting dynamics
defined in move has to activate
This commit is contained in:
Juliette 2025-05-21 23:20:09 +02:00
parent cafec37e4c
commit d480cc6089
2 changed files with 73 additions and 19 deletions

View File

@ -65,6 +65,7 @@ public class Board {
return turnNumber;
}
public boolean isTurnWhite() {
return isWhiteTurn;
}
@ -147,35 +148,33 @@ public class Board {
}
public void userTouch(int x, int y) {
if (selectedX != -1 && x >= 0 && x < colNum && y >= 0 && y < lineNum && isHighlighted(x, y)) {
Piece selectedPiece = getPieceAt(selectedX, selectedY);
if (selectedPiece != null) {
pieces.removeIf(p -> p.getX() == x && p.getY() == y);
selectedPiece.setX(x);
selectedPiece.setY(y);
if (selectedX != -1
&& isHighlighted(x, y)) {
selectedPiece.moveNumberAdd(); // added this to count the turn number
Piece sel = getPieceAt(selectedX, selectedY);
if (sel != null) {
Move m = new Move(selectedX, selectedY, x, y);
if (sel.getType() == PieceType.King
&& Math.abs(x - selectedX) == 2) {
m.castlingPutDown(x > selectedX);
}
m.castlingTime(this);
turnNumber++;
isWhiteTurn = !isWhiteTurn;
}
selectedX = -1;
selectedY = -1;
selectedX = selectedY = -1;
highlight.clear();
return;
}
Piece p = getPieceAt(x, y);
if (p != null && p.isWhite() == isWhiteTurn) {
selectedX = x;
selectedY = y;
highlight.clear();
highlight.addAll(findMovesAndCastlingMoves(p)); //the NEW UPDATED ONE for CASTLING
highlight.addAll(findMovesAndCastlingMoves(p));
} else {
selectedX = -1;
selectedY = -1;
selectedX = selectedY = -1;
highlight.clear();
}
}

View File

@ -2,4 +2,59 @@ package backend;
public class Move {
private final int fromX, fromY, toX, toY;
private boolean isCastling = false;
private boolean isKingSide = false;
public Move(int fx, int fy, int tx, int ty) {
this.fromX = fx;
this.fromY = fy;
this.toX = tx;
this.toY = ty;
}
public void castlingPutDown(boolean kingSide) {
this.isCastling = true;
this.isKingSide = kingSide;
}
public void castlingTime(Board board) {
if (!isCastling) {
board.getPieces().removeIf(p -> p.getX() == toX && p.getY() == toY);
Piece mover = board.getPieceAt(fromX, fromY);
mover.setX(toX);
mover.setY(toY);
mover.moveNumberAdd();
}
else {
boolean white = board.isTurnWhite();
if (white && isKingSide) {
Piece king = board.getPieceAt(4, 7);
king.setX(6); king.setY(7); king.moveNumberAdd();
Piece rook = board.getPieceAt(7, 7);
rook.setX(5); rook.setY(7); rook.moveNumberAdd();
} else if (white && !isKingSide) {
Piece king = board.getPieceAt(4, 7);
king.setX(2); king.setY(7); king.moveNumberAdd();
Piece rook = board.getPieceAt(0, 7);
rook.setX(3); rook.setY(7); rook.moveNumberAdd();
} else if (!white && isKingSide) {
Piece king = board.getPieceAt(4, 0);
king.setX(6); king.setY(0); king.moveNumberAdd();
Piece rook = board.getPieceAt(7, 0);
rook.setX(5); rook.setY(0); rook.moveNumberAdd();
} else {
Piece king = board.getPieceAt(4, 0);
king.setX(2); king.setY(0); king.moveNumberAdd();
Piece rook = board.getPieceAt(0, 0);
rook.setX(3); rook.setY(0); rook.moveNumberAdd();
}
}
}
}