Systeme de combat

Cette section détaille les composants qui gèrent le système de combat entre joueurs ou avec des bots.

Relations avec le côté Client

Côté client, plusieurs composants interagissent avec le système de combat:

Structure du combat

La structure d'un combat est définie par l'interface Combat qui contient:

CombatService (combat.service.ts)

Service principal qui implémente la logique centrale du système de combat.

Propriétés importantes

Méthodes

constructor()
startCombat(player1: Player, player2: Player, combatStartedManually = false): void
attack(isDebug: boolean): void
assignInitialRoles(): void
takeDamage(damage: number): void
escape(isDebug: boolean): void
endTurn(): void
endCombat(winner: Player, loser: Player): void
rollDice(dice: string, position: string): number
attemptEscape(): boolean
resetPlayer(player: Player): void

Méthodes de gestion des minuteurs

Ces méthodes gèrent les minuteurs qui limitent le temps d'action en combat.
Importance: Élevée - Maintient le rythme du combat.

getCurrentPlayerEscapeAttempts(): number
getCurrentCombat(): Combat

Méthodes privées

Ces méthodes privées implémentent des aspects spécifiques de la logique de combat. Importance: Élevée - Détails cruciaux de la mécanique.

CombatSocketService

Service (combat-socket.service.ts) qui gère les événements socket liés au combat.

Propriétés importantes

Méthodes

constructor()
initialize(service: IOnGoingGameService): void
handleSocket(socket: Socket): void
async startCombatManually(onGoingGame: OnGoingGame, player1: Player, player2: Player)
getCombatService(gameCode: string): CombatService
attack(combatService: CombatService, gameCode: string, isDebug: boolean): void
escape(combatService: CombatService, gameCode: string, isDebug: boolean): void
restartTimer(combatService: CombatService, gameCode: string, isDebug: boolean): void
handlePlayerDisconnect(gameCode: string, playerName: string): boolean
cleanupCombatResources(gameCode: string): void

Méthodes privées

Ces méthodes gèrent la persistance des statistiques de combat.
Importance: Élevée - Garantit l'intégrité des données.

CombatEndingService

Service (combat-ending.service.ts) qui gère la finalisation des combats et les conséquences (objets perdus, position, etc.).

Méthodes

constructor()
handleCombatEnd(combatService: CombatService, gameCode: string): void
handleLoserAfterCombat(onGoingGame: OnGoingGame, combatService: CombatService, gameCode: string): void
Méthodes privées

Ces méthodes gèrent la persistance et la diffusion des statistiques de combat.
Importance: Élevée - Maintien de la cohérence des données.

CombatHelperService

Service (combat-helper.service.ts) utilitaire qui fournit des fonctions d'aide pour le système de combat.

Méthodes

arePlayersAdjacent(player1: { row: number; col: number }, player2: { row: number; col: number }, onGoingGameService: OnGoingGameService): boolean
findNearbyCells(onGoingGame: OnGoingGame, position: { row: number; col: number }): { row: number; col: number }[]
getDirection(from: { row: number; col: number }, to: { row: number; col: number }): { row: number; col: number }
cleanupAllDisconnectedPlayers(game: OnGoingGame, gameCode: string, socketService: SocketService): void