from random import* import sqlite3 class Personnage: def __init__(self, nom, cat): self.nom = nom self.cat = cat self.pdv = 20 self.exp = 1 self.inventaire = [] if self.cat == "Géant": self.inventaire = ["3 Rochers géants", "Grosse potion"] self.coefAtk = 6 self.coefDef = 10 elif self.cat == "Fée": self.inventaire = ["Arc féerique", "Potion"] self.coefAtk = 9 self.coefDef = 7 elif self.cat == "Démon": self.inventaire = ["épée malveillante", "Potion"] self.coefAtk = 8 self.coefDef = 8 elif self.cat == "Déesse": self.inventaire = ["Bâton miraculeux", "Potion"] self.coefAtk = 7 self.coefDef = 9 def jet_attaque(self): """renvoie jet d'attaque""" atkPoints = randint(1, 20) return atkPoints + self.exp*self.coefAtk*0.1 def jet_defense(self): """renvoie jet de défense""" defPoints = randint(1, 20) return defPoints + self.exp*self.coefDef*0.1 def affiche_coefatk(self): """renvoie le coef atk du personnage""" return self.coefAtk def affiche_coefdef(self): """renvoie le coef def du personnage""" return self.coefDef def change_pdv(self, nb_pdv): """modifie le nombre de points de vie""" self.pdv = self.pdv + nb_pdv def regen_pdv(self): """régénère les points de vie des 2 personnages pour un nouveau combat""" self.pdv = 20 def nombre_pdv(self): """renvoie le nombre de points de vie d'un personnage""" return self.pdv def change_exp(self, nb_exp): """modifie le nombre d'expérience""" self.exp = self.exp + nb_exp def affiche_nom(self): """renvoie le nom du personnage""" return self.nom def affiche_cat(self): """renvoie la catégorie du personnage""" return self.cat def affiche_xp(self): """renvoie l'xp du personnage""" return self.exp def affiche_caracteristiques(self): """affiche les caractéristiques du personnage (nom, catégorie, pdv, pts d'exp)""" print("Nom :", self.nom) print("Catégorie :", self.cat) print("Points de vie :", self.pdv) print("Points d'expérience:", self.exp) print("") def affiche_inventaire(self): """affiche le contenu de l'inventaire du personnage""" print("Contenu de l'inventaire de", self.nom, ":",self.inventaire) def affiche_inventaireSQL(self): """affiche le contenu de l'inventaire du personnage (pour SQL)""" return self.inventaire def combat(Perso1, Perso2): """simule un combat jusqu'à ce qu'un personnage n'a plus de points de vie puis donne un point d'expérience au survivant""" conn = sqlite3.connect("Personnage.db") c = conn.cursor() c.execute('''CREATE TABLE if not exists Personnage(nom VARCHAR(255), catégorie VARCHAR(255), pdv INT, xp INT, ObjetN°1 TEXT, ObjetN°2 TEXT, CoefAtk INT, CoefDef INT)''') Per1 = (Perso1.affiche_nom(), Perso1.affiche_cat(), Perso1.nombre_pdv(), Perso1.affiche_xp(), Perso1.affiche_inventaireSQL()[0],Perso1.affiche_inventaireSQL()[1], Perso1.affiche_coefatk(), Perso1.affiche_coefdef(),) c.execute("INSERT INTO Personnage VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Per1) Per2 = (Perso2.affiche_nom(), Perso2.affiche_cat(), Perso2.nombre_pdv(), Perso2.affiche_xp(), Perso2.affiche_inventaireSQL()[0],Perso2.affiche_inventaireSQL()[1], Perso2.affiche_coefatk(), Perso2.affiche_coefdef(),) c.execute("INSERT INTO Personnage VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Per2) c.execute("SELECT * FROM Personnage") print(c.fetchall()) conn.commit() roleAtk = Perso1 roleDef = Perso2 while Perso1.nombre_pdv() > 0 and Perso2.nombre_pdv() > 0: if roleAtk.jet_attaque() > roleDef.jet_defense(): roleDef.change_pdv(-randint(1, 8)) elif roleAtk.jet_attaque() < roleDef.jet_defense(): roleAtk.change_pdv(-randint(1, 4)) elif roleAtk.jet_attaque() == roleDef.jet_defense(): roleAtk.change_pdv(-9999999999) roleDef.change_pdv(-9999999999) Perso1.affiche_caracteristiques() Perso2.affiche_caracteristiques() roleAtk, roleDef = roleDef, roleAtk Per1 = (Perso1.affiche_nom(), Perso1.affiche_cat(), Perso1.nombre_pdv(), Perso1.affiche_xp(), Perso1.affiche_inventaireSQL()[0],Perso1.affiche_inventaireSQL()[1], Perso1.affiche_coefatk(), Perso1.affiche_coefdef(),) c.execute("INSERT INTO Personnage VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Per1) Per2 = (Perso2.affiche_nom(), Perso2.affiche_cat(), Perso2.nombre_pdv(), Perso2.affiche_xp(), Perso2.affiche_inventaireSQL()[0],Perso2.affiche_inventaireSQL()[1], Perso2.affiche_coefatk(), Perso2.affiche_coefdef(),) c.execute("INSERT INTO Personnage VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Per2) c.execute("SELECT * FROM Personnage") print(c.fetchall()) conn.commit() if Perso1.nombre_pdv() > 0: print(Perso2.affiche_nom(), "a succombé, la victoire revient à ",Perso1.affiche_nom(), "qui remporte un point d'expérience !") Perso1.change_exp(1) elif Perso2.nombre_pdv() > 0: print(Perso1.affiche_nom(), "a succombé, la victoire revient à ",Perso2.affiche_nom(), "qui remporte un point d'expérience !") Perso2.change_exp(1) elif Perso1.nombre_pdv() < 0 and Perso2.nombre_pdv() < 0: print("Le jet d'attaque et le jet de défense fuent de force égale ce qui a provoqué par une raison inexpliquable, une onde de choc et a alarmé la Corée du Nord ! Pris de panique, Kim jong-un lance une bombe atomique sur votre position !", Perso1.affiche_nom(), "et", Perso2.affiche_nom(), "ont tous deux succombés ! Match nul mais allez jouer au Loto!") Perso1.regen_pdv() Perso2.regen_pdv() conn.close() Squeezie = Personnage("Squeezie", "Déesse") TiboInShape = Personnage("TiboInShape", "Fée") # commande utile à copier : # - combat(Squeezie, TiboInShape)