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(); + } + } + } +}