|
|
@ -1,4 +1,11 @@ |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
""" |
|
|
|
Cahier des charges respecté, sans ajout personnel. |
|
|
|
Pas de gestion d'un joueur qui existerait déjà. |
|
|
|
Code propre et fonctionnel. |
|
|
|
Note : 9 / 10 |
|
|
|
""" |
|
|
|
|
|
|
|
""" |
|
|
|
Éditeur : Loïc J-O |
|
|
|
Version 5.2 |
|
|
@ -18,7 +25,7 @@ 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 |
|
|
@ -31,12 +38,12 @@ class Personnage: |
|
|
|
(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" : |
|
|
@ -45,15 +52,15 @@ class Personnage: |
|
|
|
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": |
|
|
@ -63,7 +70,7 @@ class Personnage: |
|
|
|
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": |
|
|
@ -75,43 +82,43 @@ class Personnage: |
|
|
|
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 |
|
|
|
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 ''' |
|
|
@ -122,8 +129,8 @@ def Main_Combat (): |
|
|
|
player1.change_hp(- random.randint(1, 4)) |
|
|
|
print(player1.nom, " perd son attaque, ", player1.nom," perd des points !") |
|
|
|
|
|
|
|
|
|
|
|
else : |
|
|
|
|
|
|
|
else : |
|
|
|
''' i pair => attaque de player 2''' |
|
|
|
if player2.jet_attaque() > player1.jet_defense() : |
|
|
|
player1.change_hp(- random.randint(1, 8)) |
|
|
@ -133,40 +140,40 @@ def Main_Combat (): |
|
|
|
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') |
|
|
@ -201,8 +208,8 @@ while (Test==False): |
|
|
|
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() |
|
|
|
|
|
|
|