castling
This commit is contained in:
@@ -15,10 +15,10 @@ public class Bishop extends Piece {
|
|||||||
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||||
ArrayList<Position> positions = new ArrayList<Position>();
|
ArrayList<Position> positions = new ArrayList<Position>();
|
||||||
|
|
||||||
positions.addAll(slide(board, -1, -1));
|
positions.addAll(slide(board, -1, -1, 7));
|
||||||
positions.addAll(slide(board, 1, -1));
|
positions.addAll(slide(board, 1, -1, 7));
|
||||||
positions.addAll(slide(board, -1, 1));
|
positions.addAll(slide(board, -1, 1, 7));
|
||||||
positions.addAll(slide(board, 1, 1));
|
positions.addAll(slide(board, 1, 1, 7));
|
||||||
|
|
||||||
return positions;
|
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) {
|
public void draw(Graphics g) {
|
||||||
for (Piece[] row : board) {
|
for (Piece[] row : board) {
|
||||||
for (Piece p : row) {
|
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
|
// if selecting a blank square -- must have one of ours selected
|
||||||
else if (selected != null && selected.color.equals(turnColor) && legalMoves.contains(pos)) {
|
else if (selected != null && selected.color.equals(turnColor) && legalMoves.contains(pos)) {
|
||||||
|
if (selected instanceof King && Math.abs(pos.x - selected.pos.x) == 2) {
|
||||||
board.move(selected, pos);
|
board.castle((King) selected, pos.x > selected.pos.x);
|
||||||
|
} else {
|
||||||
|
board.move(selected, pos);
|
||||||
|
}
|
||||||
selected = null;
|
selected = null;
|
||||||
legalMoves = null;
|
legalMoves = null;
|
||||||
turnColor = turnColor.equals("White") ? "Black" : "White";
|
turnColor = turnColor.equals("White") ? "Black" : "White";
|
||||||
|
|||||||
24
King.java
24
King.java
@@ -30,6 +30,30 @@ public class King extends Piece {
|
|||||||
positions.add(test);
|
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;
|
return positions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ public abstract class Piece {
|
|||||||
return this.color.equals(p.color);
|
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<>();
|
ArrayList<Position> positions = new ArrayList<>();
|
||||||
int step = 1;
|
int step = 1;
|
||||||
while (true) {
|
while (step < maxSteps) {
|
||||||
Position test = new Position(pos.x + step * dx, pos.y + step * dy);
|
Position test = new Position(pos.x + step * dx, pos.y + step * dy);
|
||||||
if (!Board.inBounds(test)) break;
|
if (!Board.inBounds(test)) break;
|
||||||
if (board.isOpen(test)) {
|
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) {
|
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||||
ArrayList<Position> positions = new ArrayList<Position>();
|
ArrayList<Position> positions = new ArrayList<Position>();
|
||||||
|
|
||||||
positions.addAll(slide(board, -1, -1));
|
positions.addAll(slide(board, -1, -1, 7));
|
||||||
positions.addAll(slide(board, 1, -1));
|
positions.addAll(slide(board, 1, -1, 7));
|
||||||
positions.addAll(slide(board, -1, 1));
|
positions.addAll(slide(board, -1, 1, 7));
|
||||||
positions.addAll(slide(board, 1, 1));
|
positions.addAll(slide(board, 1, 1, 7));
|
||||||
positions.addAll(slide(board, 1, 0));
|
positions.addAll(slide(board, 1, 0, 7));
|
||||||
positions.addAll(slide(board, -1, 0));
|
positions.addAll(slide(board, -1, 0, 7));
|
||||||
positions.addAll(slide(board, 0, 1));
|
positions.addAll(slide(board, 0, 1, 7));
|
||||||
positions.addAll(slide(board, 0, -1));
|
positions.addAll(slide(board, 0, -1, 7));
|
||||||
|
|
||||||
return positions;
|
return positions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ public class Rook extends Piece {
|
|||||||
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
public ArrayList<Position> getPseudoLegalMoves(Board board) {
|
||||||
ArrayList<Position> positions = new ArrayList<Position>();
|
ArrayList<Position> positions = new ArrayList<Position>();
|
||||||
|
|
||||||
positions.addAll(slide(board, 1, 0));
|
positions.addAll(slide(board, 1, 0, 7));
|
||||||
positions.addAll(slide(board, -1, 0));
|
positions.addAll(slide(board, -1, 0, 7));
|
||||||
positions.addAll(slide(board, 0, 1));
|
positions.addAll(slide(board, 0, 1, 7));
|
||||||
positions.addAll(slide(board, 0, -1));
|
positions.addAll(slide(board, 0, -1, 7));
|
||||||
|
|
||||||
return positions;
|
return positions;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user