From 0c76ed6e04c27380a3d8d73610cb1f52010ee111 Mon Sep 17 00:00:00 2001 From: Bastien Druillette Date: Thu, 15 May 2025 23:32:58 +0200 Subject: [PATCH] Undo --- src/backend/Board.java | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/backend/Board.java b/src/backend/Board.java index 7e46b4d..04ee670 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -165,12 +165,14 @@ public class Board { board[x][y] == null; // Move piece + previousBoard = cloneBoard(board); board[x][y] = selectedPiece; board[selectedX][selectedY] = null; selectedPiece.setX(x); selectedPiece.setY(y); selectedPiece.setMoved(true); // ✅ Marque la pièce comme ayant bougé + // Déplacement de la tour si roque if (selectedPiece.getType() == PieceType.King && Math.abs(x - selectedX) == 2) { @@ -284,11 +286,35 @@ public class Board { } return false; } + + private Piece[][] previousBoard = null; + + private Piece[][] cloneBoard(Piece[][] original) { + Piece[][] copy = new Piece[width][height]; + for (int i = 0; i < width; i++) { + for (int j = 0; j < height; j++) { + if (original[i][j] != null) { + Piece p = original[i][j]; + copy[i][j] = new Piece(p.getX(), p.getY(), p.isWhite(), p.getType()); + copy[i][j].setMoved(p.hasMoved()); + } + } + } + return copy; + } public void undoLastMove() { - // TODO + if (previousBoard != null) { + board = cloneBoard(previousBoard); // Restore the board + previousBoard = null; // Clear saved state + hasSelectedPiece = false; // Deselect piece + highlightedSquares.clear(); // Remove highlights + turnWhite = !turnWhite; // Go back to previous player + turnNumber--; // Go back a turn + } } + public Board(Board board) { // TODO helloyo }