export interface PlayLogEntry {
    player: number;
    lastCall: number;
}
export declare type PlayLog = PlayLogEntry[];
/**
 *
 * @param playLog Current game play log.
 * @param numPlayer Number of players.
 * @returns Current player who need to call next number.
 */
export declare function getCurrentPlayer(playLog: PlayLog, numPlayer: number): number;
/**
 *
 * @param playLog Current game play log.
 * @returns Last player who called number. Return `undefined` if playLog is empty.
 */
export declare function getLastPlayer(playLog: PlayLog): number | undefined;
/**
 *
 * @param playLog Current game play log.
 * @param numEnd Number of players.
 * @returns Return true if game is end. Else, return false.
 */
export declare function gameIsEnd(playLog: PlayLog, numEnd: number): boolean;
/**
 *
 * @param playLog Current game play log
 * @returns Recently called number.
 */
export declare function getCurrentNum(playLog: PlayLog): number;
/**
 *
 * @param newNum Called number without regarding ending number
 * @param numEnd The last number of the game
 * @param playerTurn Player number on this turn
 * @returns New PlayLogEntry after call
 */
export declare function makePlayLogEntry(newNum: number, numEnd: number, playerTurn: number): PlayLogEntry;
/**
 *
 * @param loseMat Lose matrix
 * @param playLog Current game play log
 * @param maxCall Maximum number of call in once
 * @param numEnd The last number of the game
 * @param aiTurn Player number of AI playing this turn
 * @returns Updated playLog after one AI turn
 */
export declare function handleAiTurnOnce(loseMat: number[][], playLog: PlayLog, maxCall: number, numEnd: number, aiTurn: number): PlayLogEntry;
/**
 *
 * @param playLog Current game play log
 * @param numChoose Human chose to call numbers up to `numChoose`
 * @param numEnd The last number of the game
 * @param playerTurn Human player turn
 * @returns Updated playlog after human play. Doesn't mutate original playLog.
 */
export declare function handlePlayerTurn(playLog: PlayLog, numChoose: number, numEnd: number, playerTurn: number): PlayLog;
/**
 *
 * @param loseMat Lose rate matrix for all game states
 * @param playLog Current game play log
 * @param maxCall Maximum number of call in once
 * @param numEnd The last number of the game
 * @param playerTurn Human player turn
 * @returns Updated playlog after ai play. Doesn't mutate original `playLog`
 */
export declare function handleAiTurns(loseMat: number[][], playLog: PlayLog, maxCall: number, numEnd: number, playerTurn: number): PlayLog;
