diff --git a/src/backend/chessRulesCheck.java b/src/backend/chessRulesCheck.java new file mode 100644 index 0000000..54470d1 --- /dev/null +++ b/src/backend/chessRulesCheck.java @@ -0,0 +1,73 @@ +package backend; + +public class chessRulesCheck { + + //The basic rules needed for CASTLING!!!!!!!!! useful for the rest of course ;) + + + public boolean isInCheck (Board board, boolean isWhite){ //is under attack + is king + + int kx = -1, ky = -1; + + for (Piece p : board.getPieces()) { + if (p.getType() == PieceType.King && p.isWhite() == isWhite) { + kx = p.getX(); + ky = p.getY(); + break; + } + } + if (kx < 0) + return false; + + for (Piece p : board.getPieces()) { + if (p.isWhite() == isWhite) continue; + for (Board.Position pos : board.findMoves(p)) { + if (pos.x == kx && pos.y == ky) + return true; + } + } + return false; + + + } + + public boolean getsChecked (Board board, int x, int y, boolean byWhite){ + for (Piece p : board.getPieces()) { + if (p.isWhite() != byWhite) continue; + for (Board.Position pos : board.findMoves(p)) { + if (pos.x == x && pos.y == y) + return true; + } + } + return false; + } + + public boolean nothingInBetween (Board board, boolean isWhite, boolean kingSide) { + int rank = isWhite ? 7 : 0; + int kx = 4; + int rx = kingSide ? 7 : 0; + int start = Math.min(kx, rx) + 1; + int end = Math.max(kx, rx) - 1; + for (int x = start; x <= end; x++) { + if (board.getPieceAt(x, rank) != null) + return false; + } + return true; + + } + + public boolean hasMoved (Board board, boolean isWhite, boolean kingSide) { + Piece king = null, rook = null; + for (Piece p : board.getPieces()) { + if (p.getType() == PieceType.King && p.isWhite() == isWhite) king = p; + if (p.getType() == PieceType.Rook && p.isWhite() == isWhite) { + if (kingSide && p.getX() == 7) rook = p; + if (!kingSide && p.getX() == 0) rook = p; + } + } + if (king == null || rook == null) return true; + return king.hasMoved() || rook.hasMoved(); + + } + +} diff --git a/test b/test new file mode 100644 index 0000000..e69de29