From a9a8d426515da27b8a9d080c2bc8f2edcd9c57cb Mon Sep 17 00:00:00 2001 From: thibaud Date: Wed, 7 May 2025 14:21:54 +0200 Subject: [PATCH] ok --- src/backend/Move.java | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/backend/Move.java b/src/backend/Move.java index ef6c9ef..dfff437 100644 --- a/src/backend/Move.java +++ b/src/backend/Move.java @@ -10,23 +10,31 @@ public class Move { int y = piece.getY(); switch (piece.getType()) { - case Pawn: - int dir = piece.isWhite() ? -1 : 1; - int ny = y + dir; - if (isInsideBoard(board, x, ny) && board.getPieceAt(x, ny) == null) { - moves.add(new int[]{x, ny}); - } - // Capture diagonale - for (int dx : new int[]{-1, 1}) { - int cx = x + dx; - if (isInsideBoard(board, cx, ny)) { - Piece target = board.getPieceAt(cx, ny); - if (target != null && target.isWhite() != piece.isWhite()) { - moves.add(new int[]{cx, ny}); - } + case Pawn: + int dir = piece.isWhite() ? -1 : 1; + int ny = y + dir; + + // Single forward move + if (isInsideBoard(board, x, ny) && board.getPieceAt(x, ny) == null) { + moves.add(new int[]{x, ny}); + + // Double forward move from initial position + int startRow = piece.isWhite() ? 6 : 1; + int ny2 = y + 2 * dir; + if (y == startRow && isInsideBoard(board, x, ny2) && board.getPieceAt(x, ny2) == null) { + moves.add(new int[]{x, ny2}); + } + } + for (int dx : new int[]{-1, 1}) { + int cx = x + dx; + if (isInsideBoard(board, cx, ny)) { + Piece target = board.getPieceAt(cx, ny); + if (target != null && target.isWhite() != piece.isWhite()) { + moves.add(new int[]{cx, ny}); } } - break; + } + break; case Rook: addLinearMoves(board, piece, moves, new int[][]{{1,0},{-1,0},{0,1},{0,-1}});