diff --git a/src/backend/Board.java b/src/backend/Board.java index 01ce7dc..b9f3e07 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -11,6 +11,8 @@ public class Board { private int selectedY = -1; private ArrayList pieces = new ArrayList<>(); private ArrayList highlightedSquares = new ArrayList<>(); + private ArrayList moveHistory = new ArrayList<>(); + @@ -130,17 +132,17 @@ public class Board { } if (valid) { - // Capture éventuelle Piece destPiece = getPieceAt(x, y); - if (destPiece != null) { - pieces.remove(destPiece); - } - // Déplacement (création d'une nouvelle pièce) + // Enregistrer le coup dans l'historique + Move move = new Move(selectedPiece, selectedX, selectedY, x, y, destPiece); + moveHistory.add(move); + + // Appliquer le déplacement pieces.remove(selectedPiece); + if (destPiece != null) pieces.remove(destPiece); pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y)); - // Fin du tour turnNumber++; } @@ -221,8 +223,30 @@ public class Board { public void undoLastMove() { - //TODO - + if (moveHistory.isEmpty()) return; + + Move last = moveHistory.remove(moveHistory.size() - 1); + + // Supprimer la pièce déplacée + Piece current = getPieceAt(last.getToX(), last.getToY()); + if (current != null) { + pieces.remove(current); + } + + // Restaurer la pièce déplacée + pieces.add(new Piece( + last.getMovedPiece().getType(), + last.getMovedPiece().isWhite(), + last.getFromX(), last.getFromY() + )); + + // Réinsérer la pièce capturée si besoin + if (last.getCapturedPiece() != null) { + Piece c = last.getCapturedPiece(); + pieces.add(new Piece(c.getType(), c.isWhite(), c.getX(), c.getY())); + } + + turnNumber--; } public Board(Board board) { diff --git a/src/backend/Move.java b/src/backend/Move.java index dfff437..e46bd46 100644 --- a/src/backend/Move.java +++ b/src/backend/Move.java @@ -3,6 +3,27 @@ package backend; import java.util.ArrayList; public class Move { + private Piece movedPiece; + private int fromX, fromY; + private int toX, toY; + private Piece capturedPiece; + + public Move(Piece movedPiece, int fromX, int fromY, int toX, int toY, Piece capturedPiece) { + this.movedPiece = movedPiece; + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + this.capturedPiece = capturedPiece; + } + + public Piece getMovedPiece() { return movedPiece; } + public int getFromX() { return fromX; } + public int getFromY() { return fromY; } + public int getToX() { return toX; } + public int getToY() { return toY; } + public Piece getCapturedPiece() { return capturedPiece; } + public static ArrayList getPossibleMoves(Board board, Piece piece) { ArrayList moves = new ArrayList<>();