import { BoardState } from '../BoardState';
import { BoardStateNode } from '../BoardStateNode';
import { CubeState } from '../CubeState';
import { Evaluator } from './Evaluator';
/**
 * チェッカープレイとキューブアクションを判断する思考エンジンが実装するインターフェース
 */
export declare type GammonEngine = {
    /**
     * ゲームの開始前に一度呼ばれる
     */
    initialized(): void;
    /**
     * ダブルをするかどうかを返す
     *
     * @param boardState 局面
     * @param cubeState キューブ（値はダブル前の値）
     * @returns ダブルするならisDouble=trueを返す
     */
    cubeAction(boardState: BoardState, cubeState: CubeState): {
        isDouble: boolean;
    };
    /**
     * テイクするかどうかを返す
     *
     * @param boardState 局面
     * @param cubeState キューブ（値はダブル前の値）
     * @returns テイクするならisDouble=trueを返す
     */
    cubeResponse(boardState: BoardState, cubeState: CubeState): {
        isTake: boolean;
    };
    /**
     * チェッカープレイを行い、その結果の局面を返す。
     *
     * @param boardStateNode 局面
     * @returns プレイ後の局面（引数のboardStateNodeと同じ視点）。boardStateNodeの子局面が想定されているが、任意の局面を設定してもよい。また、手がない場合は引数をそのまま返す。
     */
    checkerPlay(boardStateNode: BoardStateNode): BoardStateNode;
    /**
     * ゲーム終了後に一度呼ばれる。
     *
     * @param boardStateNode 局面
     */
    endOfGame(boardStateNode: BoardStateNode): void;
};
/**
 * 乱数エンジンを返す。キューブアクションは判断せず（ダブルはしない・常にテイク）、
 * チェッカープレイは候補手からランダムに選ぶ。
 *
 * @returns 乱数エンジン
 */
export declare function randomEngine(): GammonEngine;
/**
 * 局面評価をする関数から、簡易なGammonEngineを生成する。
 *
 * キューブアクションは、期待値0.40（勝率70%）でダブル、-0.5（勝率25%）より上でテイク。
 *
 * @param evaluate 局面評価をする関数
 * @returns GammonEngine
 */
export declare function simpleEvalEngine(evaluate: (board: BoardState) => number): GammonEngine;
export declare function simpleEvalEngineWithEvaluator(ev: Evaluator): GammonEngine;
//# sourceMappingURL=GammonEngine.d.ts.map