Classe du Jeu (Coté Serveur)
Cette section détaille les principales classes qui constituent le modèle de données du jeu. Ces classes représentent les entités fondamentales comme les parties en cours, les joueurs, la grille de jeu, et les objets, formant ainsi la structure de données sur laquelle repose l'ensemble du système.
OnGoingGame (on-going-game.ts)
Classe qui représente une partie en cours, avec sa logique de jeu et son état.
Propriétés importantes
game: Game
- Configuration de base du jeu (grille, règles)code: string
- Code unique de la partieplayers: (Player | Bot)[]
- Liste des joueurs et botsadminName: string
- Nom du joueur administrateurisLocked: boolean
- Si la partie est verrouilléeisGameTerminated: boolean
- Si la partie est terminéecurrentPlayerTurn: Player | Bot
- Joueur dont c'est le tourcurrentPhase: State
- Phase actuelle (attente, tour, fin)isDebug: boolean
- Si le mode debug est activé
Méthodes
constructor(newGame: Game = new Game(MEDIUM_GRID_SIZE, 'CTF'), newCode: string = '', adminPlayer: Player = new Player())
- Description: Initialise une nouvelle partie.
- Paramètres:
newGame
- Configuration du jeunewCode
- Code de la partieadminPlayer
- Joueur administrateur
- Importance: Élevée - Création d'une partie.
assignUniqueIds(): void
- Description: Attribue des identifiants uniques à tous les joueurs.
- Importance: Moyenne - Gestion des références.
- Détails: Format
${code}:${playerName}
.
nextCurrentPlayer(): void
- Description: Passe au joueur suivant et réinitialise ses points de mouvement.
- Importance: Élevée - Rotation des tours.
- Détails: Réévalue également les objets conditionnels du joueur.
findPlayerbyName(name: string)
- Description: Trouve un joueur par son nom.
- Paramètres:
name
- Nom du joueur. - Retour: Le joueur trouvé ou undefined.
- Importance: Élevée - Accès aux joueurs.
findPlayerByUniqueId(uniqueId: string)
- Description: Trouve un joueur par son identifiant unique.
- Paramètres:
uniqueId
- Identifiant unique. - Retour: Le joueur trouvé ou undefined.
- Importance: Moyenne - Alternative d'accès.
addPlayer(player: Player): void
- Description: Ajoute un joueur à la partie.
- Paramètres:
player
- Joueur à ajouter. - Importance: Élevée - Modification des participants.
removePlayer(player: Player): void
- Description: Retire un joueur de la partie.
- Paramètres:
player
- Joueur à retirer. - Importance: Élevée - Gestion des départs.
isLimitOfPlayersReached(): boolean
- Description: Vérifie si le nombre maximum de joueurs est atteint.
- Retour:
true
si la limite est atteinte,false
sinon. - Importance: Élevée - Gestion des entrées.
- Détails: Limite basée sur la taille de la grille (2, 4 ou 6 joueurs).
getAvailableAvatars(): string[]
- Description: Récupère les avatars qui ne sont pas utilisés.
- Retour: Liste des avatars disponibles.
- Importance: Moyenne - Configuration des bots.
getAvailableBotNames(): string[]
- Description: Récupère les noms de bots qui ne sont pas utilisés.
- Retour: Liste des noms disponibles.
- Importance: Moyenne - Configuration des bots.
getNumberOfPlayersDisconnected(): number
- Description: Compte le nombre de joueurs déconnectés.
- Retour: Nombre de déconnexions.
- Importance: Moyenne - Suivi des participants.
isAdmin(player: Player): boolean
- Description: Vérifie si un joueur est l'administrateur.
- Paramètres:
player
- Joueur à vérifier. - Retour:
true
si c'est l'admin,false
sinon. - Importance: Élevée - Contrôle des permissions.
isIceCell(row: number, col: number): boolean
- Description: Vérifie si une cellule est de la glace.
- Paramètres:
row
- Ligne de la cellulecol
- Colonne de la cellule
- Retour:
true
si c'est de la glace,false
sinon. - Importance: Moyenne - Détection d'environnement.
changeStateLocked()
- Description: Bascule l'état de verrouillage de la partie.
- Importance: Élevée - Contrôle d'accès.
initGame()
- Description: Initialise la partie pour le début du jeu.
- Retour: L'instance de la partie.
- Importance: Très élevée - Préparation du jeu.
- Détails: Établit l'ordre des joueurs et les place sur la grille.
Méthodes de pathfinding et d'action
allPossibleCell(player: Player): Vec2[]
ucs(initialPos: Vec2, finalPos: Vec2): { path: Vec2[]; cost: number }
getValidPositionsFrom(start: Vec2, movementPoints: number): Vec2[]
makeOrderOfPlayers()
allPossibleAttackCells(player: PlayerAbs): Cell[]
placePlayersInTheGrid()
getNeareastReacheableCell(player: PlayerAbs): Vec2
Ces méthodes sont déléguées à OnGoingGamePathFinding
et gèrent les déplacements. Importance: Très élevée - Mécaniques de mouvement.
Méthodes de gestion des objets
pickupItem(player: Player, position: Vec2): boolean
isInventoryFull(player: Player): boolean
placeItemOnGrid(item: Item, position: Vec2): void
reevaluateConditionalItems(player: Player): void
hasActiveItem(player: Player, itemId: string): boolean
swapItem(player: Player, newItem: Item, rejectedItemId: string): Item | null
checkWinCondition(player: Player): boolean
Ces méthodes sont déléguées à OnGoingGameItemHandling
et gèrent les objets.
Importance: Très élevée - Mécaniques d'objets.
setDebug(isDebug: boolean): void
- Description: Active ou désactive le mode debug.
- Paramètres:
isDebug
- État souhaité. - Importance: Élevée - Fonctionnalité de développement.
Player (player.ts)
Classe qui représente un joueur dans le jeu.
Propriétés importantes
Déjà détaillées dans la section "Gestion des Joueurs"
Méthodes
Déjà détaillées dans la section "Gestion des Joueurs"
Bot, AggressiveBot, DefensiveBot
Classes qui représentent les joueurs virtuels (IA).
Propriétés et méthodes importantes
Déjà détaillées dans la section "Gestion des Joueurs"
Game (game.ts)
Classe qui représente la configuration d'un jeu (plateau, règles).
Propriétés importantes
_id: ObjectId
- Identifiant MongoDBgrid: Grid
- Grille de jeuisVisible: boolean
- Si le jeu est visible publiquementname: string
- Nom du jeuitems: Item[]
- Objets placés sur la grillemode: string
- Mode de jeu (normal ou CTF)size: number
- Taille de la grilledescription: string
- Description du jeuimageUrl: string
- URL de l'image d'aperçulastModified: Date
- Date de dernière modificationstartPoints: { row: number; col: number }[]
- Points de départ des joueurs
Méthodes
constructor(grid: Grid, name: string)
- Description: Initialise un nouveau jeu.
- Paramètres:
grid
- Grille de jeuname
- Nom du jeu
- Importance: Élevée - Création d'un jeu.
- Détails: Initialise les propriétés par défaut et crée une grille vide.
Grid (grid.ts)
Classe qui représente la grille de jeu.
Propriétés importantes
matrix: Cell[][]
- Matrice 2D des cellulessize: number
- Taille de la grille (côté)
Méthodes
constructor(size: number)
- Description: Initialise une nouvelle grille.
- Paramètres:
size
- Taille de la grille. - Importance: Élevée - Création de la grille.
- Détails: Appelle
initializeMatrix()
.
initializeMatrix(): Cell[][]
- Description: Initialise la matrice avec des cellules vides.
- Retour: Matrice de cellules.
- Importance: Élevée - Structure de données fondamentale.
- Détails: Crée une matrice 2D de cellules initialisées comme sol.
Cell (cell.ts)
Classe qui représente une cellule de la grille.
Propriétés importantes
isOccupied: boolean
- Si la cellule est occupéeisOccupiedByItem: boolean
- Si la cellule contient un objetitem: Item
- Objet présent dans la cellulepositionX: number
- Ligne de la cellulepositionY: number
- Colonne de la celluletype: TileType
- Type de terrain (sol, mur, glace, etc.)player: Player | null
- Joueur présent sur la cellule
Méthodes
constructor(isOccupied: boolean, item: Item, positionX: number, positionY: number)
- Description: Initialise une nouvelle cellule.
- Paramètres:
isOccupied
- Si la cellule est occupéeitem
- Objet dans la cellulepositionX
- LignepositionY
- Colonne
- Détails: Initialise avec le type sol par défaut.
Item (item.ts)
Classe qui représente un objet dans le jeu.
Propriétés et méthodes importantes
Déjà détaillées dans la section "Gestion des Objets et Items"
Timer (timer.ts)
Classe qui gère les minuteurs du jeu.
Propriétés importantes
duration: number
- Durée totale en secondesremainingTime: number
- Temps restant en secondesintervalId: NodeJS.Timeout | null
- Référence à l'intervalleonUpdate: (remainingTime: number) => void
- Callback de mise à jouronEnd: () => void
- Callback de fin
Méthodes
constructor(duration: number, onUpdate: (time: number) => void, onEnd: () => void)
- Description: Initialise un nouveau minuteur.
- Paramètres:
duration
- Durée en secondesonUpdate
- Fonction appelée à chaque secondeonEnd
- Fonction appelée à la fin
- Importance: Élevée - Configuration du minuteur.
startTimer()
- Description: Démarre le minuteur.
- Importance: Élevée - Contrôle du temps.
- Détails: Appelle
updateTimer()
.
stopTimer(): void
- Description: Arrête le minuteur et le réinitialise.
- Importance: Élevée - Arrêt contrôlé.
- Détails: Efface l'intervalle et appelle
resetTimer()
.
pauseTimer(): void
- Description: Met le minuteur en pause.
- Importance: Élevée - Suspension temporaire.
- Détails: Efface l'intervalle sans réinitialiser le temps.
resumeTimer(): void
- Description: Reprend un minuteur en pause.
- Importance: Élevée - Continuation après pause.
- Détails: Ne fait rien si le minuteur est à zéro.
private resetTimer(): void
- Description: Réinitialise le temps restant à la durée initiale.
- Importance: Élevée - Préparation pour réutilisation.
private updateTimer()
- Description: Met à jour le minuteur toutes les secondes.
- Importance: Très élevée - Cœur du minuteur.
- Détails: Crée un intervalle qui décrément le temps, appelle
onUpdate
, et appelleonEnd
à zéro.
Relations d’héritage et d’interface
Player
→Bot
→ (AggressiveBot
,DefensiveBot
)OnGoingGame
implémenteOnGoingGameAbs
Player
implémentePlayerAbs
Game
implémenteGameAbs
Grid
implémenteGridAbs
Cell
implémenteCellAbs
Item
implémenteItemAbs
Compositions et agrégations
OnGoingGame
contientGame
et contient une liste dePlayer
/Bot
Game
contientGrid
et contient une liste d'Item
Grid
contient une matrice deCell
Cell
référencePlayer
etItem
Player
contient une liste d'Item
(inventaire)