import { DicePip } from './Dices';
import { EOGStatus } from './EOGStatus';
/**
 * 相対表記で表現した盤面。常に動かす側の観点になっていて、0はバーポイント、25は上がり、
 * 正の数が自分の駒数となっている。内部的な盤の操作はすべてこのインターフェースを介して行い、
 * 外部へ表示する際にはAbsoluteBoardで変換する
 */
export interface BoardState {
    /** 各ポイントの駒数を格納した配列。正の数は自駒、負の数は相手駒 */
    points: number[];
    /** 最後尾の駒の位置 */
    lastPiecePos: number;
    /** 相手の最後尾の駒の位置 */
    opponentLastPiecePos: number;
    /** ベアリングオフの行き先となる位置（標準は25） */
    bearOffPos: number;
    /** 指定の位置を相手側の視点で見た時の位置に変換する（e.g. 1=>24, 6=>18, ...）*/
    invertPos(pos: number): number;
    /** ベアリングオフできるならtrue */
    isBearable: boolean;
    /** 各ポイントの駒数を返す。正の数は自駒、負の数は相手駒 */
    piecesAt(n: number): number;
    /** ベアリングオフ済みの自駒数を返す */
    myBornOff: number;
    /** ベアリングオフ済みの相手駒数を返す */
    opponentBornOff: number;
    /** 指定されたポイントの駒をpip分進めた盤面を返す。
     * ポイントに駒がなかったり、行き先がブロックされている・範囲外などの場合、自分自身が返ってくる */
    movePiece(from: number, pip: DicePip): BoardState;
    /** 盤面を相手側視点に変換する */
    revert(): BoardState;
    /** 盤面で自分側の駒が全て上がったかどうかを、ギャモン・バックギャモンの有無とあわせて返す。
     * ギャモン・バックギャモンは純粋に自駒の配置で判断され、ジャコビールールなどは適用されない。
     * 相手側が終局かどうかは影響しない。
     */
    eogStatus(): EOGStatus;
    /**
     * 自分のピップカウント
     */
    myPipCount: number;
    /**
     * 相手のピップカウント
     */
    opponentPipCount: number;
    /**
     * 終局状態に達しているならtrue
     */
    isEndOfGame(): boolean;
    /**
     * 終局状態に達していて、かつギャモンならtrue
     */
    isGammonish(): boolean;
    /**
     * 終局状態に達していて、かつバックギャモンならtrue
     */
    isBackgammonishAlso(): boolean;
    /**
     * ランニングゲーム（駒同士のコンタクトがない）状態ならtrue
     */
    isRunningGame(): boolean;
    /**
     * 自分のまだ上がっていない駒の数
     */
    pieceCount: number;
    /**
     * 相手のまだ上がっていない駒の数
     */
    opponentPieceCount: number;
    /**
     * 自分のインナーボードの開始点（標準ルールでは19）
     */
    innerPos: number;
}
/**
 * BoardStateの実装に必要な機能で、外部には公開する必要がないものの定義
 */
declare type Board = {} & BoardState;
/**
 * 駒の配置を格納した配列から、BoardStateを生成する
 *
 * @param pieces 駒の配置（省略時は標準ルールでの開始時な配置）
 * @param bornOffs すでにベアリングオフした駒の数の対（順に自分、相手：省略時は0）
 * @param innerPos この値とそれ以降がインナーボードとなる
 * @param isEoGFunc 終局判定関数（終局時にtrueを返す）
 * @returns 盤面
 */
export declare function boardState(pieces?: number[], bornOffs?: [number, number], innerPos?: number, isEoGFunc?: (board: Board) => boolean): BoardState;
export {};
//# sourceMappingURL=BoardState.d.ts.map