UNPKG

@chess-fu/chess-game

Version:
94 lines 3.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var constants_1 = require("./constants"); var lowerA = 'a'; var lowerZ = 'z'; var upperA = 'A'; var upperZ = 'Z'; var lowerACode = 'a'.charCodeAt(0); var NUMBER = 'number'; function isPieceColor(boardPiece, color) { return ((color === constants_1.WHITE && boardPiece >= upperA && boardPiece <= upperZ) || (color !== constants_1.WHITE && boardPiece >= lowerA && boardPiece <= lowerZ)); } exports.isPieceColor = isPieceColor; function indexToSquare(index) { if (typeof index !== NUMBER || index < 0) return constants_1.NONE; var file = Math.floor(index / constants_1.BOARD_WIDTH); var rank = index - (file * constants_1.BOARD_WIDTH); return String.fromCharCode(lowerACode + rank) + (constants_1.BOARD_HEIGHT - file).toString(); } exports.indexToSquare = indexToSquare; function indexToOffset(index) { var y = Math.floor(index / constants_1.BOARD_WIDTH); var x = index - (y * constants_1.BOARD_WIDTH); return { x: x, y: y }; } exports.indexToOffset = indexToOffset; function squareColor(index) { var y = Math.floor(index / constants_1.BOARD_WIDTH); var x = index - (y * constants_1.BOARD_WIDTH); return (y + x) % 2 === 0 ? constants_1.BLACK : constants_1.WHITE; } exports.squareColor = squareColor; function offsetToIndex(offset) { return (offset.y * constants_1.BOARD_WIDTH) + offset.x; } exports.offsetToIndex = offsetToIndex; function offsetValid(offset) { return offset.x >= 0 && offset.y >= 0 && offset.x < constants_1.BOARD_WIDTH && offset.y < constants_1.BOARD_HEIGHT; } exports.offsetValid = offsetValid; function addOffsets(a, b) { return { x: a.x + b.x, y: a.y + b.y }; } exports.addOffsets = addOffsets; function deltaOffsets(a, b) { return { x: Math.abs(a.x - b.x), y: Math.abs(a.y - b.y) }; } exports.deltaOffsets = deltaOffsets; function buildSAN(move, conflicts) { var result = move.piece !== constants_1.PAWN ? [move.piece.toUpperCase()] : []; if (conflicts && conflicts.length > 1) { var counts = { ranks: {}, files: {} }; for (var _i = 0, conflicts_1 = conflicts; _i < conflicts_1.length; _i++) { var from = conflicts_1[_i]; counts.ranks[from[1]] = (counts.ranks[from[1]] || 0) + 1; counts.files[from[0]] = (counts.files[from[0]] || 0) + 1; } if (Object.keys(counts.ranks).length === conflicts.length) { result.push(move.from[1]); } else if (Object.keys(counts.files).length === conflicts.length) { result.push(move.from[0]); } else { result.push(move.from); } } if (move.captured) { if (move.piece === constants_1.PAWN && result.length === 0) { result.push(move.from[0]); } result.push(constants_1.SAN_CAPTURE); } if (move.castle) { result[0] = move.castle < move.from ? 'O-O-O' : 'O-O'; } else { result.push(move.to); if (move.promotion) { result.push("=" + move.promotion.toUpperCase()); } } if (move.check) { result.push(move.check); } return result.join(''); } exports.buildSAN = buildSAN; //# sourceMappingURL=chessUtils.js.map