undolast move works unless we do a move, undo it, redo the same again,

and undo it once again, it will give an incorrect state of the board, i
try debugging it with hashmaps prints, the hasmaps updates correctly,
the arraylist is emptied before adding the new pieces, idk what doesnt
work, here is the code with the debugging prints
This commit is contained in:
hugomanipoud2 2025-05-23 12:32:37 +02:00
parent 48a3f7468d
commit 29935b84dc
2 changed files with 21 additions and 2 deletions

View File

@ -2,6 +2,8 @@ package backend;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; // for unddolastmove import java.util.HashMap; // for unddolastmove
import java.util.Map;
public class Board { public class Board {
private int column; // constructors for column and line private int column; // constructors for column and line
@ -268,21 +270,26 @@ public class Board {
boardHistory.put(turnNb, boardCopy); // put the turnNb as the key, and the arraylist data as value boardHistory.put(turnNb, boardCopy); // put the turnNb as the key, and the arraylist data as value
} }
// if you dont do the same move nor undo it 2 times in a row it works, even with castling ( but you're not allowed to castle again lol), but idk why it bugs
public void undoLastMove() { public void undoLastMove() {
if (turnNb > 1) { // only if turnnb is positive if (turnNb > 1) { // only if turnnb is positive
turnNb--;
ArrayList<Piece> previousState = boardHistory.get(turnNb - 1);// create a temporary arraylist ArrayList<Piece> previousState = boardHistory.get(turnNb - 1);// create a temporary arraylist
pieces.clear(); // removes all pieces from arraylist of pieces used pieces.clear(); // removes all pieces from arraylist of pieces used
pieces.addAll(previousState); // add all pieces from previous state of board to arraylist pieces.addAll(previousState); // add all pieces from previous state of board to arraylist
boardHistory.remove(turnNb); boardHistory.remove(turnNb);
turnNb--;
printBoardHistory();
}else if (turnNb == 1) { }else if (turnNb == 1) {
turnNb--; turnNb--;
pieces.clear(); pieces.clear();
boardHistory.clear(); boardHistory.clear();
populateBoard(); populateBoard();
printBoardHistory();
} }
} }
@ -295,5 +302,16 @@ public class Board {
//TODO //TODO
} }
public void printBoardHistory() {
System.out.println("Board History:");
for (Map.Entry<Integer, ArrayList<Piece>> entry : boardHistory.entrySet()) {
System.out.println("Turn " + entry.getKey() + ":");
for (Piece piece : entry.getValue()) {
System.out.println(piece); // Assuming Piece has a toString method
}
System.out.println(); // Add a newline for better readability
}
}
} }

View File

@ -39,6 +39,7 @@ public class Move {
board.setTurnNb(turnNb + 1); // adds + 1 to turn nb board.setTurnNb(turnNb + 1); // adds + 1 to turn nb
board.saveBoardState(); // after updating the pieces on the board and the turnNb, saves the current state of the board in a hashmap board.saveBoardState(); // after updating the pieces on the board and the turnNb, saves the current state of the board in a hashmap
System.out.println(board.toString()); // prints the current state of board System.out.println(board.toString()); // prints the current state of board
board.printBoardHistory();
} }
break; break;
} }