From 2d3b816551040f57bfd01e52cef2177565829e56 Mon Sep 17 00:00:00 2001 From: romca Date: Mon, 19 May 2025 13:17:43 +0200 Subject: [PATCH] en-passant --- OOP_1A2_Project/bin/.gitignore | 1 - .../bin/backend/Board$Position.class | Bin 828 -> 828 bytes OOP_1A2_Project/bin/backend/Board.class | Bin 13685 -> 15494 bytes OOP_1A2_Project/src/backend/Board.java | 120 +++++++++++++++++- 4 files changed, 116 insertions(+), 5 deletions(-) delete mode 100644 OOP_1A2_Project/bin/.gitignore diff --git a/OOP_1A2_Project/bin/.gitignore b/OOP_1A2_Project/bin/.gitignore deleted file mode 100644 index 6d0c385..0000000 --- a/OOP_1A2_Project/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/backend/ diff --git a/OOP_1A2_Project/bin/backend/Board$Position.class b/OOP_1A2_Project/bin/backend/Board$Position.class index 0e1c77c0a19876f679d8332646d99bb5a1b7dc98..63e1cabcac037522779c3d3c4bd327d6be33932a 100644 GIT binary patch delta 49 zcmdnPwufy46BDlp0}F#F11EzR10RF>#xlTmpx2eSzP Dwo?Zx delta 49 zcmdnPwufy46BDlx0}F#N11EzB10RFvWPYY5UP%Ua1}O#!25AOa2ARq8m@*j^Cvz~H F006Y92N(bV diff --git a/OOP_1A2_Project/bin/backend/Board.class b/OOP_1A2_Project/bin/backend/Board.class index 8baa6a77769a89a6194355c5cb47d1bd7a671415..15d678c1f6c0d5c6fb8039724149a12fee85189f 100644 GIT binary patch literal 15494 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 diff --git a/OOP_1A2_Project/src/backend/Board.java b/OOP_1A2_Project/src/backend/Board.java index 0659d99..85a77dd 100644 --- a/OOP_1A2_Project/src/backend/Board.java +++ b/OOP_1A2_Project/src/backend/Board.java @@ -11,6 +11,8 @@ public class Board { private boolean isWhiteTurn; private ArrayList pieces; private Set highlightedPositions = new HashSet<>(); + private Position lastMovedPiecePosition = null; + private boolean lastMoveWasDoublePawnMove = false; private static class Position { int x; int y; @@ -109,9 +111,7 @@ public class Board { pieces.add(new Piece(5, 7, bishop, true)); pieces.add(new Piece(6, 7, knight, true)); pieces.add(new Piece(7, 7, rook, true)); - - - } + } public void cleanBoard() { pieces.clear(); @@ -179,14 +179,40 @@ public class Board { if (selectedPiece != null) { // Check if the destination is a valid move if (isHighlighted(x, y)) { + + // Check if this is an en passant capture + boolean isEnPassant = isEnPassantCapture(selectedPiece, x, y); + // Remove captured piece (if any) Piece toRemove = getPieceAt(x, y); if (toRemove != null) { pieces.remove(toRemove); } + + // Handle en passant capture (remove the captured pawn) + if (isEnPassant) { + int capturedPawnY = selectedPiece.isWhite() ? y + 1 : y - 1; + Piece capturedPawn = getPieceAt(x, capturedPawnY); + if (capturedPawn != null) { + pieces.remove(capturedPawn); + } + } + + // Track if this move is a double pawn move + boolean isDoublePawnMove = selectedPiece.getType() == PieceType.Pawn && + Math.abs(y - selectedPiece.getY()) == 2; // Move piece selectedPiece.moveTo(x, y); + + // Update en passant tracking + if (isDoublePawnMove) { + lastMovedPiecePosition = new Position(x, y); + lastMoveWasDoublePawnMove = true; + } else { + lastMovedPiecePosition = null; + lastMoveWasDoublePawnMove = false; + } // Advance turn turnNumber++; @@ -207,6 +233,31 @@ public class Board { } } + // Add this method to check if a move is an en passant capture: + private boolean isEnPassantCapture(Piece piece, int targetX, int targetY) { + if (piece.getType() != PieceType.Pawn) return false; + if (!lastMoveWasDoublePawnMove) return false; + if (lastMovedPiecePosition == null) return false; + + // Check if we're capturing diagonally to an empty square + if (getPieceAt(targetX, targetY) != null) return false; + + // Check if the target is diagonally adjacent + if (Math.abs(targetX - piece.getX()) != 1) return false; + if (Math.abs(targetY - piece.getY()) != 1) return false; + + // Check if there's an opponent pawn next to us that just moved two squares + int adjacentPawnY = piece.getY(); + Piece adjacentPawn = getPieceAt(targetX, adjacentPawnY); + + if (adjacentPawn == null) return false; + if (adjacentPawn.getType() != PieceType.Pawn) return false; + if (adjacentPawn.isWhite() == piece.isWhite()) return false; + + // Check if this adjacent pawn is the one that just moved two squares + return lastMovedPiecePosition.x == targetX && lastMovedPiecePosition.y == adjacentPawnY; + } + public boolean isSelected(int x, int y) { // Check if the selected coordinates match the given x and y if (selectedX != null && selectedY != null) { @@ -217,7 +268,7 @@ public class Board { /* saving-loading feature :*/ public String[] toFileRep() { - String[] fileRep = new String[height + 1]; + String[] fileRep = new String[height + 2]; String boardStr = toString(); @@ -233,6 +284,13 @@ public class Board { fileRep[height] = (isWhiteTurn ? "W" : "B") + "," + turnNumber; + // Save en passant state + String enPassantInfo = lastMoveWasDoublePawnMove ? "1" : "0"; + if (lastMovedPiecePosition != null) { + enPassantInfo += "," + lastMovedPiecePosition.x + "," + lastMovedPiecePosition.y; + } + fileRep[height + 1] = enPassantInfo; + return fileRep; } @@ -244,6 +302,8 @@ public class Board { if (array == null || array.length < 9) { this.turnNumber = 0; this.isWhiteTurn = true; + this.lastMoveWasDoublePawnMove = false; + this.lastMovedPiecePosition = null; populateBoard(); return; } @@ -291,6 +351,34 @@ public class Board { this.turnNumber = 0; this.isWhiteTurn = true; } + + // Load en passant state + if (array.length > height + 1) { + String enPassantInfo = array[height + 1]; + String[] enPassantData = enPassantInfo.split(","); + + if (enPassantData.length > 0) { + this.lastMoveWasDoublePawnMove = enPassantData[0].trim().equals("1"); + } else { + this.lastMoveWasDoublePawnMove = false; + } + + if (enPassantData.length >= 3) { + try { + int x = Integer.parseInt(enPassantData[1].trim()); + int y = Integer.parseInt(enPassantData[2].trim()); + this.lastMovedPiecePosition = new Position(x, y); + } catch (NumberFormatException e) { + this.lastMovedPiecePosition = null; + } + } else { + this.lastMovedPiecePosition = null; + } + } else { + this.lastMoveWasDoublePawnMove = false; + this.lastMovedPiecePosition = null; + } + } public boolean isHighlighted(int x, int y) { return highlightedPositions.contains(new Position(x, y)); @@ -320,6 +408,10 @@ public class Board { // Copy highlighted positions this.highlightedPositions = new HashSet<>(); this.highlightedPositions.addAll(board.highlightedPositions); + + // Copy en passant state + this.lastMovedPiecePosition = board.lastMovedPiecePosition; + this.lastMoveWasDoublePawnMove = board.lastMoveWasDoublePawnMove; } // Add these methods after userTouch or before isHighlighted @@ -388,11 +480,29 @@ public class Board { if (targetPiece != null && targetPiece.isWhite() != isWhite) { validMoves.add(new Position(newX, newY)); } + // En passant capture + else if (targetPiece == null && canCaptureEnPassant(x, y, newX, newY, isWhite)) { + validMoves.add(new Position(newX, newY)); } } } } + } + // Add this helper method for en passant validation: + private boolean canCaptureEnPassant(int fromX, int fromY, int toX, int toY, boolean isWhite) { + if (!lastMoveWasDoublePawnMove) return false; + if (lastMovedPiecePosition == null) return false; + + // Check if there's an opponent pawn adjacent to us + Piece adjacentPawn = getPieceAt(toX, fromY); + if (adjacentPawn == null) return false; + if (adjacentPawn.getType() != PieceType.Pawn) return false; + if (adjacentPawn.isWhite() == isWhite) return false; + + // Check if this is the pawn that just moved two squares + return lastMovedPiecePosition.x == toX && lastMovedPiecePosition.y == fromY; + } // Add valid rook moves private void addRookMoves(Set validMoves, int x, int y, boolean isWhite) { @@ -596,3 +706,5 @@ public class Board { } } + +