Module RPG.characters.character

Classes

class Character (name: str, pv: int, atk: int, arm: int, lvl: int, number: int = 1, f: int = 1)

Classe de base pour définir des personnages

Expand source code
class Character:
    """
    Classe de base pour définir des personnages
    """
    def __init__(self, name:str, pv:int, atk:int, arm: int, lvl:int, number: int = 1, f:int = 1) -> None:
        if len(name)>25:
            raise Exception('Specified name is too long')
        
        self.lvl = lvl
            
        self.name = name

        self.f = f # Facteur de difficulté, f < 1 difficulté réduite, f > 1 augmentation de la difficulté
        self.pv = round((self.calc_stat(pv, 'pv') * self.f) / number)

        self.maxpv = self.pv
        self.atk = atk
        self.arm = arm

        self.isplayer = False

        self.attacks = dict()

    def calc_stat(self, base: int, stat: str = 'atk') -> int:
        """
        Permet de calculer les statistiques selon le niveau à partir des statistiques de base (modèle exponentiel)
        """
        match stat:
            case 'atk':
                r = .05 # Modifier la vitesse de la croissance exponentielle
                return round(base * (1 + r) ** (self.lvl - 1))
            
            case 'pv':
                r = .05
                return round(base * self.f * (1 + r) ** (self.lvl - 1))

        
    def attack(self, other: 'Character', attack: str) -> bool:
        """
        Permet de gérer une attaque d'un personnage sur un autre
        """
        if randint(0,100) > self.attacks[attack][1]:
            return False
        else:
            attackvalue = (self.calc_stat(self.atk, 'atk') * (self.attacks[attack][0]/100)) * (1 + uniform(-0.1, 0.1)) * 0.5

            other.pv -= round(max(0, attackvalue - attackvalue * (other.arm / 100)))
            if other.pv < 0:
                other.pv = 0 
            return True

    def is_alive(self) -> bool:
        """
        Permet de savoir si le personnage est encore en vie
        Retourne un booléen: True si le personnage est vie, sinon False
        """
        return self.pv > 0

Subclasses

Methods

def attack(self, other: Character, attack: str) ‑> bool

Permet de gérer une attaque d'un personnage sur un autre

def calc_stat(self, base: int, stat: str = 'atk') ‑> int

Permet de calculer les statistiques selon le niveau à partir des statistiques de base (modèle exponentiel)

def is_alive(self) ‑> bool

Permet de savoir si le personnage est encore en vie Retourne un booléen: True si le personnage est vie, sinon False