Ca fait le Undo

This commit is contained in:
Gaspard VANCOMPERNOLLE 2025-05-07 14:38:43 +02:00
parent a9a8d42651
commit 7a49ade79c
2 changed files with 53 additions and 8 deletions

View File

@ -11,6 +11,8 @@ public class Board {
private int selectedY = -1;
private ArrayList<Piece> pieces = new ArrayList<>();
private ArrayList<int[]> highlightedSquares = new ArrayList<>();
private ArrayList<Move> 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) {

View File

@ -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<int[]> getPossibleMoves(Board board, Piece piece) {
ArrayList<int[]> moves = new ArrayList<>();