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 :
statsService
: Service de gestion des statistiqueschatService
: Service de gestion du chatgameViewService
: Service de gestion de la vue du jeusocketService
: Service de communication socketrouter
: Service de navigation Angular
ngOnInit()
Description : Initialise le composant au chargement et s'abonne aux mises à jour des statistiques.
Retour : void
Détails :
- Charge les statistiques de jeu depuis le service
- S'abonne aux mises à jour des statistiques en temps réel
- Reconnecte le socket si nécessaire
loadGameStats()
Description : Charge les statistiques de jeu depuis le service.
Retour : void
Détails :
- Récupère les données de la partie (joueurs, gagnant, code)
- Charge les statistiques globales
- Rejoint la salle de chat correspondante au code de la partie
loadGlobalGameStats()
Description : Charge les statistiques globales de la partie.
Retour : void
Détails :
- Formate le temps de jeu
- Calcule les tours totaux
- Récupère les pourcentages de tuiles et portes
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 :
- Utilise une combinaison de métriques (combats, évasions, défaites, items) pour estimer les tours
- Prend en compte la vitesse des joueurs et le pourcentage de tuiles visitées
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 :
- Efface l'historique du chat
- Réinitialise l'état du jeu
- Déconnecte les ressources liées aux statistiques avant la redirection
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 :
- Inverse l'ordre si la même colonne est sélectionnée à nouveau
- Gère différemment les valeurs textuelles et numériques
- Crée une nouvelle copie triée du tableau des joueurs
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
- En-tête : Titre "STATISTIQUES DU JEU" et bouton de retour
- Tableau de statistiques des joueurs : Affiche les statistiques individuelles avec tri par colonne
- Résumé de partie : Affiche le gagnant et les statistiques globales
- Composant de chat : Permet la communication entre joueurs après la partie
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 :
position
- Coordonnées de la tuileplayerName
- Nom du joueur
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 :
matrix
- Matrice de la grillesize
- Taille de la grille
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 :
players
- Liste des joueurswinner
- Nom du joueur ou de l'équipe gagnantegameCode
- Code de la partie (optionnel)
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 :
visitedTiles
- Nombre de tuiles visitéestotalTiles
- Nombre total de tuilesaccessibleTiles
- Nombre de tuiles accessiblestoggledDoors
- Nombre de portes manipuléestotalDoors
- Nombre total de portesturnCount
- Nombre total de toursgameDuration
- Durée totale en secondes
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:
- Permettre la communication post-partie entre les joueurs
- Récupérer l'historique des messages de la partie
- Effacer les messages lors du retour à l'accueil
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:
- Réinitialiser l'état du jeu lors du retour à l'accueil
- Déconnecter les ressources de jeu après consultation des statistiques
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:
- Recevoir les mises à jour des statistiques en temps réel
- Rejoindre la salle de chat correspondant au code de partie
- Reconnecter le socket si nécessaire
Communication avec le Serveur
Le composant StatsPageComponent
communique avec le serveur via Socket.IO pour plusieurs fonctionnalités:
- Mise à jour des statistiques : S'abonne à l'événement
SocketIOEvents.GameStatsUpdated
pour recevoir les statistiques actualisées du serveur. - 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:
- Joueur : Avatar et nom
- Victoires : Nombre de victoires (particulièrement pertinent en mode CTF)
- Combats : Nombre total de combats engagés
- Évasions : Nombre de fois où le joueur s'est échappé d'un combat
- Défaites : Nombre de combats perdus
- PV perdus : Points de vie perdus au total
- Dégâts : Dommages totaux infligés
- Items : Nombre d'objets collectés
- % Tuiles : Pourcentage de tuiles visitées
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:
- Trophée du gagnant : Nom du joueur ou de l'équipe victorieuse
- Durée de la partie : Temps total en minutes et secondes
- Nombre de tours : Tours totaux joués
- Tuiles visitées : Pourcentage global de tuiles explorées
- Tuiles accessibles : Nombre de tuiles pouvant être visitées (non-murs)
- Portes manipulées : Pourcentage de portes ouvertes/fermées
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:
- 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.