import type * as puppeteer from 'koishi-plugin-puppeteer';
import { Context, Session } from 'koishi';
export declare enum MoveResult {
    p1Win = 1,
    p2Win = -1,
    draw = -2,
    skip = 2,
    illegal = 3
}
export declare class State {
    readonly rule: string;
    readonly size: number;
    readonly placement: 'cross' | 'grid';
    readonly ctx: Context;
    p1: string;
    p2: string;
    next: string;
    bBoard: bigint;
    wBoard: bigint;
    imageMode: boolean;
    history: bigint[];
    readonly area: bigint;
    readonly full: bigint;
    update: (this: State, x: number, y: number, value: 1 | -1) => MoveResult | string;
    constructor(rule: string, size: number, placement: 'cross' | 'grid', ctx: Context);
    get pBoard(): bigint;
    set pBoard(value: bigint);
    get nBoard(): bigint;
    set nBoard(value: bigint);
    get isFull(): boolean;
    bit(x: number, y: number): bigint;
    inRange(x: number, y: number): boolean;
    get(x: number, y: number): 0 | 1 | -1;
    drawSvg(x?: number, y?: number): puppeteer.SVG;
    drawText(x?: number, y?: number): string;
    draw(session: Session, message?: string, x?: number, y?: number): Promise<void>;
    set(x: number, y: number, value: 0 | 1 | -1): bigint;
    save(): void;
    refresh(): void;
    serial(): {
        rule: string;
        size: number;
        placement: "cross" | "grid";
        p1: string;
        p2: string;
        next: string;
        history: string;
    };
    static from(data: StateData, ctx: Context): State;
}
export interface StateData {
    p1: string;
    p2: string;
    next: string;
    history: string;
    rule: string;
    size: number;
    placement: 'cross' | 'grid';
}
