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 :
message
- Message à affichertype
- Type d'alerte (Info, Warning, Success, Error
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
- Conteneur principal : Organisation des différentes sections du jeu
- Popups de fin de jeu : Affichés lorsque le jeu se termine ou est abandonné
- Grille de jeu : Interface principale pour visualiser et interagir avec le jeu
- Menu de combat : Interface dédiée pour les combats entre joueurs
- Notifications : Système d'alertes pour informer le joueur des événements
- Contrôle de musique : Bouton pour activer/désactiver la musique de fond
- Popup de rejet d'objets : Interface pour gérer un inventaire plein
Composants utilisés
GridComponent
Composant responsable de l'affichage et de l'interaction avec la grille de jeu.
Propriétés principales
@Input() grid
: La grille de jeu à afficher@Output() cellLeftClicked
: Événement émis lors d'un clic gauche sur une cellule@Output() cellRightClicked
: Événement émis lors d'un clic droit sur une cellule@Output() cellHover
: Événement émis lors du survol d'une cellule
PlayerInfoComponent
Affiche les informations du joueur actuel.
Propriétés principales
@Input() player
: Le joueur dont les informations sont affichées@Input() items
: Les objets dans l'inventaire du joueur@Input() isDebugMode
: Indique si le mode debug est activé
Sections affichées
- Profil du joueur (avatar, nom, équipe)
- Statistiques de jeu (HP, MP, attaque, défense, vitesse)
- Inventaire d'objets (jusqu'à deux objets)
PlayerCommandsComponent
Fournit les boutons de commande pour le joueur.
Propriétés principales
@Input() onNextMove
: Fonction pour activer le mode action@Input() onEndTurn
: Fonction pour terminer le tour@Input() onQuitGame
: Fonction pour quitter la partie@Input() isNextMoveButtonActive
: Indique si le bouton d'action est actif@Input() allowCommands
: Indique si les commandes sont disponibles
Boutons principaux
- "FIN DE TOUR" : Termine le tour prématurément
- "ACTION" : Active le mode action pour interagir
- "ABANDON" : Quitte la partie
GameInfoComponent
Affiche les informations générales sur la partie en cours.
Propriétés principales
@Input() gameSize
: Taille de la grille de jeu@Input() playerCount
: Nombre de joueurs dans la partie@Input() gameName
: Nom du jeu@Input() gameMode
: Mode de jeu (Classique ou CTF)
TimerComponent
Affiche le temps restant pour le tour actuel ou l'interlude.
Propriétés principales
@Input() time
: Temps restant@Input() isTurnTime
: Indique s'il s'agit du temps de tour ou de l'interlude@Input() activePlayer
: Nom du joueur actif
PlayersListComponent
Affiche la liste des joueurs dans la partie avec leurs statistiques.
Propriétés principales
@Input() players
: Liste des joueurs@Input() updatedPlayerStats
: Statistiques mises à jour d'un joueur
ChatboxComponent
Permet aux joueurs de communiquer entre eux via un système de chat.
Propriétés principales
@ViewChild('chatMessages')
: Référence à l'élément DOM des messagesmessages
: Liste des messages du chatnewMessage
: Message en cours de saisieisChatboxVisible
: Indique si la boîte de chat est visibleisJournalMode
: Indique si le mode journal est activéunreadMessagesCount
: Nombre de messages non lus
CombatMenuComponent
Interface dédiée à la gestion des combats entre joueurs.
Propriétés principales
@Input() gameCode
: Code de la partie@Input() player
: Joueur actuel@Input() combat
: Informations sur le combat en coursremainingTime
: Temps restant pour l'actionisPlayer1Attacking
,isPlayer2Attacking
: Indicateurs d'animation d'attaqueshowHitEffect
: Contrôle l'animation de coupisActionTaken
: Indique si une action a été prise
Sections principales
- Arena de combat avec avatars des joueurs
- Journal des actions de combat
- Boutons d'action (Attaquer, S'évader)
AlertNotificationComponent
Affiche des notifications pour informer le joueur des événements du jeu.
Propriétés principales
@Input() message
: Message à afficher@Input() type
: Type de notification (Info, Warning, Success, Error)@Output() closeAlert
: Événement émis pour fermer l'alerte
TileInformationComponent
Affiche des informations détaillées sur la tuile sélectionnée.
Propriétés principales
cell
: Cellule dont les informations sont affichéestype
: Type de la tuilecost
: Coût de déplacement sur la tuile
ItemRejectPopupComponent
Interface pour gérer les objets lorsque l'inventaire est plein.
Propriétés principales
@Input() isActive
: Indique si le popup est actif@Input() playerItems
: Objets dans l'inventaire du joueur@Input() newItem
: Nouvel objet à ramasser@Output() rejectItem
: Événement émis pour rejeter un objet@Output() cancel
: Événement émis pour annuler le ramassage
Services utilisés
GameViewService
Service central qui coordonne toutes les fonctionnalités de la vue de jeu.
Propriétés principales
isActionActivated
: Indique si le mode action est activépossibleMoves
: Liste des mouvements possiblestilePressed$
: Observable de la tuile sélectionnéecurrentGameSubject
: Subject du jeu en courscurrentPlayerSubject
: Subject du joueur actuelcanPlayerPlay$
: Subject indiquant si le joueur peut jouervisitedTilesSet
,toggeldDoorsSet
: Ensembles des tuiles visitées et portes actionnées
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
player1
,player2
: Les deux joueurs engagés dans le combatcurrentPlayer
,opponent
: Le joueur actuel et son adversairetimers
: Minuteries pour les actions de combatcombat
: Informations sur le combat en cours
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
messagesSubject
: Subject des messages de chatmessages$
: Observable des messages de chat
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
logEntriesSubject
: Subject des entrées du journal
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
SocketIOEvents.GameUpdated
: Mise à jour de l'état du jeuSocketIOEvents.PossibleMoves
: Mouvements possibles pour le joueurSocketIOEvents.TurnRemainingTime
: Temps restant pour le tourSocketIOEvents.InterludeRemainingTime
: Temps restant pour l'interludeSocketIOEvents.Deplacement
: Déplacement d'un joueurSocketIOEvents.ActionDoor
: Action sur une porteSocketIOEvents.CombatStarted
: Début d'un combatSocketIOEvents.CombatEnded
: Fin d'un combatSocketIOEvents.PlayerStatsUpdated
: Mise à jour des statistiques d'un joueurSocketIOEvents.GameEnded
: Fin de la partieSocketIOEvents.AbortGame
: Abandon de la partieSocketIOEvents.Alert
: Notification importanteSocketIOEvents.InventoryFull
: Inventaire plein lors du ramassage d'un objet
Événements émis
SocketIOEvents.Deplacement
: Demande de déplacementSocketIOEvents.TeleportPlayer
: Demande de téléportation (mode debug)SocketIOEvents.ActionDoor
: Demande d'action sur une porteSocketIOEvents.Attack
: Demande d'attaque dans un combatSocketIOEvents.Escape
: Demande d'évasion dans un combatSocketIOEvents.PlayerPlayed
: Notification de fin d'actionSocketIOEvents.EndTurn
: Demande de fin de tourSocketIOEvents.Debug
: Activation/désactivation du mode debugSocketIOEvents.RejectItem
: Rejet d'un objetSocketIOEvents.SwapRejectItem
: Échange d'un objet
Mode Debug
Le mode Debug, accessible uniquement à l'administrateur du jeu, offre des fonctionnalités supplémentaires:
- Activation: Touche 'd' (administrateur uniquement)
- 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:
- Page d'Accueil (
MainPageComponent
) - Lorsque le joueur quitte la partie - Page de Statistiques (
StatsPageComponent
) - À la fin de la partie