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:

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

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

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