Statistiques

Vue d'ensemble

La page de Statistiques (StatsPageComponent) offre une interface complète permettant de visualiser les performances des joueurs et les statistiques globales d'une partie terminée. Accessible une fois la partie terminée, elle présente un tableau détaillé des statistiques individuelles des joueurs ainsi qu'un récapitulatif des métriques globales du jeu. Cette page permet également aux joueurs de continuer à communiquer via le chat même après la fin de la partie.

StatsPageComponent

Propriétés

Propriété Type Description
players Player[] Liste des joueurs et leurs statistiques
gameWinner string | null Nom du joueur ou de l'équipe gagnante
gameCode string Code identifiant de la partie
gameStats GlobalGameStats Statistiques globales de la partie
sortColumn string Colonne actuellement utilisée pour le tri du tableau
sortDescending boolean Indique si le tri est descendant
private subscriptions Subscription[] Liste des souscriptions aux observables

Interface GlobalGameStats

Propriété Type Description
duration string Durée totale de la partie (format MM

)
totalTurns number Nombre total de tours de jeu
tilesVisitedPercentage number Pourcentage de tuiles visitées
doorsToggledPercentage number Pourcentage de portes manipulées
totalTiles number Nombre total de tuiles dans la grille
accessibleTiles number Nombre de tuiles accessibles
totalDoors number Nombre total de portes dans le jeu

Méthodes

constructor(private statsService: StatsService, private chatService: ChatService, private gameViewService: GameViewService, private socketService: SocketService, private router: Router)

Description : Initialise le composant avec les services nécessaires.
Paramètres :

ngOnInit()

Description : Initialise le composant au chargement et s'abonne aux mises à jour des statistiques.
Retour : void
Détails :

loadGameStats()

Description : Charge les statistiques de jeu depuis le service.
Retour : void
Détails :

loadGlobalGameStats()

Description : Charge les statistiques globales de la partie.
Retour : void
Détails :

recalculateTotalTurns()

Description : Recalcule le nombre total de tours joués.
Retour : void
Détails : Met à jour le compteur global de tours en fonction des tours joués par les joueurs.

calculateTotalPlayerTurns()

Description : Calcule le nombre total de tours joués par tous les joueurs.
Retour : number - Nombre total de tours
Détails :

formatTime(seconds: number)

Description : Convertit un nombre de secondes en format MM
Paramètres : seconds - Nombre de secondes
Retour : string - Temps formaté
Détails : Divise les secondes en minutes et secondes, puis les formate avec des zéros en préfixe si nécessaire.

goToHome()

Description : Redirige vers la page d'accueil après nettoyage des ressources.
Retour : void
Détails :

getEmptyRows()

Description : Génère un tableau d'indices pour les lignes vides dans le tableau de statistiques.
Retour : number[] - Tableau d'indices
Détails : Utilisé pour maintenir une taille cohérente du tableau, même avec moins de joueurs que le maximum.

sortTable(column: string)

Description : Trie le tableau des joueurs selon la colonne spécifiée.
Paramètres : column - Nom de la colonne pour le tri
Retour : void
Détails :

ngOnDestroy()

Description : Nettoie les souscriptions lors de la destruction du composant.
Retour : void
Détails : Désabonne toutes les souscriptions pour éviter les fuites mémoire.

Éléments HTML importants

Composants utilisés

ChatboxComponent

Ce composant (déjà documenté dans d'autres sections) est intégré dans la page de statistiques pour permettre aux joueurs de continuer à communiquer après la fin de la partie.

Services utilisés

StatsService

Service responsable de la collecte, du stockage et de la récupération des statistiques de jeu.

Propriétés

Propriété Type Description
private gameStatsSubject BehaviorSubject<GameStats | null> Sujet BehaviorSubject pour les statistiques de jeu
private visitedTiles number Nombre de tuiles visitées
private totalTiles number Nombre total de tuiles
private accessibleTiles number Nombre de tuiles accessibles
private toggledDoors number Nombre de portes manipulées
private totalDoors number Nombre total de portes
private turnCount number Nombre total de tours
private playerVisitedTilesMap Map<string, Set<string>> Map des tuiles visitées par joueur
private allVisitedTilesSet Set<string> Ensemble de toutes les tuiles visitées
private gridMatrix { type: TileType }[][] Matrice de la grille de jeu
private gridSize number Taille de la grille

Interface GameStats

interface GameStats {
    players: Player[];
    winner: string;
    gameCode?: string;
    gameDuration?: number;
    totalTurns?: number;
    tilesVisitedPercentage?: number;
    doorsToggledPercentage?: number;
    accessibleTiles?: number;
    totalTiles?: number;
    totalDoors?: number;
}

Méthodes

incrementTurnCount()

Description : Incrémente le compteur de tours et met à jour les statistiques.
Retour : void

initializePlayerStartPosition(player: Player)

Description : Initialise les positions de départ des joueurs dans les statistiques de tuiles visitées.
Paramètres : player - Joueur à initialiser
Retour : void
Détails : Marque la position de départ et le point de spawn comme visités.

markTileVisited(position: { row: number; col: number }, playerName: string)

Description : Marque une tuile comme visitée par un joueur.
Paramètres :

Retour : void
Détails : Met à jour les ensembles de tuiles visitées par joueur et global, Met à jour les statistiques associées

setGrid(matrix: { type: TileType }[][], size: number)

Description : Définit la grille pour le calcul des statistiques.
Paramètres :

Retour : void
Détails : Calcule également le nombre de tuiles accessibles.

setTotalTiles(totalTiles: number)

Description : Définit le nombre total de tuiles dans la grille.
Paramètres : totalTiles - Nombre total de tuiles
Retour : void

markDoorToggled()

Description : Incrémente le compteur de portes manipulées.
Retour : void
Détails : Met à jour les statistiques de portes manipulées.

setTotalDoors(totalDoors: number)

Description : Définit le nombre total de portes dans le jeu.
Paramètres : totalDoors - Nombre total de portes
Retour : void

getGameStats()

Description : Récupère les statistiques de jeu.
Retour : GameStats | null - Statistiques de jeu ou null si non disponibles

setGameStats(players: Player[], winner: string, gameCode?: string)

Description : Définit les statistiques de jeu complet.
Paramètres :

Retour : void
Détails : Copie et calcule les statistiques finales pour chaque joueur, Calcule les pourcentages de tuiles visitées et portes manipulées

syncGameStats(visitedTiles: number, totalTiles: number, accessibleTiles: number, toggledDoors: number, totalDoors: number, turnCount: number, gameDuration: number)

Description : Synchronise les statistiques de jeu avec des données externes (du serveur). Paramètres :

Retour : void
Détails : Met à jour toutes les statistiques du jeu avec les données reçues.

private calculateAccessibleTiles()

Description : Calcule le nombre de tuiles accessibles dans la grille.
Retour : void
Détails : Compte les tuiles qui ne sont pas des murs ou des portes.

private updatePlayerTileStats()

Description : Met à jour les statistiques de tuiles visitées par joueur.
Retour : void
Détails : Calcule le pourcentage de tuiles visitées pour chaque joueur.

private updateGlobalTileStats()

Description : Met à jour les statistiques globales de tuiles visitées.
Retour : void
Détails : Calcule le pourcentage global de tuiles visitées.

private updateDoorStats()

Description : Met à jour les statistiques de portes manipulées.
Retour : void
Détails : Calcule le pourcentage de portes manipulées.

ChatService

Service responsable de la gestion des messages de chat entre les joueurs, déjà documenté dans d'autres sections.

Dans le contexte de la page de statistiques, ce service est utilisé pour:

GameViewService

Service permettant de gérer la vue du jeu, déjà documenté dans d'autres sections.

Dans le contexte de la page de statistiques, ce service est utilisé pour:

SocketService

Service gérant les communications WebSocket avec le serveur, déjà documenté dans d'autres sections.

Dans le contexte de la page de statistiques, ce service est utilisé pour:

Communication avec le Serveur

Le composant StatsPageComponent communique avec le serveur via Socket.IO pour plusieurs fonctionnalités:

  1. Mise à jour des statistiques : S'abonne à l'événement SocketIOEvents.GameStatsUpdated pour recevoir les statistiques actualisées du serveur.
  2. Chat entre joueurs : Utilise le ChatService pour continuer la communication entre joueurs.

Ces communications permettent de maintenir les statistiques synchronisées entre tous les clients et de permettre une discussion post-partie.

Traitement et affichage des données

Tableau de statistiques des joueurs

Le tableau affiche plusieurs colonnes de statistiques pour chaque joueur:

Chaque colonne peut être utilisée pour trier le tableau, en ordre croissant ou décroissant, permettant aux joueurs de comparer facilement différentes métriques de performance.

Statistiques globales

Une section dédiée affiche:

Ces métriques donnent un aperçu global de l'intensité et de la progression de la partie.

Navigation

La page de Statistiques peut rediriger vers:

  1. Page d'Accueil (MainPageComponent) - Via le bouton "RETOUR"

Cette transition est accompagnée d'un nettoyage complet des ressources (chat, état du jeu, statistiques) pour permettre de démarrer une nouvelle partie.