diff --git a/jeu_db.db b/jeu_db.db new file mode 100644 index 0000000..909e3e3 Binary files /dev/null and b/jeu_db.db differ diff --git a/jeu_role_LJO_5.3_sql.py b/jeu_role_LJO_5.3_sql.py new file mode 100644 index 0000000..e5ec73e --- /dev/null +++ b/jeu_role_LJO_5.3_sql.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +""" +Éditeur : Loïc J-O +Version 5.2 +Jeu de rôle (version SQL) + +Définit la table 'personnage' stockant et mettant à jour les attributs des personnages, +Définit la classe Personnage, une fonction de combat, initialise une base de données si non existante, +Initialise les 2 combattants (saisie clavier du nom et de la catégorie de chaque combattant), +Lance le combat (fonction Main_Combat() ), +Met à jour la DB avec les évolutions des caractéritiques des personnages créés, +Affiche le résultat à chaque échange puis affiche le résultat final. + + +""" +import random +import sqlite3 + + +class Personnage: + + def __init__ (self, nom, cat): + '''Initialisation de la class "Personnage" ayant comme attribus: + nom, hp (pdv, points de vie), xp (exp), cat, inventaire + ''' + '''Attributs invariants : + nom : nom du personnage + cat : la catégorie (guerrier, magicien, voleur, elfe) + Attribut "suplémentaire" pour l'utilisation de la DB : + ident : l'ident du personnage dans la DB + (Dans cette version du jeu, 'ident' n'est utile que pour différentier 2 joueurs + du même nom et de même catégorie des fois qu'on tombe sur un petit malin :-) ) + ''' + + self.nom = nom + self.hp = 20 + self.xp = 1 + self.cat = cat + + if self.cat == "guerrier" : + self.inventaire = "épée, potion" + elif self.cat == "magicien" : + self.inventaire = "bâton, potion" + elif self.cat == "voleur" : + self.inventaire = "dague, potion" + elif self.cat == "elfe" : + self.inventaire = "arc, potion" + + '''On met à jour la DB avec les infos du personnage et on récupère son identification DB :''' + + c_myDB.execute("INSERT INTO Personnages (nom, cat, xp, hp, inventaire) VALUES (?,?,?,?,?);", (self.nom, self.cat, self.xp, self.hp, self.inventaire)) + conn.commit() + c_myDB.execute("SELECT last_insert_rowid();") + self.ident = c_myDB.fetchone()[0] + + + def jet_attaque (self): + '''Renvoie le jet d'attaque.''' + if self.cat == "guerrier" or self.cat == "magicien": + coef = 10 + elif self.cat == "voleur": + coef = 3 + elif self.cat == "elfe": + coef = 8 + return random.randint(1, 20) + self.xp * coef + + def jet_defense (self): + '''Renvoie le jet de défense.''' + if self.cat == "guerrier": + coef = 8 + elif self.cat == "magicien": + coef = 7 + elif self.cat == "voleur": + coef = 9 + elif self.cat == "elfe": + coef = 10 + return random.randint(1, 20) + self.xp * coef + + def change_hp (self, nb_hp): + self.hp = self.hp + nb_hp + c_myDB.execute("UPDATE personnages SET hp=? WHERE ident=?;", (self.hp, self.ident)) + conn.commit() + + def change_xp (self, nb_xp): + self.xp = self.xp + nb_xp + c_myDB.execute("UPDATE personnages SET xp=? WHERE ident=?;", (self.xp, self.ident)) + conn.commit() + + def affiche_caracteristiques (self): + print("Le Grand", self.nom, " : ", self.cat, ", Points de vie : ", self.hp, ", Expérience : ", self.xp) + + def affiche_inventaire (self): + print("Inventaire : ", self.inventaire) + + + + +def Main_Combat (): + ''' + Fonction qui simule un combat + Player 1 attaque en premier, puis player 2 ... jusqu'à ce qu'un joueur n'ait plus de point de vie. + Mise à jour de la DB au fur et à mesure que la partie avance + Sortie : on affiche le gagnant et les caractéristiques des combattants (le gagnant voyant son Xp incrémentée de 1) + + ''' + + ''' + Initialisation d'une variable i permettant de changer d'attaquant entre deux coups : + dans le code, si i est impaire, player 1 attaque, si i est paire, player 2 attaque. + ''' + print("**********************************") + + i=1 + + while player1.hp > 0 and player2.hp > 0: + if i % 2 != 0 : + ''' i impair : attaque de player 1 ''' + if player1.jet_attaque() > player2.jet_defense() : + player2.change_hp(- random.randint(1, 8)) + print(player1.nom," gagne son attaque, ", player2.nom," perd des points !" ) + else : + player1.change_hp(- random.randint(1, 4)) + print(player1.nom, " perd son attaque, ", player1.nom," perd des points !") + + + else : + ''' i pair => attaque de player 2''' + if player2.jet_attaque() > player1.jet_defense() : + player1.change_hp(- random.randint(1, 8)) + print(player2.nom," gagne son attaque, ", player1.nom," perd des points !" ) + else : + player2.change_hp(- random.randint(1, 4)) + print(player2.nom, " perd son attaque, ", player2.nom," perd des points !" ) + + i=i+1 + + print("Bilan des 2 joueurs suite à l'attaque :") + player1.affiche_caracteristiques() + player2.affiche_caracteristiques() + print("**********************************") + + if player1.hp <= 0: + winner = player2.nom + player2.change_xp(+1) + else : + winner = player1.nom + player1.change_xp(+1) + + print("FIN DU COMBAT !!!") + print("Le gagnant du combat est le Grand ", winner, " en ", i-1, " échange(s)") + player1.affiche_caracteristiques() + player2.affiche_caracteristiques() + print("**********************************") + + + '''Rejouer :''' + rejouer() + +def rejouer(): + + print("ΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦ") + print("Vous pouvez rejouer, vos combattants seront remis à leur état de vie initiale, mais garderont l'expérience gagnée") + replayQuestion = input("Voulez-vous rejouer ? (oui ou non)") + print("ΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦ") + + if replayQuestion == 'oui': + player1.hp = 20 + player2.hp = 20 + + Main_Combat() + elif replayQuestion == 'non': + print('Bonne journée') + ''' Fermeture DB : ''' + conn.close() + else: + rejouer() + + + +'''********************************************************************''' +''' Lancement application ''' +'''********************************************************************''' + +print ("Jeu de rôle - choississez 2 combattants : leurs noms et leurs catégories, et le combat démarre !") + + +''' *** 1. connexion et création DB : *** ''' +conn = sqlite3.connect('jeu_db.db') +c_myDB = conn.cursor() +c_myDB.execute ('''CREATE TABLE if not exists Personnages +(ident INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT NOT NULL, cat TEXT NOT NULL, xp FLOAT NOT NULL, hp FLOAT NOT NULL, inventaire TEXT NOT NULL) ''') + + + +''' *** 2. Instanciation de 2 combattants : *** ''' +Test=False +while (Test==False): + player1 = Personnage(input("Joueur 1, veuillez choisissez votre nom : "), input("Joueur 1, veuillez choisissez votre catégorie (guerrier, magicien, elfe, voleur) : ")) + player2 = Personnage(input("Joueur 2, veuillez choisissez votre nom : "), input("Joueur 2, veuillez choisissez votre catégorie (guerrier, magicien, elfe, voleur): ")) + if (player1.cat=="guerrier" or player1.cat=="magicien" or player1.cat=="voleur" or player1.cat=="elfe" ) and (player2.cat=="guerrier" or player2.cat=="magicien" or player2.cat=="voleur" or player2.cat=="elfe"): + Test = True + else: + print("Cette catégorie de personnage n'existe pas !") + + +''' *** 3. Fonction Combat (qui intègre les échanges avec la DB) : *** ''' +Main_Combat() +