diff --git a/src/backend/Board.java b/src/backend/Board.java index e54069d..9446bae 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -62,8 +62,8 @@ public class Board { setPiece(false, PieceType.Rook, 0, 0); setPiece(false, PieceType.Knight, 1, 0); setPiece(false, PieceType.Bishop, 2, 0); - setPiece(false, PieceType.Queen, 4, 0); - setPiece(false, PieceType.King, 3, 0); + setPiece(false, PieceType.Queen, 3, 0); + setPiece(false, PieceType.King, 4, 0); setPiece(false, PieceType.Bishop, 5, 0); setPiece(false, PieceType.Knight, 6, 0); setPiece(false, PieceType.Rook, 7, 0); @@ -72,8 +72,8 @@ public class Board { setPiece(true, PieceType.Rook, 0, 7); setPiece(true, PieceType.Knight, 1, 7); setPiece(true, PieceType.Bishop, 2, 7); - setPiece(true, PieceType.Queen, 4, 7); - setPiece(true, PieceType.King, 3, 7); + setPiece(true, PieceType.Queen, 3, 7); + setPiece(true, PieceType.King, 4, 7); setPiece(true, PieceType.Bishop, 5, 7); setPiece(true, PieceType.Knight, 6, 7); setPiece(true, PieceType.Rook, 7, 7); @@ -87,7 +87,7 @@ public class Board { StringBuilder sb = new StringBuilder(); for (Piece p : pieces) { sb.append(p.getType()).append(" ") - .append(p.isWhite() ? "white" : "black") + .append(p.isWhite() ? "black" : "white") .append(" at (").append(p.getX()).append(", ").append(p.getY()).append(")\n"); } return sb.toString(); @@ -148,7 +148,10 @@ public class Board { } } } - + if (selectedPiece.getType() == PieceType.King && Math.abs(x - selectedX) == 2 && selectedY == y) { + move.setCastling(true); + } + // Record move moveHistory.add(move); @@ -159,9 +162,7 @@ public class Board { Piece capturedPawn = getPieceAt(x, y + dir); if (capturedPawn != null) { pieces.remove(capturedPawn); - } - } else if (destPiece != null) { - pieces.remove(destPiece); + } } pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y)); @@ -294,53 +295,54 @@ public class Board { public void playMove(Move move) { if (move == null) return; - - if (move.isEnPassant()) { - int direction = move.getMovedPiece().isWhite() ? 1 : -1; - Piece capturedPawn = getPieceAt(move.getToX(), move.getToY() + direction); - if (capturedPawn != null) { - pieces.remove(capturedPawn); - } - } Piece pieceToMove = getPieceAt(move.getFromX(), move.getFromY()); if (pieceToMove == null) return; - // Supprimer la pi�ce d'origine - pieces.remove(pieceToMove); - - // Supprimer la pi�ce captur�e (si elle existe) - Piece captured = getPieceAt(move.getToX(), move.getToY()); - if (captured != null) { - pieces.remove(captured); + // Handle capture or en passant + if (move.isEnPassant()) { + int dir = pieceToMove.isWhite() ? 1 : -1; + Piece captured = getPieceAt(move.getToX(), move.getToY() + dir); + if (captured != null) pieces.remove(captured); + } else if (move.getCapturedPiece() != null) { + pieces.remove(move.getCapturedPiece()); } - // Ajouter la nouvelle position - Piece newPiece = new Piece( - pieceToMove.getType(), - pieceToMove.isWhite(), - move.getToX(), - move.getToY() - ); - pieces.add(newPiece); + // Move the piece instead of removing it + pieceToMove.setX(move.getToX()); + pieceToMove.setY(move.getToY()); + pieceToMove.setHasMoved(true); - // Enregistrer dans l'historique pour undo + // ♔ Handle castling + if (move.isCastling()) { + int y = move.getToY(); + boolean kingside = move.getToX() > move.getFromX(); + int rookFromX = kingside ? 7 : 0; + int rookToX = kingside ? move.getToX() - 1 : move.getToX() + 1; + + Piece rook = getPieceAt(rookFromX, y); + if (rook != null && rook.getType() == PieceType.Rook) { + rook.setX(rookToX); + rook.setY(y); + rook.setHasMoved(true); + } + } + + // Save move to history moveHistory.add(move); - - // Fin de tour turnNumber++; - // D�s�lection et surlignage off + // Deselect anything selectedX = -1; selectedY = -1; highlightedSquares.clear(); - //Mise � jour du statut d��chec apr�s le coup + // Update check status isWhiteInCheck = isInCheck(isTurnWhite()); isCheck = isWhiteInCheck; - } + public Piece getPieceAt(int x, int y) { for (Piece p : pieces) { diff --git a/src/backend/Move.java b/src/backend/Move.java index e7134b3..ef424a9 100644 --- a/src/backend/Move.java +++ b/src/backend/Move.java @@ -8,6 +8,7 @@ public class Move { private int toX, toY; private Piece capturedPiece; private boolean enPassant; + private boolean castling; public Move(Piece movedPiece, int fromX, int fromY, int toX, int toY, Piece capturedPiece) { this.movedPiece = movedPiece; @@ -22,9 +23,18 @@ public class Move { public boolean isEnPassant() { return enPassant; } + public void setEnPassant(boolean enPassant) { this.enPassant = enPassant; } + + public boolean isCastling() { + return castling; + } + + public void setCastling(boolean castling) { + this.castling = castling; + } public Piece getMovedPiece() { return movedPiece; } public int getFromX() { return fromX; } diff --git a/src/backend/Piece.java b/src/backend/Piece.java index abf4213..fc6fa1c 100644 --- a/src/backend/Piece.java +++ b/src/backend/Piece.java @@ -32,6 +32,14 @@ public class Piece { return y; } + public void setX(int x) { + this.x = x; + } + + public void setY(int y) { + this.y = y; + } + public PieceType getType() { return type; }