Vue de Jeu

La page Vue de Jeu (GameViewPageComponent) constitue l'interface principale pendant le déroulement d'une partie. Elle offre une visualisation complète de la grille de jeu, des joueurs, des statistiques et des commandes nécessaires pour jouer. Cette page implémente toutes les fonctionnalités essentielles de jeu : déplacement des joueurs, actions sur les portes, combats, gestion des objets et communication entre les joueurs.

GameViewPageComponent

Vue d'ensemble

Le GameViewPageComponent est le composant central de l'expérience de jeu, orchestrant l'interaction entre de nombreux sous-composants et services. Il gère l'état du jeu en temps réel, synchronise les actions des joueurs, et permet différentes interactions avec la grille de jeu.

Propriétés

Propriété Type Description
@ViewChild(ChatboxComponent) ChatboxComponent Référence au composant de chat
subscriptions unknown[] Tableau des abonnements aux observables
currentGame$ OnGoingGame Jeu en cours
currentPlayer$ Player Joueur actuel (l'utilisateur)
state BehaviorSubject<State> État actuel du jeu
remainingTime number Temps restant pour le tour ou l'interlude
isTurnTime boolean Indique si c'est le temps de tour ou l'interlude
isInCombat boolean Indique si un combat est en cours
isGameAborted boolean Indique si la partie a été abandonnée
combat Combat Information sur le combat en cours
isGameEnded boolean Indique si la partie est terminée
winner string Nom du joueur gagnant
showAlert boolean Indique si une notification doit être affichée
allowCommands boolean Indique si les commandes sont disponibles
cellInformation$ Cell Informations sur la cellule sélectionnée
alertData { message: string; type: AlertNotification } Données pour l'alerte
audioPlayer HTMLAudioElement Lecteur audio pour la musique de fond
isMusicPlaying boolean Indique si la musique est en lecture
showItemRejectPopup boolean Indique si le popup de rejet d'objet est affiché
itemToPickup Item | null Objet à ramasser lors d'un inventaire plein
maxInventorySize number Taille maximale de l'inventaire (généralement 2)
updatedPlayerStats { playerName: string; hasFlag?: boolean } | null Statistiques mises à jour du joueur

Méthodes

Constructeur et initialisation

constructor(
    public gameViewService: GameViewService,
    private router: Router,
    private statsService: StatsService,
    private gameViewHandler: GameViewHandlerService
)

Description : Initialise le composant avec les services nécessaires, configure le lecteur audio et met en place les abonnements.

Gestion des événements clavier

@HostListener('document:keydown', ['$event'])
handleKeyboardEvent(event: KeyboardEvent)

Description : Intercepte les événements clavier pour gérer les raccourcis, notamment le mode debug (touche 'd'). Paramètres : event - Événement clavier Retour : void

Nettoyage des ressources

ngOnDestroy()

Description : Nettoie les abonnements et les ressources audio lors de la destruction du composant. Retour : void

Interactions avec la grille

onClickMatrix(event: Vec2)

Description : Gère les clics sur la grille de jeu, pour les déplacements ou les actions. Paramètres : event - Coordonnées de la cellule cliquée Retour : void

onRightClickMatrix(event: Vec2)

Description : Gère les clics droits sur la grille, utilisés pour la téléportation en mode debug ou pour afficher les informations sur les tuiles. Paramètres : event - Coordonnées de la cellule cliquée Retour : void

onHover(event: Vec2)

Description : Gère le survol des cellules pour afficher le chemin le plus court. Paramètres : event - Coordonnées de la cellule survolée Retour : void

Actions du joueur

onClickButtonAction()

Description : Active le mode action pour interagir avec les portes ou engager un combat. Retour : void

onClickButtonEndTurn()

Description : Termine le tour du joueur actuel prématurément.
Retour : void

onClickButtonQuit()

Description : Quitte la partie et retourne à l'écran d'accueil.
Retour : void

async activateDeplacement(path: Vec2[])

Description : Anime le déplacement du joueur le long d'un chemin.
Paramètres : path - Tableau des positions à traverser
Retour : Promise<void>

desactivateTileInfo()

Description : Désactive l'affichage des informations sur une tuile.
Retour : void

highlightDeplacementCase()

Description : Met en surbrillance les cases où le joueur peut se déplacer.
Retour : void

isCurrentPlayerTurn(): boolean

Description : Vérifie si c'est le tour du joueur actuel.
Retour : boolean - Vrai si c'est le tour du joueur actuel

Gestion du combat

onAbortedPopupClose()

Description : Gère la fermeture du popup d'abandon de partie.
Retour : void

onEndGamePopupClose()

Description : Gère la fermeture du popup de fin de partie et sauvegarde les statistiques. Retour : void

Gestion des alertes

displayAlert(message: string, type: AlertNotification = AlertNotification.Info)

Description : Affiche une alerte avec un message et un type spécifiques.
Paramètres :

Retour : void

hideAlert()

Description : Masque l'alerte actuellement affichée.
Retour : void

Gestion de la musique

playMusic()

Description : Démarre la lecture de la musique de fond.
Retour : void

toggleMusic()

Description : Bascule entre lecture et pause de la musique.
Retour : void

stopMusic()

Description : Arrête complètement la musique et réinitialise la position.
Retour : void

Gestion des objets

handleItemRejection(rejectedItem: Item)

Description : Gère le rejet d'un objet lorsque l'inventaire est plein.
Paramètres : rejectedItem - Objet à rejeter
Retour : void

cancelItemPickup()

Description : Annule le ramassage d'un objet lorsque l'inventaire est plein.
Retour : void

closeItemRejectPopup()

Description : Ferme le popup de rejet d'objet.
Retour : void

playerCanPlay(): boolean

Description : Vérifie si le joueur peut jouer en fonction de l'état du jeu.
Retour : boolean - Vrai si le joueur peut jouer

Initialisation et gestion de l'audio

private initializeAudio()

Description : Initialise le lecteur audio avec la musique de fond.
Retour : void

private setupSubscriptions()

Description : Configure tous les abonnements aux services et observables.
Retour : void

Éléments HTML importants

Composants utilisés

GridComponent

Composant responsable de l'affichage et de l'interaction avec la grille de jeu.

Propriétés principales

PlayerInfoComponent

Affiche les informations du joueur actuel.

Propriétés principales
Sections affichées

PlayerCommandsComponent

Fournit les boutons de commande pour le joueur.

Propriétés principales
Boutons principaux

GameInfoComponent

Affiche les informations générales sur la partie en cours.

Propriétés principales

TimerComponent

Affiche le temps restant pour le tour actuel ou l'interlude.

Propriétés principales

PlayersListComponent

Affiche la liste des joueurs dans la partie avec leurs statistiques.

Propriétés principales

ChatboxComponent

Permet aux joueurs de communiquer entre eux via un système de chat.

Propriétés principales

CombatMenuComponent

Interface dédiée à la gestion des combats entre joueurs.

Propriétés principales
Sections principales

AlertNotificationComponent

Affiche des notifications pour informer le joueur des événements du jeu.

Propriétés principales

TileInformationComponent

Affiche des informations détaillées sur la tuile sélectionnée.

Propriétés principales

ItemRejectPopupComponent

Interface pour gérer les objets lorsque l'inventaire est plein.

Propriétés principales

Services utilisés

GameViewService

Service central qui coordonne toutes les fonctionnalités de la vue de jeu.

Propriétés principales

Méthodes principales

resetGameState()

Description : Réinitialise l'état du jeu.

getPossibleMoves(), getCurrentGame(), getCurrentPlayer(), onChangeState(), ...

Description : Accesseurs pour les différents observables du service.

onClickAction()

Description : Active ou désactive le mode action.

onClickMatrix(event: Vec2)

Description : Gère les clics sur la grille de jeu.

onRightClickMatrix(event: Vec2)

Description : Gère les clics droits sur la grille.

handleDebug()

Description : Active ou désactive le mode debug.

updateAfterCombat(combat: Combat)

Description : Met à jour l'état du jeu après un combat.

updateAfterTeleportation(position: Vec2)

Description : Met à jour l'état du jeu après une téléportation.

highlightDeplacementCase()

Description : Met en évidence les cases où le joueur peut se déplacer.

removeHighlight(emptyPossibleMoves = true)

Description : Supprime les surlignages de la grille.

removeFastestPath()

Description : Supprime l'affichage du chemin le plus rapide.

GameViewHandlerService

Service qui gère les différents événements du jeu et leur impact sur la vue.

Méthodes principales

async handleDeplacement(steps: { path: Vec2[]; cost: number }, component: GameViewComponentInterface)

Description : Gère l'animation et la logique de déplacement.

handleDoorAction(event: Vec2 & { actionFailed?: boolean }, component: GameViewComponentInterface)

Description : Gère les actions sur les portes.

handleCombatStarted(combat: Combat, component: GameViewComponentInterface)

Description : Gère le début d'un combat.

async handleCombatEnded(combat: Combat, component: GameViewComponentInterface)

Description : Gère la fin d'un combat.

handlePlayerStatsUpdate(stats: PlayerStats, component: GameViewComponentInterface)

Description : Gère la mise à jour des statistiques d'un joueur.

handlePlayerLeft(player: { name: string; position: Vec2 }, component: GameViewComponentInterface)

Description : Gère le départ d'un joueur.

handleGameEnded(winner: string, component: GameViewComponentInterface)

Description : Gère la fin de la partie.

handleNextPlayer(nextPlayerName: string, component: GameViewComponentInterface)

Description : Gère le passage au joueur suivant.

saveGameStats(currentGame: OnGoingGame, winner: string, statsService: StatsService)

Description : Sauvegarde les statistiques de la partie.

playerCanPlay(currentGame: OnGoingGame, currentPlayer: Player, gameViewService: GameViewService): boolean

Description : Vérifie si le joueur peut jouer en fonction de l'état du jeu.

GameGridService

Service qui gère les interactions avec la grille de jeu.

Méthodes principales

highlightDeplacementCase(currentGame: OnGoingGame, possibleMoves: Vec2[])

Description : Met en surbrillance les cases où le joueur peut se déplacer.

removeHighlight(currentGame: OnGoingGame, emptyPossibleMoves = true, possibleMoves?: Vec2[])

Description : Supprime les surlignages de la grille.

removeFastestPath(currentGame: OnGoingGame)

Description : Supprime l'affichage du chemin le plus rapide.

teleportPlayer(currentGame: OnGoingGame, player: Player, position: Vec2)

Description : Téléporte un joueur à une position donnée.

updateAfterTeleportation(currentGame: OnGoingGame, position: Vec2)

Description : Met à jour l'état du jeu après une téléportation.

CombatService

Service qui gère la logique des combats entre joueurs.

Propriétés principales

Méthodes principales

startCombat(player1: Player, player2: Player)

Description : Démarre un combat entre deux joueurs.

attack(isDebug: boolean)

Description : Gère une action d'attaque dans le combat.

escape(isDebug: boolean)

Description : Gère une tentative d'évasion dans le combat.

endTurn()

Description : Termine le tour du joueur actuel dans le combat.

endCombat(winner: Player, loser: Player)

Description : Termine le combat avec un vainqueur et un perdant.

StatsService

Service qui gère les statistiques de jeu.

Méthodes principales

incrementTurnCount()

Description : Incrémente le compteur de tours.

initializePlayerStartPosition(player: Player)

Description : Initialise la position de départ d'un joueur dans les statistiques.

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

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

markDoorToggled()

Description : Marque une porte comme actionnée.

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

Description : Définit les statistiques globales de la partie.

ChatService

Service qui gère le système de chat entre les joueurs.

Propriétés principales

Méthodes principales

setGameCode(gameCode: string)

Description : Définit le code de la partie pour le chat.

sendMessage(content: string, author: string)

Description : Envoie un message dans le chat.

clearMessages()

Description : Efface tous les messages du chat.

LogService

Service qui gère le journal des événements du jeu.

Propriétés principales

Méthodes principales

addLogEntry(entry: LogEntry)

Description : Ajoute une entrée au journal.

addCustomLogEvent(title: string, content: string)

Description : Ajoute un événement personnalisé au journal.

clearLogEntries()

Description : Efface toutes les entrées du journal.

SocketService

Service qui gère la communication en temps réel avec le serveur via Socket.IO.

Méthodes principales

listen<T>(event: string): Observable<T>

Description : Écoute un événement socket et retourne un observable.

emit(event: string, data?: unknown)

Description : Émet un événement socket avec des données optionnelles.

joinRoom(gameCode: string)

Description : Rejoint une salle de jeu.

disconnect()

Description : Déconnecte le socket du serveur.

Communication avec le Serveur

La Vue de Jeu communique intensivement avec le serveur via Socket.IO pour maintenir la synchronisation entre tous les joueurs. Voici les principaux événements échangés:

Événements reçus

Événements émis

Mode Debug

Le mode Debug, accessible uniquement à l'administrateur du jeu, offre des fonctionnalités supplémentaires:

  1. Activation: Touche 'd' (administrateur uniquement)
  2. Fonctionnalités:
    • Téléportation: Clic droit sur une case accessible
    • Visualisation complète: Affichage de toutes les informations de jeu

Navigation

La Vue de Jeu peut rediriger vers:

  1. Page d'Accueil (MainPageComponent) - Lorsque le joueur quitte la partie
  2. Page de Statistiques (StatsPageComponent) - À la fin de la partie