UNPKG

tsgammon-core

Version:

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

49 lines (48 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.redViewAbsoluteBoard = exports.whiteViewAbsoluteBoard = exports.initAbsoluteBoard = void 0; const BoardState_1 = require("./BoardState"); const GameConf_1 = require("./GameConf"); /** * 絶対表記の盤面状態を生成する * @param pieces 駒の配置を表す配列 * @param bornOffs すでに上げた駒の数の配列:bornOffs[0]は赤、[1]は白(省略時はいずれも0) * @returns */ function initAbsoluteBoard(pieces = GameConf_1.standardConf.initialPos, bornOffs = [0, 0]) { const board = (0, BoardState_1.boardState)(pieces, bornOffs); return whiteViewAbsoluteBoard(board); } exports.initAbsoluteBoard = initAbsoluteBoard; /** * 相対表記であるBoardStateを、Whiteの観点で絶対表記に変換する。 * 実質的にはそのまま返す * @param boardState */ function whiteViewAbsoluteBoard(boardState) { return { points: () => boardState.points, piecesAt: (n) => boardState.piecesAt(n), whiteBornOff: () => boardState.myBornOff, redBornOff: () => boardState.opponentBornOff, }; } exports.whiteViewAbsoluteBoard = whiteViewAbsoluteBoard; /** * 相対表記であるBoardStateを、Redの観点で絶対表記に変換する。 * 実質的には座標を反転、駒数も正負反転させて返す * @param boardState */ function redViewAbsoluteBoard(boardState) { const boardSize = boardState.points.length - 1; return { points: () => boardState.points .slice() .reverse() .map((v) => (v === 0 ? v : -v)), piecesAt: (n) => -boardState.piecesAt(boardSize - n), whiteBornOff: () => boardState.opponentBornOff, redBornOff: () => boardState.myBornOff, }; } exports.redViewAbsoluteBoard = redViewAbsoluteBoard;