UNPKG

tsgammon-core

Version:

A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui

55 lines (54 loc) 2.32 kB
"use strict"; 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;