export interface Match3Config {
    columns: number;
    rows: number;
    gemTypes: number;
    minMatch: number;
    swapDuration: number;
    fallSpeed: number;
    scorePerGem: number;
    comboMultiplier: number;
    movesLimit: number;
    timeLimit: number;
    powerUpThreshold: number;
}
export declare const DEFAULT_MATCH3_CONFIG: Match3Config;
export type GemType = number;
export interface Match3Board {
    cols: number;
    rows: number;
    cells: GemType[];
}
export declare function createMatch3Board(config: Match3Config): Match3Board;
export declare function findMatches(board: Match3Board, minMatch: number): number[];
export declare function removeMatches(board: Match3Board, indices: number[]): void;
export declare function applyGravity(board: Match3Board, config: Match3Config): void;
export declare function swapGems(board: Match3Board, idx1: number, idx2: number): void;
export interface BlockPuzzleConfig {
    columns: number;
    rows: number;
    fallInterval: number;
    lockDelay: number;
    softDropMultiplier: number;
    hardDrop: boolean;
    holdPiece: boolean;
    previewCount: number;
    lineScores: number[];
    levelSpeedFactor: number;
    linesPerLevel: number;
}
export declare const DEFAULT_BLOCK_PUZZLE_CONFIG: BlockPuzzleConfig;
/** Standard tetrominoes as 4×4 bitmask rotations. */
export declare const TETROMINOES: Record<string, number[][]>;
export interface BlockPuzzleState {
    board: number[];
    currentPiece: string;
    currentRotation: number;
    pieceX: number;
    pieceY: number;
    score: number;
    level: number;
    lines: number;
    heldPiece: string | null;
    preview: string[];
    gameOver: boolean;
}
export declare function createBlockPuzzleState(config: BlockPuzzleConfig): BlockPuzzleState;
export declare function checkLines(board: number[], cols: number, rows: number): number[];
export declare function clearLines(board: number[], cols: number, lineRows: number[]): void;
export interface PhysicsPuzzleConfig {
    gravity: number;
    maxObjects: number;
    goalType: 'reach' | 'destroy' | 'collect' | 'balance';
    starThresholds: [number, number, number];
    hintDelay: number;
    undoSteps: number;
}
export declare const DEFAULT_PHYSICS_PUZZLE_CONFIG: PhysicsPuzzleConfig;
export interface PuzzleLevelDef {
    id: string;
    name: string;
    goalType: PhysicsPuzzleConfig['goalType'];
    targetScore: number;
    availableObjects: string[];
    maxPlacements: number;
}
export interface HiddenObjectConfig {
    timeLimit: number;
    hintCooldown: number;
    penaltyPerMisclick: number;
    zoomEnabled: boolean;
    maxZoom: number;
    scorePerFind: number;
    bonusTimePerFind: number;
}
export declare const DEFAULT_HIDDEN_OBJECT_CONFIG: HiddenObjectConfig;
export interface HiddenObjectDef {
    id: string;
    name: string;
    x: number;
    y: number;
    width: number;
    height: number;
    found: boolean;
}
export interface HiddenObjectLevel {
    sceneImage: string;
    objects: HiddenObjectDef[];
}
export interface CardDef {
    id: string;
    name: string;
    suit?: string;
    rank?: number;
    value: number;
    imageId: string;
    properties: Record<string, unknown>;
}
export interface DeckConfig {
    cards: CardDef[];
    shuffled: boolean;
    maxHandSize: number;
    drawCount: number;
}
export declare class Deck {
    private cards;
    private discardPile;
    constructor(config: DeckConfig);
    shuffle(): void;
    draw(): CardDef | null;
    drawMultiple(count: number): CardDef[];
    discard(card: CardDef): void;
    reshuffleDiscard(): void;
    remaining(): number;
    discarded(): number;
    peek(count?: number): CardDef[];
}
/** Create a standard 52-card deck. */
export declare function createStandardDeck(): CardDef[];
