Locks
2 years ago
2 changed files with 208 additions and 0 deletions
Binary file not shown.
@ -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() |
|||
|
Loading…
Reference in new issue