import { ChaseList } from "./ChaseRecord"; export interface Move { move: number; hashKey: number; hashAfter?: number; sixty: number; score?: number; depth?: number; time?: number; pv?: string; side?: number; chases?: ChaseList; chasedPiece?: number; chasingPiece?: number; checked?: boolean; } export interface BoardState { board: number[]; side: number; sixty: number; hashKey: number; kingSquare: [number, number]; moveStack: Move[]; searchPly: number; gamePly: number; drawAgreed: boolean; } export type DrawReason = "agreement" | "insufficient-material" | "repetition" | "move-limit"; export interface DrawStatus { isDraw: boolean; reasons: DrawReason[]; claimable: DrawReason[]; } export interface HashEntry { hashKey: number; depth: number; flag: number; score: number; bestMove: number; } export default class WukongCore { private readonly VERSION; private readonly START_FEN; private readonly RED; private readonly BLACK; private readonly NO_COLOR; private readonly EMPTY; private readonly RED_PAWN; private readonly RED_ADVISOR; private readonly RED_BISHOP; private readonly RED_KNIGHT; private readonly RED_CANNON; private readonly RED_ROOK; private readonly RED_KING; private readonly BLACK_PAWN; private readonly BLACK_ADVISOR; private readonly BLACK_BISHOP; private readonly BLACK_KNIGHT; private readonly BLACK_CANNON; private readonly BLACK_ROOK; private readonly BLACK_KING; private readonly OFFBOARD; private readonly PAWN; private readonly ADVISOR; private readonly BISHOP; private readonly KNIGHT; private readonly CANNON; private readonly ROOK; private readonly KING; private readonly PIECE_TYPE; private readonly PIECE_COLOR; private readonly A9; private readonly B9; private readonly C9; private readonly D9; private readonly E9; private readonly F9; private readonly G9; private readonly H9; private readonly I9; private readonly A8; private readonly B8; private readonly C8; private readonly D8; private readonly E8; private readonly F8; private readonly G8; private readonly H8; private readonly I8; private readonly A7; private readonly B7; private readonly C7; private readonly D7; private readonly E7; private readonly F7; private readonly G7; private readonly H7; private readonly I7; private readonly A6; private readonly B6; private readonly C6; private readonly D6; private readonly E6; private readonly F6; private readonly G6; private readonly H6; private readonly I6; private readonly A5; private readonly B5; private readonly C5; private readonly D5; private readonly E5; private readonly F5; private readonly G5; private readonly H5; private readonly I5; private readonly A4; private readonly B4; private readonly C4; private readonly D4; private readonly E4; private readonly F4; private readonly G4; private readonly H4; private readonly I4; private readonly A3; private readonly B3; private readonly C3; private readonly D3; private readonly E3; private readonly F3; private readonly G3; private readonly H3; private readonly I3; private readonly A2; private readonly B2; private readonly C2; private readonly D2; private readonly E2; private readonly F2; private readonly G2; private readonly H2; private readonly I2; private readonly A1; private readonly B1; private readonly C1; private readonly D1; private readonly E1; private readonly F1; private readonly G1; private readonly H1; private readonly I1; private readonly A0; private readonly B0; private readonly C0; private readonly D0; private readonly E0; private readonly F0; private readonly G0; private readonly H0; private readonly I0; private readonly COORDINATES; private board; private side; private sixty; private hashKey; private kingSquare; private moveStack; private searchPly; private gamePly; private pieceList; private pieceKeys; private sideKey; private hashEntries; private hashTable; private randomState; private readonly DRAW_MOVE_LIMIT; private drawAgreed; private ruleTracking; private readonly CHAR_TO_PIECE; private readonly PIECE_TO_CHAR; private readonly UP; private readonly DOWN; private readonly LEFT; private readonly RIGHT; private readonly ORTHOGONALS; private readonly DIAGONALS; private readonly PAWN_ATTACK_OFFSETS; private readonly KNIGHT_ATTACK_OFFSETS; private readonly PAWN_MOVE_OFFSETS; private readonly KNIGHT_MOVE_OFFSETS; private readonly BISHOP_MOVE_OFFSETS; private readonly BOARD_ZONES; private readonly EVALUATE_TYPES; private readonly MATERIAL_WEIGHTS; private readonly PST; private readonly MIRROR_SQUARE; constructor(); private resetBoard; private updatePieceList; isRepetition(): boolean; getSide(): number; getSixty(): number; getHashKey(): number; getSearchPly(): number; getGamePly(): number; getKingSquare(color: number): number; resetSearchPly(): void; setRuleTracking(enabled: boolean): boolean; private random; private initRandomKeys; private generateHashKey; private isValidFen; setBoard(fen: string): boolean; printBoard(): void; moveFromString(moveString: string): number; loadMoves(moves: string): string[]; getMoves(): string[]; moveToString(move: number): string; printMoveList(moveList: { move: number; score: number; }[]): void; isSquareAttacked(square: number, color: number): boolean; getAttackers(square: number, color: number): { square: number; piece: number; }[]; private scanAttackers; encodeMove(sourceSquare: number, targetSquare: number, sourcePiece: number, targetPiece: number, captureFlag: number): number; getSourceSquare(move: number): number; getTargetSquare(move: number): number; getSourcePiece(move: number): number; getTargetPiece(move: number): number; getCaptureFlag(move: number): number; private pushMove; generateMoves(onlyCaptures: number): { move: number; score: number; }[]; generateLegalMoves(): { move: number; score: number; }[]; makeMove(move: number): number; takeBack(): void; makeNullMove(): void; takeNullMove(): void; evaluate(): number; setHashSize(Mb: number): void; initHashTable(): void; getBoardState(): BoardState; setBoardState(state: BoardState): void; getHashTable(): HashEntry[]; private initAll; debug(): void; getFen(): string; moveNotationToSquares(moveNotation: string): { source: number; target: number; }; private pieceValue; private canCaptureLegally; getChaseTargets(bySide: number): ChaseList; getLastMoveChases(): ChaseList; private chaseKey; private chaseKeys; countRepetitions(): number; private getRepetitionCycle; private victimKeysAt; private chasedThroughoutCycle; private checkedThroughoutCycle; private analyzeRepetitionCycle; detectPerpetualCheck(maxChecks?: number): void; detectPerpetualChase(maxChases?: number): void; agreeDraw(agreed?: boolean): void; isDrawAgreed(): boolean; getAttackingMaterial(side: number): { pawns: number; knights: number; cannons: number; rooks: number; total: number; }; hasMatingMaterial(side: number): boolean; isDrawByInsufficientMaterial(): boolean; isDrawByRepetition(maxRepeats?: number): boolean; getMovesWithoutCapture(): number; canClaimDrawByMoveLimit(moveLimit?: number): boolean; getDrawStatus(options?: { maxRepeats?: number; moveLimit?: number; }): DrawStatus; detectPerpetualRules(maxRepeats?: number): void; getLastMoveBySide(side: number): number | undefined; getPublicAPI(): { VERSION: string; START_FEN: string; COLOR: { RED: number; BLACK: number; NO_COLOR: number; }; squareToString: (square: number) => string; printBoard: () => void; setBoard: (fen: string) => boolean; getPiece: (square: number) => number; getSide: () => number; getSixty: () => number; getBoardState: () => BoardState; resetSearchPly: () => void; generateMoves: (onlyCaptures?: number) => { move: number; score: number; }[]; generateLegalMoves: () => { move: number; score: number; }[]; evaluate: () => number; isRepetition: () => boolean; inCheck: (color: number) => boolean; moveStack: () => Move[]; moveFromString: (moveString: string) => number; moveToString: (move: number) => string; getSourceSquare: (move: number) => number; getTargetSquare: (move: number) => number; getCaptureFlag: (move: number) => number; loadMoves: (moves: string) => string[]; getMoves: () => string[]; printMoveList: (moveList: { move: number; score: number; }[]) => void; makeMove: (move: number) => number; takeBack: () => void; setHashSize: (Mb: number) => void; initHashTable: () => void; getFen: () => string; isSquareAttacked: (square: number, color: number) => boolean; getAttackers: (square: number, color: number) => { square: number; piece: number; }[]; getChaseTargets: (side: number) => ChaseList; getLastMoveChases: () => ChaseList; setRuleTracking: (enabled: boolean) => boolean; getStartFen: () => string; debug: () => void; moveNotationToSquares: (moveNotation: string) => { source: number; target: number; }; detectPerpetualChase: (maxChases?: number) => void; detectPerpetualCheck: (maxChecks?: number) => void; detectPerpetualRules: (maxRepeats?: number) => void; agreeDraw: (agreed?: boolean) => void; isDrawAgreed: () => boolean; getAttackingMaterial: (side: number) => { pawns: number; knights: number; cannons: number; rooks: number; total: number; }; hasMatingMaterial: (side: number) => boolean; isDrawByInsufficientMaterial: () => boolean; isDrawByRepetition: (maxRepeats?: number) => boolean; getMovesWithoutCapture: () => number; canClaimDrawByMoveLimit: (moveLimit?: number) => boolean; getDrawStatus: (options?: { maxRepeats?: number; moveLimit?: number; }) => DrawStatus; getMyLastMoveBySide: (side: number) => number | undefined; getRepetitions: () => number; }; }