export declare enum Direction { UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3 } export interface Tile { readonly value: number; readonly id: number; readonly mergedId?: number; } export declare type TileRow = readonly (Tile | null)[]; export declare type Board = readonly TileRow[]; export interface GameState { readonly status: { readonly hasPossibleMoves: boolean; readonly isWon: boolean; }; readonly board: Board; readonly score: number; readonly rngNumber?: number; readonly totalTileCount?: number; } declare type DeepWritable = { -readonly [P in keyof T]: DeepWritable; }; export declare type MutableGameState = DeepWritable; export declare type GameStateModifier = (state: GameState) => GameState; export declare enum MoveType { STANDARD = 0, BONUS = 1 } export interface StandardMove { readonly type: MoveType.STANDARD; readonly direction: Direction; } export interface BonusMove { readonly type: MoveType.BONUS; } export declare type Move = StandardMove | BonusMove; export interface GameData { readonly boardMeta: { readonly rows: number; readonly cols: number; }; readonly randomSeed: number; readonly moveLog: Move[]; } export interface Game extends GameData { currentState: GameState; move: (direction: Direction) => GameState; } export {};