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) utiliseAutoTileService
pour gérer la cohérence des mursGameService
(client) communique avecGameManagerController
pour 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[][]): number
private 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