@chess-fu/chess-game
Version:
Chess game logic
94 lines • 3.3 kB
JavaScript
;
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