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
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)
|