chess-legal-moves
Version:
Analyses a given chess game position in Fen notation to return legal moves and provides the next game position after a given move
56 lines (55 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPieceCategory = exports.generateSlidingPieceScope = void 0;
var occupiedBoardRayAttacks_1 = require("../rayAttacks/occupiedBoardRayAttacks");
function generateSlidingPieceScope(board, pieceName, hasToPlay) {
// @TODO maybe not very performant...
var piecePositions = board[getPieceCategory(pieceName, hasToPlay)].extractBits();
var pieceScope = piecePositions.map(function (position) {
var northAttacks = (0, occupiedBoardRayAttacks_1.getPositiveRayAttacks)(board.allPieces, 'no', position);
var eastAttacks = (0, occupiedBoardRayAttacks_1.getPositiveRayAttacks)(board.allPieces, 'ea', position);
var westAttacks = (0, occupiedBoardRayAttacks_1.getNegativeRayAttacks)(board.allPieces, 'we', position);
var southAttacks = (0, occupiedBoardRayAttacks_1.getNegativeRayAttacks)(board.allPieces, 'so', position);
var northEastAttacks = (0, occupiedBoardRayAttacks_1.getPositiveRayAttacks)(board.allPieces, 'noEa', position);
var northWestAttacks = (0, occupiedBoardRayAttacks_1.getPositiveRayAttacks)(board.allPieces, 'noWe', position);
var southEastAttacks = (0, occupiedBoardRayAttacks_1.getNegativeRayAttacks)(board.allPieces, 'soEa', position);
var southWestAttacks = (0, occupiedBoardRayAttacks_1.getNegativeRayAttacks)(board.allPieces, 'soWe', position);
var bishopAttacks = northEastAttacks
.or(northWestAttacks)
.or(southEastAttacks)
.or(southWestAttacks);
var rookAttacks = northAttacks
.or(eastAttacks)
.or(westAttacks)
.or(southAttacks);
var queenAttacks = bishopAttacks.or(rookAttacks);
var attacks;
if (pieceName === 'queen')
attacks = queenAttacks;
if (pieceName === 'bishop')
attacks = bishopAttacks;
if (pieceName === 'rook')
attacks = rookAttacks;
return {
position: position,
attacks: attacks,
};
});
return pieceScope;
}
exports.generateSlidingPieceScope = generateSlidingPieceScope;
function getPieceCategory(pieceName, hasToPlay) {
if (pieceName === 'rook' && hasToPlay === 'w')
return 'whiteRooks';
if (pieceName === 'rook' && hasToPlay === 'b')
return 'blackRooks';
if (pieceName === 'bishop' && hasToPlay === 'w')
return 'whiteBishops';
if (pieceName === 'bishop' && hasToPlay === 'b')
return 'blackBishops';
if (pieceName === 'queen' && hasToPlay === 'w')
return 'whiteQueens';
if (pieceName === 'queen' && hasToPlay === 'b')
return 'blackQueens';
}
exports.getPieceCategory = getPieceCategory;