This commit is contained in:
bensefia 2025-05-13 15:43:04 +02:00
parent acceabcc0b
commit fe7abc9b4a
1 changed files with 32 additions and 12 deletions

View File

@ -89,6 +89,7 @@ public class Board {
if (gameOver) return;
Piece clickedPiece = getPieceAt(x, y);
if (selectedX == null || selectedY == null) {
if (clickedPiece != null && clickedPiece.isWhite() == turnIsWhite) {
selectedX = x;
@ -98,31 +99,50 @@ public class Board {
} else {
Piece selectedPiece = getPieceAt(selectedX, selectedY);
if (selectedPiece != null && selectedPiece.isWhite() == turnIsWhite) {
Piece captured = getPieceAt(x, y);
pieces.removeIf(p -> p.getX() == x && p.getY() == y);
pieces.removeIf(p -> p.getX() == selectedX && p.getY() == selectedY);
Piece moved = new Piece(
// simulate move
Board simulation = new Board(this);
simulation.pieces.removeIf(p -> p.getX() == selectedX && p.getY() == selectedY);
simulation.pieces.removeIf(p -> p.getX() == x && p.getY() == y);
simulation.pieces.add(new Piece(
selectedPiece.isWhite(),
selectedPiece.getType(),
x,
y
);
pieces.add(moved);
));
// check if move is legal (king remains safe)
if (!simulation.isKingInCheck(turnIsWhite)) {
Piece captured = getPieceAt(x, y);
pieces.removeIf(p -> p.getX() == x && p.getY() == y);
pieces.removeIf(p -> p.getX() == selectedX && p.getY() == selectedY);
pieces.add(new Piece(
selectedPiece.isWhite(),
selectedPiece.getType(),
x,
y
));
Move move = new Move(selectedPiece, selectedX, selectedY, x, y, captured);
moveHistory.push(move);
turnNumber++;
turnIsWhite = !turnIsWhite;
// check for checkmate on the opponent
if (isCheckmate(!turnIsWhite)) {
gameOver = true;
}
}
}
// deselect in all cases
selectedX = null;
selectedY = null;
highlightedPositions.clear();
}
}
public void undoLastMove() {
if (!moveHistory.isEmpty()) {
Move lastMove = moveHistory.pop();