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

@ -64,6 +64,7 @@ public class Board {
public int getTurnNumber() {
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);
selectedPiece.moveNumberAdd(); // added this to count the turn number
if (selectedX != -1
&& isHighlighted(x, y)) {
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();
}
}
@ -379,7 +378,7 @@ public class Board {
return moves;
}
private void extend(ArrayList<Position> moves, int x, int y, boolean isWhite, int dx, int dy) {
private void extend (ArrayList<Position> moves, int x, int y, boolean isWhite, int dx, int dy) {
int nx = x + dx;
int ny = y + dy;
while (nx >= 0 && nx < colNum && ny >= 0 && ny < lineNum) {

View File

@ -1,5 +1,60 @@
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();
}
}
}
}