UNPKG

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
"use strict"; 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;