From 06ed1a0ffb9cba8380c06d63c27e4aa60ccab795 Mon Sep 17 00:00:00 2001 From: manon Date: Tue, 20 May 2025 11:50:29 +0200 Subject: [PATCH] Autoplayer can detect and use en passant and castling --- src/backend/AutoPlayer.java | 19 ++++++++++++++++++- src/backend/Game.java | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/backend/AutoPlayer.java b/src/backend/AutoPlayer.java index 0d43701..6f9c980 100644 --- a/src/backend/AutoPlayer.java +++ b/src/backend/AutoPlayer.java @@ -20,9 +20,26 @@ public class AutoPlayer { int[] moveCoords = moves.get(j); int toX = moveCoords[0]; int toY = moveCoords[1]; + + int fromX = piece.getX(); + int fromY = piece.getY(); + Piece captured = board.getPieceAt(toX, toY); - Move move = new Move(piece, piece.getX(), piece.getY(), toX, toY, captured); + // Detect en passant + if (piece.getType() == PieceType.Pawn && board.isEnPassant() && toX == board.getXCoordinatePawn() && + toY == (piece.isWhite() ? board.getYCoordinatePawn() - 1 : board.getYCoordinatePawn() + 1)) { + + captured = board.getPieceAt(board.getXCoordinatePawn(), board.getYCoordinatePawn()); + } + + // --- Castling detection --- + if (piece.getType() == PieceType.King && Math.abs(toX - fromX) == 2 && toY == fromY) { + System.out.println("AI considering castling move."); + // No need to set captured, just allow the move + } + + Move move = new Move(piece, piece.getX(), piece.getY(), toX, toY, captured); allMoves.add(move); } } diff --git a/src/backend/Game.java b/src/backend/Game.java index 7a29fae..903d1b9 100644 --- a/src/backend/Game.java +++ b/src/backend/Game.java @@ -10,7 +10,7 @@ public class Game extends Thread { private MyInterface mjf; private int COL_NUM = 8; private int LINE_NUM = 8; - private int loopDelay = 250; + private int loopDelay = 1000; boolean[] activationAIFlags; public Game(MyInterface mjfParam) {