package project.chess; import java.awt.*; import java.util.ArrayList; import static project.ui.Display.loadImage; public class King extends ChessPiece { private final Image whiteKing = loadImage("./resources/chess_piece_2_black_king.png"); private final Image blackKing = loadImage("./resources/chess_piece_2_white_king.png"); public King(Board b, boolean isWhite, int x, int y) { super(b,isWhite,x,y); } public Image getImage(){ if (isWhite) return whiteKing; return blackKing; } @Override public ArrayList getMoves() { ArrayList moves = new ArrayList(); moves.addAll(super.getCardinalMoves(1)); moves.addAll(super.getDiagonalMoves(1)); if (isFirstMove){ ChessPiece rook = null; // castling if (isWhite){ if ((rook = b.get(0, 0)) != null && checkIfRookValid(rook)) moves.add(new Move(2, 0, Move.SpecialConditions.leftCastle)); if ((rook = b.get(b.size() - 1, 0)) != null && checkIfRookValid(rook)) moves.add(new Move(b.size() - 2, 0, Move.SpecialConditions.rightCastle)); } else { if ((rook = b.get(0, b.size()-1)) != null && checkIfRookValid(rook)) moves.add(new Move(2, b.size()-1, Move.SpecialConditions.leftCastle)); if ((rook = b.get(b.size() - 1, b.size()-1)) != null && checkIfRookValid(rook)) moves.add(new Move(b.size() - 2, b.size()-1, Move.SpecialConditions.rightCastle)); } } return moves; } @Override public void applySpecialMove(Move moveWithSpecial){ Move.SpecialConditions specialCondition; specialCondition = moveWithSpecial.getSpecialCondition(); if(specialCondition == Move.SpecialConditions.leftCastle) castleLeft(); else if (specialCondition == Move.SpecialConditions.rightCastle) castleRight(); } private void castleRight(){ // casting has to move the rook on the right size of the king from white's perspective if (this.isWhite) b.set(b.size()-3, 0, b.get(b.size()-1, 0)); else b.set(b.size()-3, b.size()-1, b.get(b.size()-1, b.size()-1)); } private boolean checkIfRookValid(ChessPiece piece){ return piece.isFirstMove() && piece instanceof Rook; } private void castleLeft(){ // casting has to move the rook on the left size of the king from white's perspective if (this.isWhite) b.set(3, 0, b.get(0, 0)); else b.set(3, b.size()-1, b.get(0, b.size()-1)); } public King clone () { return new King(this.b,this.isWhite,this.x,this.y); } }