Finished castling method. Basically checks if the catsling move is done
and on which side. Then moves the rook accordingly. Had to update user touch to recognize that when the king moves 2 then the casting dynamics defined in move has to activate
This commit is contained in:
parent
cafec37e4c
commit
d480cc6089
|
|
@ -65,6 +65,7 @@ public class Board {
|
|||
return turnNumber;
|
||||
}
|
||||
|
||||
|
||||
public boolean isTurnWhite() {
|
||||
return isWhiteTurn;
|
||||
}
|
||||
|
|
@ -147,35 +148,33 @@ public class Board {
|
|||
}
|
||||
|
||||
public void userTouch(int x, int y) {
|
||||
if (selectedX != -1 && x >= 0 && x < colNum && y >= 0 && y < lineNum && isHighlighted(x, y)) {
|
||||
Piece selectedPiece = getPieceAt(selectedX, selectedY);
|
||||
if (selectedPiece != null) {
|
||||
pieces.removeIf(p -> p.getX() == x && p.getY() == y);
|
||||
selectedPiece.setX(x);
|
||||
selectedPiece.setY(y);
|
||||
if (selectedX != -1
|
||||
&& isHighlighted(x, y)) {
|
||||
|
||||
selectedPiece.moveNumberAdd(); // added this to count the turn number
|
||||
Piece sel = getPieceAt(selectedX, selectedY);
|
||||
if (sel != null) {
|
||||
Move m = new Move(selectedX, selectedY, x, y);
|
||||
if (sel.getType() == PieceType.King
|
||||
&& Math.abs(x - selectedX) == 2) {
|
||||
m.castlingPutDown(x > selectedX);
|
||||
}
|
||||
|
||||
m.castlingTime(this);
|
||||
turnNumber++;
|
||||
isWhiteTurn = !isWhiteTurn;
|
||||
}
|
||||
|
||||
selectedX = -1;
|
||||
selectedY = -1;
|
||||
selectedX = selectedY = -1;
|
||||
highlight.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
Piece p = getPieceAt(x, y);
|
||||
if (p != null && p.isWhite() == isWhiteTurn) {
|
||||
selectedX = x;
|
||||
selectedY = y;
|
||||
|
||||
highlight.clear();
|
||||
highlight.addAll(findMovesAndCastlingMoves(p)); //the NEW UPDATED ONE for CASTLING
|
||||
highlight.addAll(findMovesAndCastlingMoves(p));
|
||||
} else {
|
||||
selectedX = -1;
|
||||
selectedY = -1;
|
||||
selectedX = selectedY = -1;
|
||||
highlight.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,4 +2,59 @@ package backend;
|
|||
|
||||
public class Move {
|
||||
|
||||
private final int fromX, fromY, toX, toY;
|
||||
private boolean isCastling = false;
|
||||
private boolean isKingSide = false;
|
||||
|
||||
public Move(int fx, int fy, int tx, int ty) {
|
||||
this.fromX = fx;
|
||||
this.fromY = fy;
|
||||
this.toX = tx;
|
||||
this.toY = ty;
|
||||
}
|
||||
|
||||
public void castlingPutDown(boolean kingSide) {
|
||||
this.isCastling = true;
|
||||
this.isKingSide = kingSide;
|
||||
}
|
||||
|
||||
|
||||
public void castlingTime(Board board) {
|
||||
if (!isCastling) {
|
||||
board.getPieces().removeIf(p -> p.getX() == toX && p.getY() == toY);
|
||||
Piece mover = board.getPieceAt(fromX, fromY);
|
||||
mover.setX(toX);
|
||||
mover.setY(toY);
|
||||
mover.moveNumberAdd();
|
||||
|
||||
}
|
||||
else {
|
||||
boolean white = board.isTurnWhite();
|
||||
|
||||
if (white && isKingSide) {
|
||||
Piece king = board.getPieceAt(4, 7);
|
||||
king.setX(6); king.setY(7); king.moveNumberAdd();
|
||||
Piece rook = board.getPieceAt(7, 7);
|
||||
rook.setX(5); rook.setY(7); rook.moveNumberAdd();
|
||||
|
||||
} else if (white && !isKingSide) {
|
||||
Piece king = board.getPieceAt(4, 7);
|
||||
king.setX(2); king.setY(7); king.moveNumberAdd();
|
||||
Piece rook = board.getPieceAt(0, 7);
|
||||
rook.setX(3); rook.setY(7); rook.moveNumberAdd();
|
||||
|
||||
} else if (!white && isKingSide) {
|
||||
Piece king = board.getPieceAt(4, 0);
|
||||
king.setX(6); king.setY(0); king.moveNumberAdd();
|
||||
Piece rook = board.getPieceAt(7, 0);
|
||||
rook.setX(5); rook.setY(0); rook.moveNumberAdd();
|
||||
|
||||
} else {
|
||||
Piece king = board.getPieceAt(4, 0);
|
||||
king.setX(2); king.setY(0); king.moveNumberAdd();
|
||||
Piece rook = board.getPieceAt(0, 0);
|
||||
rook.setX(3); rook.setY(0); rook.moveNumberAdd();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue