Gestion des Parties

Cette section détaille les composants responsables de la création, la gestion et le déroulement des parties de jeu. Ces services forment le cœur du système, maintenant l'état global des parties et orchestrant les transitions entre les différentes phases du jeu.

États du jeu

Les états principaux d'une partie sont définis dans l'énumération State:

OnGoingGameService

Ce service (on-going-game.service.ts) central gère toutes les parties en cours dans le système. Il implémente l'interface IOnGoingGameService et coordonne les autres services spécialisés.

Propriétés importantes

Méthodes

constructor(private gameSocketHandlerService: GameSocketHandlerService, private gameStateService: GameStateService, private gamePlayerService: GamePlayerService, private gameTimerService: GameTimerService, private gameItemService: GameItemService)

Description: Initialise le service avec tous les services spécialisés nécessaires.
Importance: Élevée - Point d'entrée pour la gestion des parties.
Détails: Initialise tous les services dépendants avec une référence à lui-même.

getCombatSocketService(): CombatSocketService

Description: Récupère le service de gestion des combats.
Retour: Instance de CombatSocketService.
Importance: Élévée - Accès à un service externe.

Méthodes d'activation des services

Ces méthodes délèguent la gestion des événements socket aux services spécialisés. Importance: Élevée - Établit la chaîne de responsabilité.

Méthodes de gestion des états

Ces méthodes gèrent la progression du jeu et les changements d'état.
Importance: Très élevée - Cœur de la mécanique de jeu.

Méthodes d'accès aux parties

Ces méthodes manipulent la collection de parties.
Importance: Élevée - Gestion du cycle de vie des parties.

Méthodes de gestion des joueurs

Ces méthodes gèrent l'association entre joueurs, sockets et parties.
Importance: Élevée - Critique pour la persistance des connexions.

Méthodes de gestion des codes et sockets

Gèrent les codes de partie et les associations avec les sockets.
Importance: Élevée - Infrastructure de communication.

Méthodes de jeu

Utilitaires pour la logique de jeu.
Importance: Élévée - Support aux fonctionnalités principales.

Méthodes de reconstruction d'objets

Créent des instances propres d'objets de jeu.
Importance: Élevée - Évite les problèmes de référence circulaire.

async delay(ms: number): Promise<void>

Description: Utilitaire pour créer des délais.
Paramètres: ms - Délai en millisecondes.
Importance: Élévée - Utilitaire.

GameStateService

Ce service (game-state.service.ts) gère les transitions d'état du jeu et le déroulement des tours.

Méthodes

initialize(service: IOnGoingGameService): void

Description: Initialise le service avec l'instance d'OnGoingGameService.
Paramètres: service - Service de gestion des parties en cours.
Importance: Élevée - Configuration nécessaire.

switchState = async (game: OnGoingGame) => { ... }

Description: Gère la transition entre différents états du jeu.
Paramètres: game - La partie concernée.
Importance: Très élevée - Orchestration du jeu.
Détails: Selon l'état actuel (attente entre tours, tour en cours, fin de partie), exécute les actions appropriées.

async handleBotTurn(game: OnGoingGame)

Description: Exécute le tour d'un bot si c'est son tour.
Paramètres: game - La partie concernée.
Importance: Élevée - Intelligence artificielle du jeu.

changeState(game: OnGoingGame, state: State)

Description: Modifie l'état d'une partie et notifie les clients.
Paramètres:
- game - La partie concernée
- state - Le nouvel état
Importance: Élevée - Transition explicite d'état.

sendGameStats(gameCode: string): void

Description: Envoie les statistiques actuelles de la partie aux clients.
Paramètres: gameCode - Code de la partie.
Importance: Élévée - Mise à jour des statistiques.

private async handleInBetweenRoundState(game: OnGoingGame)

Description: Gère l'état d'attente entre les tours.
Paramètres: game - La partie concernée.
Importance: Élevée - Phase cruciale de préparation du tour.

private async handleRoundState(game: OnGoingGame)

Description: Gère la fin d'un tour et la préparation du suivant.
Paramètres: game - La partie concernée.
Importance: Élevée - Transition de tour.

GameTimerService

Ce service (game-timer.service.ts) gère les minuteurs (timers) associés aux parties.

Méthodes

initialize(service: IOnGoingGameService)

Description: Initialise le service avec l'instance d'OnGoingGameService.
Paramètres: service - Service de gestion des parties en cours.
Importance: Élevée - Configuration nécessaire.

stopTimers(nip: string)

Description: Arrête tous les minuteurs d'une partie.
Paramètres: nip - Code de la partie.
Importance: Élevée - Évite les problèmes de timing lors des changements d'état.

startTurnTimer(gameCode: string)

Description: Démarre le minuteur du tour de jeu.
Paramètres: gameCode - Code de la partie.
Importance: Élevée - Limite le temps de jeu par tour.

startInterludeTimer(gameCode: string)

Description: Démarre le minuteur d'interlude entre les tours.
Paramètres: gameCode - Code de la partie.
Importance: Élevée - Définit la pause entre les tours.

TimerSocketService

Ce service (timer-socket.service.ts) gère les événements socket liés aux minuteurs.

Méthodes

constructor(private onGoingGameService: OnGoingGameService)

Description: Initialise le service.
Paramètres: onGoingGameService - Service de gestion des parties.
Importance: Élevée - Injection standard.

handleSocket(socket: Socket): void

Description: Configure les gestionnaires d'événements liés aux minuteurs.
Paramètres: socket - La connexion socket à configurer.
Importance: Élevée - Point d'entrée pour la gestion des minuteurs.
Détails: Configure les événements 'StartGame', 'PauseTurnTimer', 'ResumeTurnTimer', 'EndTurn'.