Interface GameState

interface GameState {
    cardsRemainingInTheDeck: number;
    cardStatus: Readonly<
        Record<
            0
            | 1
            | 2
            | 3
            | 4
            | 5,
            Readonly<Record<1 | 2 | 3 | 4 | 5 | 7, CardStatus>>,
        >,
    >;
    clues: readonly StateClue[];
    clueTokens: number;
    deck: readonly CardState[];
    discardStacks: Readonly<Tuple<readonly CardOrder[], NumSuits>>;
    hands: Readonly<Tuple<readonly CardOrder[], 2 | 3 | 4 | 5 | 6>>;
    hole: readonly CardOrder[];
    log: readonly LogEntry[];
    playStackDirections: Readonly<Tuple<StackDirection, NumSuits>>;
    playStacks: Readonly<Tuple<readonly CardOrder[], NumSuits>>;
    playStackStarts: Readonly<Tuple<null | 7 | 3 | 1 | 2 | 4 | 5, NumSuits>>;
    score: number;
    stats: StatsState;
    strikes: readonly StateStrike[];
    turn: TurnState;
}

Properties

cardsRemainingInTheDeck: number
cardStatus: Readonly<
    Record<
        0
        | 1
        | 2
        | 3
        | 4
        | 5,
        Readonly<Record<1 | 2 | 3 | 4 | 5 | 7, CardStatus>>,
    >,
>

Card statues are indexed by suit index and rank.

This only depends on a card's identity, not the card itself, so it is stored here rather than as a sub-property of CardState.

clues: readonly StateClue[]
clueTokens: number
deck: readonly CardState[]
discardStacks: Readonly<Tuple<readonly CardOrder[], NumSuits>>

Indexed by suit index. Each suit has an array of card orders.

hands: Readonly<Tuple<readonly CardOrder[], 2 | 3 | 4 | 5 | 6>>

Indexed by player index. Each player has an array of card orders.

hole: readonly CardOrder[]

For "Throw It in a Hole" variants. All played cards go into the hole.

log: readonly LogEntry[]
playStackDirections: Readonly<Tuple<StackDirection, NumSuits>>
playStacks: Readonly<Tuple<readonly CardOrder[], NumSuits>>

Indexed by suit index. Each suit has an array of card orders.

playStackStarts: Readonly<Tuple<null | 7 | 3 | 1 | 2 | 4 | 5, NumSuits>>

For Sudoku variants, this denotes the first rank played of this stack. If the stack is not started yet, then the value stored is null.

score: number
stats: StatsState
strikes: readonly StateStrike[]
turn: TurnState