UNPKG

the-game-domain

Version:

Complete domain layer for 'The Game' card game with rich business entities, automatic persistence, action tracking, and advanced game mechanics. Features Game, Player, Card, Deck, Pile entities with repository pattern, turn management, victory/defeat dete

151 lines 4.67 kB
import { Card } from './Card'; import { Pile } from './Pile'; import { Deck } from './Deck'; import { Player } from './Player'; import { GameAction } from './GameAction'; import type { IGameRepository } from '../repositories/GameRepository'; export declare class Game { private readonly _id; private readonly _createdAt; private _piles; private _players; private _deck; private _currentPlayerId?; private _isFinished; private _repository; private _actions; constructor(numberOfPlayers: number, repository?: IGameRepository); private _initializeGame; get id(): string; get piles(): readonly Pile[]; get players(): readonly Player[]; get currentPlayerId(): string | undefined; get isFinished(): boolean; get gameResult(): 'ongoing' | 'won' | 'lost'; get winnerMessage(): string | null; get deck(): Deck; get createdAt(): Date; private _validateGame; private _persist; private _recordAction; recordAction(action: GameAction): void; setRepository(repository: IGameRepository): void; removeRepository(): void; hasRepository(): boolean; hasExternalRepository(): boolean; persist(): Promise<void>; get actions(): readonly GameAction[]; getActionsSortedByTimestamp(): readonly GameAction[]; private _addPlayer; getPlayerCards(playerId: string): readonly Card[]; getPlayer(playerId: string): Player | undefined; canPlaceCardOnPile(cardValue: number, pileNumber: number): boolean; moveCardToPile(playerId: string, cardValue: number, pileNumber: number): Promise<void>; private _checkGameEnd; private _checkVictory; private _checkDefeat; checkForImmediateDefeat(): boolean; forceDefeatCheck(): Promise<void>; restart(): Promise<void>; private _canPlayerPlayAnyCard; private _canPlayerPlayRequiredCards; private _getPlayableCards; private _findNextPlayablePlayer; private _autoDrawCardsForPlayer; canPlayerEndTurn(playerId: string): boolean; getRequiredCardsToPlay(playerId: string): number; private _getCardsPlayedThisTurn; nextTurn(): Promise<void>; private _handleNextPlayerValidation; equals(other: Game): boolean; toString(): string; toJSON(): { id: string; createdAt: string; piles: Array<{ number: number; direction: string; lastCard: { value: number; id?: string; }; id?: string; }>; players: Array<{ id: string; name: string; cards: Array<{ value: number; id?: string; }>; isCurrentTurn: boolean; }>; deck: { cards: Array<{ value: number; id?: string; }>; id?: string; }; currentPlayerId?: string; isFinished: boolean; gameResult: 'ongoing' | 'won' | 'lost'; winnerMessage?: string; actions: Array<{ id: string; gameId: string; type: string; description: string; playerId?: string | undefined; playerName?: string | undefined; cardValue?: number | undefined; pileNumber?: number | undefined; timestamp: string; }>; }; static fromJSON(data: { id: string; createdAt: string; piles: Array<{ number: number; direction: string; lastCard: { value: number; id?: string; }; id?: string; }>; players: Array<{ id: string; name: string; cards: Array<{ value: number; id?: string; }>; isCurrentTurn: boolean; }>; deck: { cards: Array<{ value: number; id?: string; }>; id?: string; }; currentPlayerId?: string; isFinished: boolean; gameResult?: 'ongoing' | 'won' | 'lost'; winnerMessage?: string; actions?: Array<{ id: string; gameId: string; type: string; description: string; playerId?: string | undefined; playerName?: string | undefined; cardValue?: number | undefined; pileNumber?: number | undefined; timestamp: string; }>; }, repository?: IGameRepository): Game; } //# sourceMappingURL=Game.d.ts.map