From d480cc6089db2677917537a24fee259879bdbbc9 Mon Sep 17 00:00:00 2001 From: Juliette Date: Wed, 21 May 2025 23:20:09 +0200 Subject: [PATCH] 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 --- src/backend/Board.java | 33 ++++++++++++----------- src/backend/Move.java | 59 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/src/backend/Board.java b/src/backend/Board.java index 317e520..5efc1f4 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -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 moves, int x, int y, boolean isWhite, int dx, int dy) { + private void extend (ArrayList 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) { diff --git a/src/backend/Move.java b/src/backend/Move.java index 956a2db..b7199b3 100644 --- a/src/backend/Move.java +++ b/src/backend/Move.java @@ -1,5 +1,60 @@ package backend; public class Move { - -} \ No newline at end of file + + 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(); + } + } + } +}