chlss
Version:
Open-Source Chess Engine in TypeScript.
97 lines (96 loc) • 4.54 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CastlingMoveGenerator = void 0;
const boardPosition_1 = require("./boardPosition");
const colour_1 = require("./colour");
const moveGenerator_1 = require("./moveGenerator");
const pieces_1 = __importDefault(require("./pieces"));
exports.CastlingMoveGenerator = {
generateCastlingMoves(board, colour, moveList) {
const castlingColour = this.getCastlingColourForColour(board.castling, colour);
this.tryAddQueenSideCastling(board, colour, castlingColour, moveList);
this.tryAddKingSideCastling(board, colour, castlingColour, moveList);
},
getCastlingColourForColour(castling, colour) {
return colour == colour_1.Colours.white ? castling.white : castling.black;
},
tryAddKingSideCastling(board, colour, castlingColour, moveList) {
if (!castlingColour.kingSide)
return;
if (colour == colour_1.Colours.white) {
if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 62, 61)))
return;
const enemyMoves = [];
moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null);
if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 60, 62, 61)))
return;
moveList.push({
from: 60,
to: 63,
piece: pieces_1.default.WhiteKing,
targetPiece: pieces_1.default.WhiteRook,
setEnPassant: null,
promotion: undefined,
isPromo: false
});
}
else if (colour == colour_1.Colours.black) {
if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 5, 6)))
return;
const enemyMoves = [];
moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null);
if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 5, 6, 4)))
return;
moveList.push({
from: 4,
to: 7,
piece: pieces_1.default.BlackKing,
targetPiece: pieces_1.default.BlackRook,
setEnPassant: null,
promotion: undefined,
isPromo: false
});
}
},
tryAddQueenSideCastling(board, colour, castlingColour, moveList) {
if (!castlingColour.queenSide)
return;
if (colour == colour_1.Colours.white) {
if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 59, 58, 57)))
return;
const enemyMoves = [];
moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null);
if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 59, 58, 60)))
return;
moveList.push({
from: 60,
to: 56,
piece: pieces_1.default.WhiteKing,
targetPiece: pieces_1.default.WhiteRook,
setEnPassant: null,
promotion: undefined,
isPromo: false
});
}
else if (colour == colour_1.Colours.black) {
if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 1, 2, 3)))
return;
const enemyMoves = [];
moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null);
if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 1, 2, 3)))
return;
moveList.push({
from: 4,
to: 0,
piece: pieces_1.default.BlackKing,
targetPiece: pieces_1.default.BlackRook,
setEnPassant: null,
promotion: undefined,
isPromo: false
});
}
}
};