board
This commit is contained in:
parent
acceabcc0b
commit
fe7abc9b4a
|
|
@ -89,6 +89,7 @@ public class Board {
|
||||||
if (gameOver) return;
|
if (gameOver) return;
|
||||||
|
|
||||||
Piece clickedPiece = getPieceAt(x, y);
|
Piece clickedPiece = getPieceAt(x, y);
|
||||||
|
|
||||||
if (selectedX == null || selectedY == null) {
|
if (selectedX == null || selectedY == null) {
|
||||||
if (clickedPiece != null && clickedPiece.isWhite() == turnIsWhite) {
|
if (clickedPiece != null && clickedPiece.isWhite() == turnIsWhite) {
|
||||||
selectedX = x;
|
selectedX = x;
|
||||||
|
|
@ -98,31 +99,50 @@ public class Board {
|
||||||
} else {
|
} else {
|
||||||
Piece selectedPiece = getPieceAt(selectedX, selectedY);
|
Piece selectedPiece = getPieceAt(selectedX, selectedY);
|
||||||
if (selectedPiece != null && selectedPiece.isWhite() == turnIsWhite) {
|
if (selectedPiece != null && selectedPiece.isWhite() == turnIsWhite) {
|
||||||
Piece captured = getPieceAt(x, y);
|
|
||||||
pieces.removeIf(p -> p.getX() == x && p.getY() == y);
|
// simulate move
|
||||||
pieces.removeIf(p -> p.getX() == selectedX && p.getY() == selectedY);
|
Board simulation = new Board(this);
|
||||||
Piece moved = new Piece(
|
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.isWhite(),
|
||||||
selectedPiece.getType(),
|
selectedPiece.getType(),
|
||||||
x,
|
x,
|
||||||
y
|
y
|
||||||
);
|
));
|
||||||
pieces.add(moved);
|
|
||||||
Move move = new Move(selectedPiece, selectedX, selectedY, x, y, captured);
|
|
||||||
moveHistory.push(move);
|
|
||||||
turnNumber++;
|
|
||||||
turnIsWhite = !turnIsWhite;
|
|
||||||
|
|
||||||
if (isCheckmate(!turnIsWhite)) {
|
// check if move is legal (king remains safe)
|
||||||
gameOver = true;
|
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;
|
selectedX = null;
|
||||||
selectedY = null;
|
selectedY = null;
|
||||||
highlightedPositions.clear();
|
highlightedPositions.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void undoLastMove() {
|
public void undoLastMove() {
|
||||||
if (!moveHistory.isEmpty()) {
|
if (!moveHistory.isEmpty()) {
|
||||||
Move lastMove = moveHistory.pop();
|
Move lastMove = moveHistory.pop();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue