/**
 * true ... 黒
 * false ... 白
 */
export declare type Color = boolean;
export declare type MapPixel = 'null' | 'empty';
export declare type Options = {
    isLlotheo: boolean;
    canPutEverywhere: boolean;
    loopedBoard: boolean;
};
export declare type Undo = {
    /**
     * 色
     */
    color: Color;
    /**
     * どこに打ったか
     */
    pos: number;
    /**
     * 反転した石の位置の配列
     */
    effects: number[];
    /**
     * ターン
     */
    turn: Color;
};
/**
 * リバーシエンジン
 */
export default class Reversi {
    map: MapPixel[];
    mapWidth: number;
    mapHeight: number;
    board: Color[];
    turn: Color;
    opts: Options;
    prevPos: number;
    prevColor: Color;
    private logs;
    /**
     * ゲームを初期化します
     */
    constructor(map: string[], opts: Options);
    /**
     * 黒石の数
     */
    readonly blackCount: number;
    /**
     * 白石の数
     */
    readonly whiteCount: number;
    /**
     * 黒石の比率
     */
    readonly blackP: number;
    /**
     * 白石の比率
     */
    readonly whiteP: number;
    transformPosToXy(pos: number): number[];
    transformXyToPos(x: number, y: number): number;
    /**
     * 指定のマスに石を打ちます
     * @param color 石の色
     * @param pos 位置
     */
    put(color: Color, pos: number): void;
    private calcTurn();
    undo(): void;
    /**
     * 指定した位置のマップデータのマスを取得します
     * @param pos 位置
     */
    mapDataGet(pos: number): MapPixel;
    /**
     * 打つことができる場所を取得します
     */
    canPutSomewhere(color: Color): number[];
    /**
     * 指定のマスに石を打つことができるかどうかを取得します
     * @param color 自分の色
     * @param pos 位置
     */
    canPut(color: Color, pos: number): boolean;
    /**
     * 指定のマスに石を置いた時の、反転させられる石を取得します
     * @param color 自分の色
     * @param pos 位置
     */
    effects(color: Color, pos: number): number[];
    /**
     * ゲームが終了したか否か
     */
    readonly isEnded: boolean;
    /**
     * ゲームの勝者 (null = 引き分け)
     */
    readonly winner: Color;
}
