import { CubeState } from './CubeState';
import { StakeConf } from './StakeConf';
import { EOGStatus } from './EOGStatus';
import { Score } from './Score';
/**
 * マッチ中のスコア他、クロフォードの有無などの状況を表す型
 */
export declare type MatchState = MatchStateInPlay | MatchStateEoG;
declare type _MatchState = {
    /**
     * マッチの長さ、0の場合は無制限
     */
    matchLength: number;
    /**
     * ゲーム開始時点でのスコア
     */
    scoreBefore: Score;
    /**
     * 現時点（ゲーム進行中）、または更新後（ゲーム終了後）のスコア
     */
    score: Score;
    /**
     * スコアに関するルール設定
     */
    stakeConf: StakeConf;
    /**
     * 進行中、または直前に終了したゲームがクロフォードゲームならtrue
     */
    isCrawford: boolean;
};
/**
 * ゲームが進行中の時のスコアを表す型
 */
export declare type MatchStateInPlay = _MatchState & {
    isEoG: false;
};
/**
 * ゲームが終了した時点で、その前後のスコアを表す型
 */
export declare type MatchStateEoG = _MatchState & {
    isEoG: true;
    /**
     * ゲームにより獲得した点数
     */
    stake: Score;
    /**
     * 終了後のスコア
     */
    scoreAfter: Score;
    /**
     * 終局状態
     */
    eogStatus: EOGStatus;
    /**
     * マッチが決着しているならtrue
     */
    isEoM: boolean;
    /**
     * 次ゲームがクロフォードゲームならtrue
     */
    isCrawfordNext: boolean;
};
/**
 * 無制限のマッチゲームを開始する
 *
 * @param scoreBefore 開始時点での両プレイヤーのスコア
 * @param jacobyRule ジャコビールールを適用する場合はtrue
 * @returns
 */
export declare function matchStateForUnlimitedMatch(scoreBefore?: Score, jacobyRule?: boolean): MatchStateInPlay;
/**
 * ポイントマッチを開始する。
 *
 * @param matchLength マッチの長さ
 * @param scoreBefore 開始時点での両プレイヤーのスコア
 * @param isCrawford 次ゲームをクロフォードとするならtrue。スコアとマッチの長さについてのチェックは行わない
 * @returns
 */
export declare function matchStateForPointMatch(matchLength: number, scoreBefore?: Score, isCrawford?: boolean): MatchStateInPlay;
/**
 * 現在のマッチ状態で、isRedで指定されたプレイヤーについてキューブアクション可能かどうかを返す
 *
 * @param matchState マッチの状況
 * @param cubeValue キューブの値
 * @param isRed Redについて確認するならtrue / Whiteならfalse
 * @returns
 */
export declare function shouldSkipCubeAction(matchState: MatchState, cubeValue: number, isRed: boolean): boolean;
/**
 * 現在のマッチの状態で、キューブが最大値に達しているかどうかをキューブの状態から判定する（したがって、クロフォードは影響しない）。
 *
 * shouldSkipCubeAction()とは、プレイヤーの指定を必要としないことと、クロフォードを含めない点で異なっている。
 *
 * （これは、キューブが使えない理由があるのはキューブ状態かクロフォードルールかを呼び出し側で把握するために判定から除外した）。
 *
 * @param matchState マッチの状態
 * @param cubeState キューブの状態
 * @returns
 */
export declare function isCubeMaxForMatch(matchState: MatchState, cubeState: CubeState): boolean;
/**
 * ゲーム終了時のマッチ状態を生成する
 * @param matchState マッチ状態
 * @param stake 獲得したスコア
 * @param eogStatus 終局状態
 * @returns
 */
export declare function matchStateEoG(matchState: MatchState, stake: Score, eogStatus: EOGStatus): MatchStateEoG;
/**
 * 終局時のマッチ状態から、終局直前のマッチ状態を生成する。
 *
 * これは、記録を遡って再開する時、終局状態を解除するために使用している。
 *
 * @param matchState 終局時のマッチ状態
 * @returns
 */
export declare function matchStateLastGame(matchState: MatchStateEoG): MatchStateInPlay;
/**
 * 終局時のマッチ状態から、次のゲームを開始したマッチ状態を生成する
 * @param matchState 終局時のマッチ状態
 * @returns
 */
export declare function matchStateNewGame(matchState: MatchStateEoG): MatchStateInPlay;
export {};
//# sourceMappingURL=MatchState.d.ts.map