This commit is contained in:
CT
2026-05-08 13:53:54 -05:00
parent 7a1844c06a
commit a0f424fada
7 changed files with 58 additions and 20 deletions

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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";

View File

@@ -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;
}

View File

@@ -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)) {

View File

@@ -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;
}

View File

@@ -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;
}