castling
This commit is contained in:
@@ -15,10 +15,10 @@ public class Bishop extends Piece {
|
||||
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||
ArrayList<Position> positions = new ArrayList<Position>();
|
||||
|
||||
positions.addAll(slide(board, -1, -1));
|
||||
positions.addAll(slide(board, 1, -1));
|
||||
positions.addAll(slide(board, -1, 1));
|
||||
positions.addAll(slide(board, 1, 1));
|
||||
positions.addAll(slide(board, -1, -1, 7));
|
||||
positions.addAll(slide(board, 1, -1, 7));
|
||||
positions.addAll(slide(board, -1, 1, 7));
|
||||
positions.addAll(slide(board, 1, 1, 7));
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
11
Board.java
11
Board.java
@@ -48,6 +48,17 @@ public class Board {
|
||||
}
|
||||
}
|
||||
|
||||
public void castle(King king, boolean kingSide) {
|
||||
int row = king.pos.y;
|
||||
if (kingSide) {
|
||||
move(king, new Position(6, row));
|
||||
move(board[7][row], new Position(5, row));
|
||||
} else {
|
||||
move(king, new Position(2, row));
|
||||
move(board[0][row], new Position(3, row));
|
||||
}
|
||||
}
|
||||
|
||||
public void draw(Graphics g) {
|
||||
for (Piece[] row : board) {
|
||||
for (Piece p : row) {
|
||||
|
||||
@@ -103,8 +103,11 @@ public class Chess extends JPanel implements ActionListener, MouseListener {
|
||||
}
|
||||
// if selecting a blank square -- must have one of ours selected
|
||||
else if (selected != null && selected.color.equals(turnColor) && legalMoves.contains(pos)) {
|
||||
|
||||
if (selected instanceof King && Math.abs(pos.x - selected.pos.x) == 2) {
|
||||
board.castle((King) selected, pos.x > selected.pos.x);
|
||||
} else {
|
||||
board.move(selected, pos);
|
||||
}
|
||||
selected = null;
|
||||
legalMoves = null;
|
||||
turnColor = turnColor.equals("White") ? "Black" : "White";
|
||||
|
||||
24
King.java
24
King.java
@@ -30,6 +30,30 @@ public class King extends Piece {
|
||||
positions.add(test);
|
||||
}
|
||||
}
|
||||
int colorPos = this.color.equals("White") ? 7 : 0;
|
||||
boolean leftOpen = true;
|
||||
boolean rightOpen = true;
|
||||
if (!this.hasMoved && !inCheck(board,pos)){
|
||||
if(board.getPiece(7,colorPos) instanceof Rook && !Rook.class.cast(board.getPiece(7,colorPos)).hasMoved){
|
||||
ArrayList<Position> right = this.slide(board,1,0,2);
|
||||
|
||||
for (Position p : new ArrayList<>(right)){
|
||||
if (inCheck(board,p)){
|
||||
rightOpen = false;
|
||||
}
|
||||
}
|
||||
if (rightOpen) {positions.add(new Position(pos.x+2,pos.y));}
|
||||
}
|
||||
if (board.getPiece(0,colorPos) instanceof Rook && !Rook.class.cast(board.getPiece(0,colorPos)).hasMoved){
|
||||
|
||||
ArrayList<Position> left = this.slide(board,-1,0,2);
|
||||
for (Position p : new ArrayList<>(left)){
|
||||
if (inCheck(board,p)){
|
||||
leftOpen = false;
|
||||
}
|
||||
}
|
||||
if (leftOpen) positions.add(new Position(pos.x - 2, pos.y));
|
||||
}}
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ public abstract class Piece {
|
||||
return this.color.equals(p.color);
|
||||
}
|
||||
|
||||
public ArrayList<Position> slide(Board board, int dx, int dy) {
|
||||
public ArrayList<Position> slide(Board board, int dx, int dy, int maxSteps) {
|
||||
ArrayList<Position> positions = new ArrayList<>();
|
||||
int step = 1;
|
||||
while (true) {
|
||||
while (step < maxSteps) {
|
||||
Position test = new Position(pos.x + step * dx, pos.y + step * dy);
|
||||
if (!Board.inBounds(test)) break;
|
||||
if (board.isOpen(test)) {
|
||||
|
||||
16
Queen.java
16
Queen.java
@@ -15,14 +15,14 @@ public class Queen extends Piece {
|
||||
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||
ArrayList<Position> positions = new ArrayList<Position>();
|
||||
|
||||
positions.addAll(slide(board, -1, -1));
|
||||
positions.addAll(slide(board, 1, -1));
|
||||
positions.addAll(slide(board, -1, 1));
|
||||
positions.addAll(slide(board, 1, 1));
|
||||
positions.addAll(slide(board, 1, 0));
|
||||
positions.addAll(slide(board, -1, 0));
|
||||
positions.addAll(slide(board, 0, 1));
|
||||
positions.addAll(slide(board, 0, -1));
|
||||
positions.addAll(slide(board, -1, -1, 7));
|
||||
positions.addAll(slide(board, 1, -1, 7));
|
||||
positions.addAll(slide(board, -1, 1, 7));
|
||||
positions.addAll(slide(board, 1, 1, 7));
|
||||
positions.addAll(slide(board, 1, 0, 7));
|
||||
positions.addAll(slide(board, -1, 0, 7));
|
||||
positions.addAll(slide(board, 0, 1, 7));
|
||||
positions.addAll(slide(board, 0, -1, 7));
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ public class Rook extends Piece {
|
||||
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||
ArrayList<Position> positions = new ArrayList<Position>();
|
||||
|
||||
positions.addAll(slide(board, 1, 0));
|
||||
positions.addAll(slide(board, -1, 0));
|
||||
positions.addAll(slide(board, 0, 1));
|
||||
positions.addAll(slide(board, 0, -1));
|
||||
positions.addAll(slide(board, 1, 0, 7));
|
||||
positions.addAll(slide(board, -1, 0, 7));
|
||||
positions.addAll(slide(board, 0, 1, 7));
|
||||
positions.addAll(slide(board, 0, -1, 7));
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user