UNPKG

@nodots-llc/backgammon-ai

Version:

AI and integration for nodots-backgammon using gnubg as a backend engine.

120 lines 5.49 kB
import { BackgammonBoard } from './board'; import { BackgammonMoveOrigin } from './checkercontainer'; import { BackgammonCube } from './cube'; import { IntegerRange } from './generics'; import { BackgammonPlay, BackgammonPlayDoubled, BackgammonPlayMoving, BackgammonPlayRolled } from './play'; import { BackgammonPlayer, BackgammonPlayerActive, BackgammonPlayerDoubled, BackgammonPlayerInactive, BackgammonPlayerMoving, BackgammonPlayerRolled, BackgammonPlayerRolledForStart, BackgammonPlayerRolling, BackgammonPlayerWinner, BackgammonPlayers } from './player'; export type Latitude = 'north' | 'south'; export type Longitude = 'east' | 'west'; export type BackgammonColor = 'black' | 'white'; export type BackgammonMoveDirection = 'clockwise' | 'counterclockwise'; export type BackgammonPips = IntegerRange<1, 167>; export declare const MAX_PIP_COUNT = 167; export declare const CHECKERS_PER_PLAYER = 15; export type BackgammonGameStateKind = 'rolling-for-start' | 'rolled-for-start' | 'rolling' | 'rolled' | 'doubling' | 'doubled' | 'moving' | 'moved' | 'completed'; interface BaseGame { id: string; players: BackgammonPlayers; board: BackgammonBoard; cube: BackgammonCube; winner?: BackgammonPlayer; activeColor?: BackgammonColor; activePlay?: BackgammonPlay; activePlayer?: BackgammonPlayer; inactivePlayer?: BackgammonPlayer; } 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: BackgammonPlayerInactive; }; export type BackgammonGameRolling = Game & { stateKind: 'rolling'; activeColor: BackgammonColor; activePlayer: BackgammonPlayerRolling; inactivePlayer: BackgammonPlayerInactive; }; export type BackgammonGameRolled = Game & { stateKind: 'rolled'; activeColor: BackgammonColor; activePlayer: BackgammonPlayerRolled; inactivePlayer: BackgammonPlayerInactive; activePlay: BackgammonPlayRolled; }; export type BackgammonGameDoubling = Game & { stateKind: 'doubling'; activeColor: BackgammonColor; activePlay: BackgammonPlayDoubled; activePlayer: BackgammonPlayerDoubled; 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: BackgammonPlayerWinner; }; export type BackgammonGame = BackgammonGameRollingForStart | BackgammonGameRolledForStart | BackgammonGameRolling | BackgammonGameRolled | 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; initialize: (players: BackgammonPlayers, id?: string, stateKind?: BackgammonGameStateKind, board?: BackgammonBoard, cube?: BackgammonCube, activePlay?: BackgammonPlay, activeColor?: BackgammonColor, activePlayer?: BackgammonPlayerActive, inactivePlayer?: BackgammonPlayerInactive, origin?: BackgammonMoveOrigin) => BackgammonGame; rollForStart: (game: BackgammonGameRollingForStart) => BackgammonGameRolledForStart; roll: (game: BackgammonGameRolledForStart) => BackgammonGameRolled; /** * This is a pseudo state transition. The user transitions into a "moving" state when they * click on a checker (rather than the cube). But the instant they click the * checker they are in a moved state. */ toMoving: (game: BackgammonGameRolled | BackgammonGameDoubled) => BackgammonGameMoving; /** * This is another pseudo state transition. Argument for this is weaker. */ toDoubling: (game: BackgammonGameRolled) => BackgammonGameDoubling; double: (game: BackgammonGameDoubling) => BackgammonGameDoubled; move: (game: BackgammonGameMoving | BackgammonGameRolled, origin: BackgammonMoveOrigin) => BackgammonGameMoved; 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