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.
115 lines
4.3 KiB
115 lines
4.3 KiB
from random import randint
|
|
|
|
class Personnage :
|
|
def __init__(self, nom, cat) :
|
|
"""initialisation des attributs de la classe Personnage"""
|
|
self.nom = nom
|
|
categories = ["guerrier", "magicien", "voleur", "elfe"]
|
|
self.cat = categories[cat]
|
|
self.pv = 20
|
|
self.exp = 1
|
|
if self.cat == "guerrier" :
|
|
self.inv = ["épée", "potion"]
|
|
elif self.cat == "magicien" :
|
|
self.inv = ["bâton", "potion"]
|
|
elif self.cat == "voleur" :
|
|
self.inv = ["dague","potion"]
|
|
elif self.cat == "elfe" :
|
|
self.inv = ["arc","potion"]
|
|
|
|
def jet_attaque(self) :
|
|
"""fonction permettant de faire un jet de dé d'attaque"""
|
|
resultat_de = randint(1, 20)
|
|
if self.cat == "guerrier" or self.cat == "magicien" :
|
|
return resultat_de+self.exp*10
|
|
elif self.cat == "voleur" :
|
|
return resultat_de+self.exp*3
|
|
elif self.cat == "elfe" :
|
|
return resultat_de+self.exp*8
|
|
|
|
def jet_defense(self) :
|
|
"""fonction permettant de faire un jet de dé de défense"""
|
|
resultat_de = randint(1,20)
|
|
if self.cat == "guerrier" :
|
|
return resultat_de+self.exp*8
|
|
elif self.cat == "magicien" :
|
|
return resultat_de+self.exp*7
|
|
elif self.cat == "voleur" :
|
|
return resultat_de+self.exp*9
|
|
elif self.cat == "elfe" :
|
|
return resultat_de+self.exp*10
|
|
|
|
def change_pv(self, nb_pv) :
|
|
"""fonction permettant de changer les points de vie d'un personnage"""
|
|
self.pv += nb_pv
|
|
if self.pv < 0 :
|
|
self.pv = 0
|
|
|
|
def change_exp(self, nb_exp) :
|
|
"""fonction permettant de changer l'expèrience d'un personnage"""
|
|
self.exp += nb_exp
|
|
|
|
def affiche_caracteristiques(self) :
|
|
"""fonction permettant d'afficher les caractéristiques d'un personnage"""
|
|
print(f"{self.nom} le {self.cat} a actuellement {self.pv} PV et {self.exp} EXP")
|
|
|
|
def affiche_inventaire(self) :
|
|
"""fonction permettant d'afficher l'inventaire d'un personnage"""
|
|
print(f"Bonjour {self.nom}, voici ton inventaire :")
|
|
for i in range(len(self.inv)) :
|
|
print(f"- {self.inv[i]}")
|
|
|
|
def creation_perso() :
|
|
"""création d'un personnage"""
|
|
pseudo = input("Comment s'appelle votre personnage ? ")
|
|
categorie = int(input("De quel catégorie est votre personnage ? (0 pour guerrier, 1 pour magicien, 2 pour voleur, 3 pour elfe) "))
|
|
while not(0 <= categorie <= 3) :
|
|
categorie = int(input("De quel catégorie est votre personnage ? (1 pour guerrier, 2 pour magicien, 3 pour voleur, 4 pour elfe) "))
|
|
return Personnage(pseudo, categorie)
|
|
|
|
def phase_combat(attaquant, defenseur) :
|
|
"""fonction permettant de faire un round du combat principal"""
|
|
degats = attaquant.jet_attaque()
|
|
defense = defenseur.jet_defense()
|
|
|
|
if degats == defense :
|
|
print("il y a égalité sur les lancés, personne ne prend de dégâts")
|
|
print()
|
|
elif degats > defense :
|
|
perte_pv = randint(-8,-1)
|
|
defenseur.change_pv(perte_pv)
|
|
print(f"{attaquant.nom} inflige {abs(perte_pv)} dégâts d'attaque à {defenseur.nom}")
|
|
print()
|
|
elif degats < defense :
|
|
perte_pv = randint(-4,-1)
|
|
attaquant.change_pv(perte_pv)
|
|
print(f"{defenseur.nom} se défend parfaitement et inflige même {abs(perte_pv)} dégâts de contre à {attaquant.nom}")
|
|
print()
|
|
|
|
attaquant.affiche_caracteristiques()
|
|
print()
|
|
defenseur.affiche_caracteristiques()
|
|
print()
|
|
print("appuyer sur entrée pour continuer")
|
|
input()
|
|
|
|
def combat() :
|
|
"""fonction principale permettant de faire un combat entre 2 personnages"""
|
|
perso1 = creation_perso()
|
|
perso2 = creation_perso()
|
|
print()
|
|
|
|
while perso1.pv > 0 and perso2.pv > 0 :
|
|
phase_combat(perso1, perso2)
|
|
phase_combat(perso2, perso1)
|
|
|
|
if perso1.pv == 0 :
|
|
print("le combat est terminé")
|
|
print(f"{perso2.nom} a triomphé de {perso1.nom} et gagne 1 EXP")
|
|
perso2.change_exp(1)
|
|
elif perso2.pv == 0 :
|
|
print("le combat est terminé")
|
|
print(f"{perso1.nom} a triomphé de {perso2.nom} et gagne 1 EXP")
|
|
perso1.change_exp(1)
|
|
|
|
combat()
|