tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
60 lines (52 loc) • 1.62 kB
text/typescript
import { AbsoluteBoardState } from '../AbsoluteBoardState'
import { BoardState } from '../BoardState'
import { BoardStateNode } from '../BoardStateNode'
import { Ply } from '../Ply'
import { SGInPlay } from './SingleGameState'
/**
* チェッカープレイが未確定の状態を表す
*/
export type CheckerPlayState = {
isCommitted: false
curPly: Ply
curBoardState: BoardStateNode
absBoard: AbsoluteBoardState
isUndoable: boolean
boardStateNodeRevertTo: BoardStateNode
absBoardRevertTo: AbsoluteBoardState
toAbsBoard: (board: BoardState) => AbsoluteBoardState
toPly: (board: BoardStateNode) => Ply
toPos: (n: number) => number
revertDicesFlag: boolean
}
/**
* チェッカープレイが確定した状態を表す
*/
export type CheckerPlayStateCommitted = {
isCommitted: true
boardStateNode: BoardStateNode
}
/**
* チェッカープレイ開始状態を示すSGStateオブジェクトを、CheckerPlayStateオブジェクトに変換する
* @param sgInPlay
* @returns
*/
export function asCheckerPlayState(sgInPlay: SGInPlay): CheckerPlayState {
const { boardStateNode, absBoard, revertTo, toAbsBoard, toPly, toPos } =
sgInPlay
const curPly = toPly(boardStateNode)
const isUndoable = curPly.moves.length > 0
return {
isCommitted: false,
curPly,
curBoardState: boardStateNode,
absBoard,
boardStateNodeRevertTo: revertTo,
absBoardRevertTo: toAbsBoard(revertTo.board),
toAbsBoard,
toPly,
toPos,
isUndoable,
revertDicesFlag: false,
}
}