Contrôle de Jeu et Vérification
Cette section détaille les composants responsables de la validation des configurations de jeu et de la gestion automatique des tuiles. Ces services garantissent l'intégrité et la jouabilité des parties.
Relations avec le côté Client
Côté client, plusieurs composants interagissent avec ces services:
EditService(client) utiliseAutoTileServicepour gérer la cohérence des mursGameService(client) communique avecGameManagerControllerpour les opérations CRUDGameBoxComponent(client) affiche les résultats de ces vérifications
GameVerifierService
Service (game-verification.service.ts) qui valide les configurations de jeu avant leur sauvegarde ou leur utilisation.
Méthodes
constructor(databaseService: DatabaseService)
Description: Initialise le service avec le service de base de données.
Paramètres: databaseService - Service d'accès à la base de données.
Importance: élevée - Injection standard.
async isGameValid(game: Game, id: string): Promise<string[]>
Description: Vérifie la validité globale d'un jeu.
Paramètres:
- game - Jeu à vérifier
- id - Identifiant MongoDB du jeu
Retour: Liste des raisons d'invalidité (vide si valide).
Importance: Très élevée - Point d'entrée de la validation.
Détails: Vérifie de nombreux aspects comme le nom, la description, les portes, la proportion de sol, les points de départ, etc.
isNamePresent(name: string): boolean
Description: Vérifie si un nom est présent et non vide.
Paramètres: name - Nom à vérifier.
Retour: true si le nom est valide, false sinon.
Importance: Élevée - Validation simple.
isDescPresent(desc: string): boolean
Description: Vérifie si une description est présente et non vide.
Paramètres: desc - Description à vérifier.
Retour: true si la description est valide, false sinon.
Importance: Élevée - Validation simple.
isDoorValid(grid: Grid, row: number, col: number): boolean
Description: Vérifie si une porte est placée correctement.
Paramètres:
- grid - Grille de jeu
- row - Ligne de la porte
- col - Colonne de la porte
Retour: true si la porte est valide, false sinon.
Importance: Élevée - Règle de placement.
Détails: Une porte valide doit avoir des murs de part et d'autre (verticalement ou horizontalement) et des sols de l'autre côté.
validateAllDoors(grid: Grid): boolean
Description: Vérifie que toutes les portes sont correctement placées.
Paramètres: grid - Grille de jeu.
Retour: true si toutes les portes sont valides, false sinon.
Importance: Élevée - Validation structurelle.
isWall(tile: string): boolean
Description: Vérifie si une tuile est un mur.
Paramètres: tile - Type de tuile.
Retour: true si c'est un mur, false sinon.
Importance: Élevée - Utilitaire.
isHalfFloor(grid: Grid): boolean
Description: Vérifie qu'au moins la moitié des tuiles sont des sols accessibles.
Paramètres: grid - Grille de jeu.
Retour: true si au moins 50% de sols, false sinon.
Importance: Élevée - Jouabilité.
Détails: Garantit un espace de jeu suffisant pour se déplacer.
async isNameValid(name: string): Promise<boolean>
Description: Vérifie qu'un nom de jeu n'est pas déjà utilisé.
Paramètres: name - Nom à vérifier.
Retour: true si le nom est disponible, false sinon.
Importance: Élevée - Unicité des jeux.
isStartpointsSet(game: Game): boolean
Description: Vérifie que les points de départ sont correctement configurés.
Paramètres: game - Jeu à vérifier.
Retour: true si les points de départ sont valides, false sinon.
Importance: Très élevée - Requis pour le placement des joueurs.
Détails: Vérifie le nombre de points de départ selon la taille de la grille (2 pour petite, 4 pour moyenne, 6 pour grande).
isTilesAccessible(grid: Grid): boolean
Description: Vérifie que toutes les tuiles traversables sont accessibles.
Paramètres: grid - Grille de jeu.
Retour: true si toutes les tuiles sont accessibles, false sinon.
Importance: Élevée - Jouabilité.
Détails: Utilise un algorithme BFS pour vérifier que toutes les tuiles traversables sont connectées.
isFlagPresent(grid: Grid): boolean
Description: Vérifie la présence d'un drapeau pour le mode CTF.
Paramètres: grid - Grille de jeu.
Retour: true si un drapeau est présent, false sinon.
Importance: Élevée - Requis pour le mode CTF.
hasRequiredItemCount(game: Game): boolean
Description: Vérifie que le jeu contient suffisamment d'objets.
Paramètres: game - Jeu à vérifier.
Retour: true si le nombre d'objets est suffisant, false sinon.
Importance: Élevée - Richesse du gameplay.
Détails: Nombre minimum basé sur la taille de la grille (2 pour petite, 4 pour moyenne, 6 pour grande).
Méthodes privées
private initializeVisitedMatrix(size: number): boolean[][]private findStartingTile(grid: Grid, traversableTiles: Set<TileType>, queue: [number, number][], visited: boolean[][]): numberprivate bfsTraversal(queue: [number, number][], grid: Grid, visited: boolean[][], traversableTiles: Set<TileType>): number
Ces méthodes sont des utilitaires pour l'algorithme de vérification d'accessibilité.
Importance: Élevée - Infrastructure de validation.
AutoTileService (auto-tile.service.ts)
Service qui gère la mise à jour automatique des tuiles de mur pour maintenir une apparence cohérente.
Propriétés importantes
BITMASK_TO_WALL: { [key: number]: string }- Dictionnaire associant un masque binaire à un type de mur
Méthodes
isWall(tileType: TileType | string): boolean
Description: Vérifie si une tuile est un mur.
Paramètres: tileType - Type de tuile.
Retour: true si c'est un mur, false sinon.
Importance: Élevée - Utilitaire.
determineWallType(grid: Grid, row: number, col: number): string
Description: Détermine le type de mur approprié selon les murs adjacents.
Paramètres:
- grid - Grille de jeu
- row - Ligne du mur
- col - Colonne du mur
Retour: Chemin de l'image du type de mur.
Importance: Très élevée - Cœur de l'auto-tiling.
Détails: Utilise un système de masque binaire où chaque bit représente la présence d'un mur dans une direction (haut, droite, bas, gauche).
updateAdjacentWalls(grid: Grid, row: number, col: number): void
Description: Met à jour les murs adjacents après l'ajout ou la suppression d'un mur.
Paramètres:
- grid - Grille de jeu
- row - Ligne du changement
- col - Colonne du changement
Importance: Très élevée - Maintien de la cohérence visuelle.
Détails: Vérifie les quatre directions et appelle determineWallType pour chaque mur adjacent.
GameManagerController
Contrôleur (game-manager.controller.ts) qui expose les endpoints API pour la gestion des jeux.
Méthodes
constructor(gameVerifier: GameVerifierService, databaseService: DatabaseService)
Description: Initialise le contrôleur avec les services nécessaires.
Paramètres:
- gameVerifier - Service de vérification des jeux
- databaseService - Service d'accès à la base de données
configureRoutes()
Description: Configure les routes de l'API pour la gestion des jeux.
Détails: Configure les routes suivantes:
POST /verify
Description: Vérifie la validité d'un jeu sans le sauvegarder.
Paramètres: Corps de la requête contenant l'objet Game.
Réponses:
- 200 OK si le jeu est valide
- 400 Bad Request avec les raisons d'invalidité sinon
PUT /
Description: Crée ou met à jour un jeu.
Paramètres: Corps de la requête contenant l'objet Game.
Réponses:
- 201 Created si le jeu est créé/mis à jour
- 400 Bad Request avec les raisons d'invalidité sinon
GET /
Description: Récupère tous les jeux.
Réponses:
- 200 OK avec la liste des jeux
- 404 Not Found si aucun jeu n'est trouvé
GET /:name
Description: Récupère un jeu par son nom.
Paramètres: name - Nom du jeu (dans l'URL).
Réponses:
- 200 OK avec le jeu
- 404 Not Found si le jeu n'existe pas
DELETE /:name
Description: Supprime un jeu par son nom.
Paramètres: name - Nom du jeu (dans l'URL).
Réponses:
- 204 No Content si le jeu est supprimé
- 404 Not Found si le jeu n'existe pas
GET /visibility/:name
Description: Vérifie la visibilité d'un jeu.
Paramètres: name - Nom du jeu (dans l'URL).
Réponses:
- 200 OK avec l'état de visibilité
- 404 Not Found si le jeu n'existe pas
PATCH /visibility/:name
Description: Bascule la visibilité d'un jeu.
Paramètres: name - Nom du jeu (dans l'URL).
Réponses:
- 200 OK si la visibilité est modifiée
- 404 Not Found si le jeu n'existe pas