from random import randint from graphics.layers import Sprite import util.sqlite as sqlite class Material: POTION = "POTION" EPEE = "EPEE" BATON = "BATON" DAGUE = "DAGUE" ARC = "ARC" class Personnage: def __init__(self, nom, cat, personnage_type): #self.nom = nom #self.__pdv = 20 #self.__exp = 1 #self.cat = cat expcoef = None if cat == "Guerrier": #self.inventaire = [Material.EPEE, Material.POTION] expcoef = 10 elif cat == "Magicien": #self.inventaire = [Material.BATON, Material.POTION] expcoef = 10 elif cat == "Voleur": #self.inventaire = [Material.DAGUE, Material.POTION] expcoef = 3 elif cat == "Elfe": #self.inventaire = [Material.ARC, Material.POTION] expcoef = 8 sqlite.db.execute( """INSERT INTO personnages (nom, pdv, exp, cat, expcoef) VALUES (?, ?, ?, ?, ?);""", (nom, 20, 1, cat, expcoef) ) sqlite.db.execute("SELECT last_insert_rowid();") self._id = sqlite.db.fetchone()[0] Sprite(3, cat, personnage_type) def __select_value(self, value): sqlite.db.execute("SELECT ? FROM personnages WHERE id=?", (value, self._id)) return sqlite.db.fetchone() def get_nom(self): return self.__select_value("nom") def get_pdv(self): return self.__select_value("pdv") def get_exp(self): return self.__select_value("exp") def get_cat(self): return self.__select_value("cat") def get_expcoef(self): return self.__select_value("expcoef") def set_nom(self, v): Connection.db.execute(f"UPDATE personnages SET nom=? WHERE id={self.id}", v) def change_pdv(self, v): Connection.db.execute(f"UPDATE personnages SET pdv = CASE WHEN pdv - {v} < 0 THEN 0 ELSE {v} END WHERE id={self.id}") def change_exp(self, v): if v > 0: Connection.db.execute(f"UPDATE personnages SET exp=exp+? WHERE id={self.id}", v) else: raise ValueError("v attends un nombre positif") def set_cat(self, v): Connection.db.execute(f"UPDATE personnages SET cat=? WHERE id={self.id}", v) def set_expcoef(self, v): Connection.db.execute(f"UPDATE personnages SET expcoef=? WHERE id={self.id}", v) def jet_attaque(self): damage = randint(1, 20) self.change_exp(self.get_expcoef() * self.get_exp()) return damage def jet_defense(self): damage = randint(1, 20) self.change_exp(self.get_expcoef() * self.get_exp()) return damage def affiche_caracteristiques(self): return (f"Nom: {self.get_nom()}", f"Type de classe: {self.get_cat()}", f"Vie: {self.get_pdv()}", f"Expérience: {self.get_exp()}", f"XPCOEF: {self.get_expcoef()}" ) def affiche_inventaire(self): return ["- "+item for item in self.inventaire]