tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
91 lines (90 loc) • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeMoveAbsoluteAsRed = exports.makeMoveAbsoluteAsWhite = exports.makeMovesAbsoluteAsRed = exports.makeMovesAbsoluteAsWhite = exports.absoluteMovesRed = exports.absoluteMovesWhite = void 0;
/**
* 相対表記のムーブの配列を、白の手番のムーブとして絶対表記のムーブの配列に変換する
* @param moves 相対表記のムーブの配列
* @param invertPos 座標変換関数
* @returns
*/
function absoluteMovesWhite(moves, invertPos) {
return makeMovesAbsoluteAsWhite(moves.map((move) => {
var _a;
return (Object.assign(Object.assign({}, move), { isHit: (_a = move.isHit) !== null && _a !== void 0 ? _a : false, pip: move.to - move.from }));
}, invertPos));
}
exports.absoluteMovesWhite = absoluteMovesWhite;
/**
* 相対表記のムーブの配列を、赤の手番のムーブとして絶対表記のムーブの配列に変換する
* @param moves 相対表記のムーブの配列
* @param invertPos 座標変換関数
* @returns
*/
function absoluteMovesRed(moves, invertPos) {
return makeMovesAbsoluteAsRed(moves.map((move) => {
var _a;
return (Object.assign(Object.assign({}, move), { isHit: (_a = move.isHit) !== null && _a !== void 0 ? _a : false, pip: move.to - move.from }));
}, invertPos));
}
exports.absoluteMovesRed = absoluteMovesRed;
const invertPosDefault = (pos) => 25 - pos;
/**
* 最小限の項目からなる相対表記のムーブの配列を、白の手番のムーブとして絶対表記のムーブの配列に変換する
* @param moves 相対表記のムーブの配列
* @param invertPos 座標変換関数
* @returns
*/
function makeMovesAbsoluteAsWhite(moves, invertPos) {
return moves.map((move) => makeMoveAbsoluteAsWhite(move, invertPos));
}
exports.makeMovesAbsoluteAsWhite = makeMovesAbsoluteAsWhite;
/**
* 最小限の項目からなる相対表記のムーブの配列を、赤の手番のムーブとして絶対表記のムーブの配列に変換する
* @param moves 相対表記のムーブの配列
* @param invertPos 座標変換関数
* @returns
*/
function makeMovesAbsoluteAsRed(moves, invertPos) {
return moves.map((move) => makeMoveAbsoluteAsRed(move, invertPos));
}
exports.makeMovesAbsoluteAsRed = makeMovesAbsoluteAsRed;
/**
* 最小限の項目からなる相対表記のムーブを、白の手番のムーブとして絶対表記のムーブに変換する
* @param moves 相対表記のムーブ
* @param invertPos 座標変換関数
* @returns
*/
function makeMoveAbsoluteAsWhite(move, invertPos = invertPosDefault) {
return makeMoveAbsolute(move, invertPos, (n) => n);
}
exports.makeMoveAbsoluteAsWhite = makeMoveAbsoluteAsWhite;
/**
* 最小限の項目からなる相対表記のムーブを、赤の手番のムーブとして絶対表記のムーブに変換する
* @param moves 相対表記のムーブ
* @param invertPos 座標変換関数
* @returns
*/
function makeMoveAbsoluteAsRed(move, invertPos = invertPosDefault) {
return makeMoveAbsolute(move, invertPos, invertPos);
}
exports.makeMoveAbsoluteAsRed = makeMoveAbsoluteAsRed;
function makeMoveAbsolute(move, invertPos, makeAbsPos) {
const fromDec = invertPos(move.from);
const toDec = invertPos(move.to);
const fromAbs = makeAbsPos(move.from);
const toAbs = makeAbsPos(move.to);
return {
fromAbs: fromAbs,
toAbs: toAbs,
fromAbsInv: invertPos(fromAbs),
toAbsInv: invertPos(toAbs),
fromAsc: move.from,
toAsc: move.to,
fromDec: fromDec,
toDec: toDec,
pip: move.pip,
isBearOff: toDec <= 0,
isReenter: move.from === 0,
isHit: move.isHit,
};
}