koishi-plugin-chess
Version:
Playing chess games in Koishi
60 lines (59 loc) • 1.7 kB
TypeScript
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';
}