You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.9 KiB

from random import randint
class Personnage:
def __init__(self, nom, cat):
self.nom = nom
self.pdv = 20
self.exp = 1
self.cat = cat
self.inventaire = []
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"]
#jet d'attaque
def jet_attaque(self):
lancer = randint(1, 20)
if self.cat == "guerrier":
degats = self.exp * 10
elif self.cat == "magicien":
degats = self.exp * 10
elif self.cat == "voleur":
degats = self.exp * 3
elif self.cat == "elfe":
degats = self.exp * 8
return lancer + degats
#jet de défense
def jet_defense(self):
lancer = randint(1, 20)
if self.cat == "guerrier":
protection = self.exp * 8
elif self.cat == "magicien":
protection = self.exp * 7
elif self.cat == "voleur":
protection = self.exp * 9
elif self.cat == "elfe":
protection = self.exp * 10
return lancer + protection
#changement de points de vie et d'experience
def change_pdv(self, nb_pdv):
self.pdv += nb_pdv
if self.pdv < 0:
self.pdv = 0
def change_exp(self, nb_exp):
if nb_exp < 0:
raise ValueError("le parametre doit etre positif")
self.exp = self.exp + nb_exp
#affichages
def affiche_caracteristiques(self):
print(self.nom, "vous etes un", self.cat, ", vous avez", self.pdv, " points de vie et", self.exp, "points d'experience.")
def affiche_inventaire(self):
print(self.inventaire)
# Instanciation des personnages
joueur1 = Personnage("Vyke", "guerrier")
joueur2 = Personnage("Ranni", "magicien")
# Fonction de combat
def combat(p1, p2):
attaquant = p1
defenseur = p2
tour = 1
while p1.pdv > 0 and p2.pdv > 0:
print("\n--- Tour {} ---".format(tour))
print("{} attaque {}".format(attaquant.nom, defenseur.nom))
att = attaquant.jet_attaque()
deff = defenseur.jet_defense()
print("Jet d'attaque de {} : {}".format(attaquant.nom, att))
print("Jet de défense de {} : {}".format(defenseur.nom, deff))
if att > deff:
degats = randint(1, 8)
defenseur.change_pdv(-degats)
print("{} réussi son attaque et lance un dé à 8 faces, il obtient {}. {} perd {} PDV !".format(attaquant.nom, degats, defenseur.nom, degats))
elif att < deff:
degats = randint(1, 4)
attaquant.change_pdv(-degats)
print("{} rate son attaque et subit une contre-attaque ! {} lance un dé à 4 faces et obtient {}. {} perd {} PDV.".format(attaquant.nom, defenseur.nom, degats, attaquant.nom, degats))
else:
print("Les attaques s'annulent, personne ne perd de points de vie")
# Affichage des stats
attaquant.affiche_caracteristiques()
defenseur.affiche_caracteristiques()
input("Presse la touche entrée pour continuer")
# Échange des rôles
attaquant, defenseur = defenseur, attaquant
tour += 1
# Fin du combat
print("\n--- Fin du combat ---")
if p1.pdv > 0:
print("{} a gagné le combat ! Il va pouvoir fêter ça à la taverne !".format(p1.nom))
p1.change_exp(1)
else:
print("{} a gagné le combat ! Il va pouvoir fêter ça à la taverne !".format(p2.nom))
p2.change_exp(1)
# Affichage final
print("\n--- Caractéristiques finales ---")
p1.affiche_caracteristiques()
p2.affiche_caracteristiques()
# Lancement du combat
combat(joueur1, joueur2)