tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
55 lines (54 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.leaveNodeBuilder = exports.buildNodeForEoG = void 0;
const BoardStateNode_1 = require("../BoardStateNode");
// 終局を表すノードを構築する
function buildNodeForEoG(board, usedDices, lastMoves, mark) {
return [
{
hasValue: true,
dices: usedDices,
board,
majorFirst: () => BoardStateNode_1.NO_MOVE,
minorFirst: () => BoardStateNode_1.NO_MOVE,
lastMoves: () => lastMoves,
isRedundant: false,
isCommitable: true,
},
mark,
];
}
exports.buildNodeForEoG = buildNodeForEoG;
/**
* 末端、すなわちダイスを全て使った状態のノードを構築する関数を返す。
*
* 各引数は、末端ノードの親についての情報を渡す。
* @param usedDice すでに使用済みのダイス
* @param pip 親ノードの局面から末端ノードの局面への遷移で使用する目
* @param addLastMoves 親ノードの局面に至るまでにすでに適用済みの手と、最後の手をあわせて配列を返す関数
* @param isRedundantFunc 最終局面が冗長かどうかを判定する関数
*
* @returns {@link applyDicePipToPoints()}が使用する、最後の局面と、そこに至る最後の手を受け取り、末端ノードを返す関数。
*/
function leaveNodeBuilder(usedDice, pip, addLastMoves, isRedundantFunc = () => false) {
const dicesUsedUp = usedDice.concat({ pip, used: true });
return (boardAfter, move) => {
// 最後のダイス、lastDiceを適用した局面を表すノード
const lastMoves = addLastMoves(move);
const isRedundant = isRedundantFunc(move);
return [
{
hasValue: true,
dices: dicesUsedUp,
board: boardAfter,
majorFirst: () => BoardStateNode_1.NO_MOVE,
minorFirst: () => BoardStateNode_1.NO_MOVE,
lastMoves: () => lastMoves,
isRedundant: isRedundant,
isCommitable: true,
},
0 /*最後のダイスが適用できたので、未使用のダイスは0*/,
];
};
}
exports.leaveNodeBuilder = leaveNodeBuilder;