UNPKG

tsgammon-core

Version:

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

47 lines (46 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makePoint = void 0; const BoardStateNode_1 = require("../BoardStateNode"); const findMove_1 = require("./findMove"); /** * 指定された局面について、指定のポイントにブロックを築けるかどうかを返す * * @param node 対象となる局面 * @param pos ブロックを作ろうとしているポイント * @returns ポイントを作った後の局面、またはNOMOVE */ function makePoint(node, pos) { const dices = node.dices.filter((d) => !d.used); if (dices.length < 2) { return BoardStateNode_1.NO_MOVE; } const { major, minor } = dices[0].pip > dices[1].pip ? { major: dices[0].pip, minor: dices[1].pip } : { major: dices[1].pip, minor: dices[0].pip }; if (pos < major) { return BoardStateNode_1.NO_MOVE; } // 未使用のダイス2つで指定されたポイントが作れるなら、それを返す const nodeMakePoint = (0, BoardStateNode_1.wrap)(node) .apply(moveFinder(pos - major)) .apply(moveFinder(pos - minor)).unwrap; if (nodeMakePoint.hasValue) { return nodeMakePoint; } // ゾロ目の場合は、中間地点に作ってからそれを動かせるかを調べる if (dices.length === 4 && major === minor) { return (0, BoardStateNode_1.wrap)(node) .apply(pointMaker(pos - major)) .apply(pointMaker(pos)).unwrap; } return BoardStateNode_1.NO_MOVE; } exports.makePoint = makePoint; // apply(func)の形で記述するためのユーティリティ function moveFinder(pos) { return (node) => (0, findMove_1.findMove)(node, pos, false); } function pointMaker(pos) { return (node) => makePoint(node, pos); }