class BaseMob: """Classe de base représentant un mob avec différentes caractéristiques.""" # Types possibles FRIEND = 0 NEUTRAL = 1 ENEMY = 2 def __init__(self, name, max_pv, strength, protection, speed, mob_type): """ Initialisation d'un nouveau mob. :param name: Nom du mob :param max_pv: Points de vie maximum :param strength: Force d'attaque :param protection: Protection contre les dommages :param speed: Vitesse d'attaque (nombre d'attaques par tour) :param mob_type: Type de mob (0 = Ami, 1 = Neutre, 2 = Ennemi) """ self.name = name self.max_pv = max_pv self.current_pv = max_pv self.strength = strength self.protection = protection self.speed = speed self.mob_type = mob_type def change_type(self, new_type): """ Change le type du mob. :param new_type: Nouveau type (0 = Ami, 1 = Neutre, 2 = Ennemi) """ self.mob_type = new_type def change_pv(self, pv_modifier): """ Modifie les points de vie actuels du mob. :param pv_modifier: Valeur par laquelle modifier les PV (positive pour guérir, négative pour infliger des dégâts) """ if pv_modifier > 0: # Ajout de PV (guérison) self.current_pv = min(self.max_pv, self.current_pv + pv_modifier) else: # Retrait de PV (dommages) damage = pv_modifier + self.protection self.current_pv = max(0, self.current_pv + damage) def perform_attack(self, target): """ Le mob attaque une cible. :param target: Le mob cible de l'attaque """ for _ in range(self.speed): if target.current_pv <= 0: break target.change_pv(-self.strength) def __str__(self): """Retourne une représentation sous forme de chaîne du mob.""" return (f"{self.name} - PV: {self.current_pv}/{self.max_pv}, " f"Force: {self.strength}, Protection: {self.protection}, " f"Vitesse: {self.speed}")