import { BackgammonBoard } from './board'; import { BackgammonMoveOrigin } from './checkercontainer'; import { BackgammonCube } from './cube'; import { BackgammonPlay, BackgammonPlayDoubled, BackgammonPlayMoving } from './play'; import { BackgammonPlayer, BackgammonPlayerActive, BackgammonPlayerDoubled, BackgammonPlayerInactive, BackgammonPlayerMoving, BackgammonPlayerRolledForStart, BackgammonPlayerRolling, BackgammonPlayers } from './player'; export type Latitude = 'north' | 'south'; export type Longitude = 'east' | 'west'; export type BackgammonColor = 'black' | 'white'; export type BackgammonMoveDirection = 'clockwise' | 'counterclockwise'; export declare const CHECKERS_PER_PLAYER = 15; export type BackgammonGameStateKind = 'rolling-for-start' | 'rolled-for-start' | 'rolling' | 'doubled' | 'moving' | 'moved' | 'completed'; export type BackgammonRestorableGameStateKind = BackgammonGameStateKind; export declare const RESTORABLE_GAME_STATE_KINDS: readonly BackgammonRestorableGameStateKind[]; export interface BackgammonGameMetadata { title?: string; description?: string; tags?: string[]; isPublic?: boolean; isRanked?: boolean; tournamentId?: string; roundNumber?: number; matchNumber?: number; } export interface BackgammonGameStatistics { totalMoves: number; totalRolls: number; totalDoubles: number; averageMoveTime: number; longestMoveTime: number; shortestMoveTime: number; pipCountHistory: Array<{ turn: number; black: number; white: number; }>; cubeHistory: Array<{ turn: number; value: number; offeredBy: BackgammonColor; accepted: boolean; }>; } export interface BackgammonGameTiming { timeLimit?: number; timePerMove?: number; timeRemaining: { black: number; white: number; }; lastMoveTime?: Date; averageTimePerTurn: number; } interface BaseGame { id: string; players: BackgammonPlayers; board: BackgammonBoard; cube: BackgammonCube; createdAt: Date; asciiBoard?: string; winner?: string; activeColor?: BackgammonColor; activePlay?: BackgammonPlay; activePlayer?: BackgammonPlayer; inactivePlayer?: BackgammonPlayer; startTime?: Date; lastUpdate?: Date; endTime?: Date; metadata?: BackgammonGameMetadata; statistics?: BackgammonGameStatistics; timing?: BackgammonGameTiming; gnuPositionId?: string; version: string; rules: { useCrawfordRule?: boolean; useJacobyRule?: boolean; useBeaverRule?: boolean; useRaccoonRule?: boolean; useMurphyRule?: boolean; useHollandRule?: boolean; }; settings: { allowUndo?: boolean; allowResign?: boolean; autoPlay?: boolean; showHints?: boolean; showProbabilities?: boolean; }; } interface Game extends BaseGame { stateKind: BackgammonGameStateKind; } export type BackgammonGameRollingForStart = Game & { stateKind: 'rolling-for-start'; }; export type BackgammonGameRolledForStart = Game & { stateKind: 'rolled-for-start'; activeColor: BackgammonColor; activePlayer: BackgammonPlayerRolledForStart; inactivePlayer: BackgammonPlayerRolledForStart; }; export type BackgammonGameRolling = Game & { stateKind: 'rolling'; activeColor: BackgammonColor; activePlayer: BackgammonPlayerRolling; inactivePlayer: BackgammonPlayerInactive; }; export type BackgammonGameDoubled = Game & { stateKind: 'doubled'; activeColor: BackgammonColor; activePlay: BackgammonPlayDoubled; activePlayer: BackgammonPlayerDoubled; inactivePlayer: BackgammonPlayerInactive; }; export type BackgammonGameMoving = Game & { stateKind: 'moving'; activeColor: BackgammonColor; activePlay: BackgammonPlayMoving; activePlayer: BackgammonPlayerMoving; inactivePlayer: BackgammonPlayerInactive; }; export type BackgammonGameMoved = Game & { stateKind: 'moved'; activeColor: BackgammonColor; activePlay: BackgammonPlayMoving; activePlayer: BackgammonPlayerMoving; inactivePlayer: BackgammonPlayerInactive; }; export type BackgammonGameCompleted = Game & { stateKind: 'completed'; winner: string; }; export type BackgammonGame = BackgammonGameRollingForStart | BackgammonGameRolledForStart | BackgammonGameRolling | BackgammonGameDoubled | BackgammonGameMoving | BackgammonGameMoved | BackgammonGameCompleted; export interface GameProps { players: BackgammonPlayers; board?: BackgammonBoard; cube?: BackgammonCube; } export interface GameClass { id: string; stateKind: BackgammonGameStateKind; players: BackgammonPlayers; board: BackgammonBoard; cube: BackgammonCube; activeColor: BackgammonColor; activePlay: BackgammonPlay; activePlayer: BackgammonPlayerActive; inactivePlayer: BackgammonPlayerInactive; metadata?: BackgammonGameMetadata; statistics?: BackgammonGameStatistics; timing?: BackgammonGameTiming; version: string; rules: { useCrawfordRule?: boolean; useJacobyRule?: boolean; useBeaverRule?: boolean; useRaccoonRule?: boolean; useMurphyRule?: boolean; useHollandRule?: boolean; }; settings: { allowUndo?: boolean; allowResign?: boolean; autoPlay?: boolean; showHints?: boolean; showProbabilities?: boolean; }; initialize: (players: BackgammonPlayers, id?: string, stateKind?: BackgammonGameStateKind, board?: BackgammonBoard, cube?: BackgammonCube, activePlay?: BackgammonPlay, activeColor?: BackgammonColor, activePlayer?: BackgammonPlayerActive, inactivePlayer?: BackgammonPlayerInactive, origin?: BackgammonMoveOrigin, metadata?: BackgammonGameMetadata, statistics?: BackgammonGameStatistics, timing?: BackgammonGameTiming, version?: string, rules?: { useCrawfordRule?: boolean; useJacobyRule?: boolean; useBeaverRule?: boolean; useRaccoonRule?: boolean; useMurphyRule?: boolean; useHollandRule?: boolean; }, settings?: { allowUndo?: boolean; allowResign?: boolean; autoPlay?: boolean; showHints?: boolean; showProbabilities?: boolean; }) => BackgammonGame; rollForStart: (game: BackgammonGameRollingForStart) => BackgammonGameRolledForStart; roll: (game: BackgammonGameRolledForStart | BackgammonGameRolling | BackgammonGameDoubled) => BackgammonGameMoving; double: (game: BackgammonGameRolling) => BackgammonGameDoubled; move: (game: BackgammonGameMoving, origin: BackgammonMoveOrigin) => BackgammonGameMoved | BackgammonGameMoving | BackgammonGameCompleted; getActivePlayer: (game: BackgammonGame) => BackgammonPlayerActive; getInactivePlayer: (game: BackgammonGame) => BackgammonPlayerInactive; getPlayersForColor: (players: BackgammonPlayers, color: BackgammonColor) => [BackgammonPlayerActive, BackgammonPlayerInactive]; sanityCheckMovingGame: (game: BackgammonGame) => BackgammonGameMoving | false; } export {}; //# sourceMappingURL=game.d.ts.map