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.
128 lines
5.0 KiB
128 lines
5.0 KiB
3 weeks ago
|
import random as rd
|
||
|
|
||
|
class Monstre:
|
||
|
def __init__(self, nom, dsc, img=None, obj=None) -> None:
|
||
|
self.nom = nom
|
||
|
self.dsc = dsc
|
||
|
self.img = img
|
||
|
self.obj = obj
|
||
|
self.habilite = rd.randint(1,10)
|
||
|
self.endurance = rd.randint(1,10)
|
||
|
self.force = 2
|
||
|
self.courage = rd.randint(1,10)
|
||
|
if 'Squelette' in nom:
|
||
|
self.habilite = 4
|
||
|
self.endurance = 4
|
||
|
self.courage = 4
|
||
|
|
||
|
def get_description(self:'Monstre') -> str:
|
||
|
return self.dsc
|
||
|
|
||
|
def get_carac(self:'Monstre') -> str:
|
||
|
return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.courage}"
|
||
|
|
||
|
def est_hs(self:'Monstre')->bool:
|
||
|
return self.endurance <= 0
|
||
|
|
||
|
def subir_degats(self:'Monstre', degats:int) -> None:
|
||
|
if degats > 0:
|
||
|
self.endurance = self.endurance - degats
|
||
|
|
||
|
class Personnage:
|
||
|
def __init__(self, nom) -> None:
|
||
|
self.nom=nom
|
||
|
self.habilite = 5+rd.randint(1,4)
|
||
|
self.endurance = 8+rd.randint(1,8)
|
||
|
self.charisme = rd.randint(1,10)
|
||
|
self.vigilance = rd.randint(1,10)
|
||
|
self.force = 2
|
||
|
self.courage = rd.randint(1,10)
|
||
|
# self.discretion =
|
||
|
# self.lieu = None
|
||
|
# self.lieux_precedents =
|
||
|
self.objet = None
|
||
|
|
||
|
def est_hs(self:'Personnage') -> bool:
|
||
|
self.endurance <=0
|
||
|
|
||
|
def get_carac(self:'Personnage') -> str:
|
||
|
return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.courage} V{self.vigilance} \n{self.objet}"
|
||
|
|
||
|
def subir_degats(self:'Personnage', degats:int) -> None:
|
||
|
if degats > 0:
|
||
|
self.endurance = self.endurance - degats
|
||
|
|
||
|
def soigner(self:'Personnage', soins:int) -> None:
|
||
|
if soins > 0:
|
||
|
self.endurance = self.endurance + soins
|
||
|
|
||
|
|
||
|
|
||
|
def combattre(self:'Personnage', adversaire: 'Monstre') -> tuple:
|
||
|
# Lancer les dés pour le personnage
|
||
|
personnage_de1 = rd.randint(1, 6)
|
||
|
personnage_de2 = rd.randint(1, 6)
|
||
|
score_personnage = personnage_de1 + personnage_de2 + self.habilite
|
||
|
print(f"{self.nom} lance {personnage_de1} et {personnage_de2}, score total = {score_personnage}")
|
||
|
|
||
|
# Lancer les dés pour le monstre
|
||
|
monstre_de1 = rd.randint(1, 6)
|
||
|
monstre_de2 = rd.randint(1, 6)
|
||
|
score_monstre = monstre_de1 + monstre_de2 + adversaire.habilite
|
||
|
print(f"{adversaire.nom} lance {monstre_de1} et {monstre_de2}, score total = {score_monstre}")
|
||
|
|
||
|
# Vérifier si l'un des deux a fait un double
|
||
|
crit_personnage = (personnage_de1 == personnage_de2)
|
||
|
crit_monstre = (monstre_de1 == monstre_de2)
|
||
|
|
||
|
# Calculer les dégâts
|
||
|
degats_personnage = self.force
|
||
|
degats_monstre = adversaire.force
|
||
|
|
||
|
if crit_personnage:
|
||
|
degats_personnage *= 2
|
||
|
print(f"{self.nom} inflige un coup critique ! Les dégâts sont doublés !")
|
||
|
if crit_monstre:
|
||
|
degats_monstre *= 2
|
||
|
print(f"{adversaire.nom} inflige un coup critique ! Les dégâts sont doublés !")
|
||
|
|
||
|
# Comparer les scores
|
||
|
if score_personnage == score_monstre:
|
||
|
# Les deux scores sont identiques
|
||
|
self.subir_degats(1)
|
||
|
adversaire.subir_degats(1)
|
||
|
message = f"Égalité ! {self.nom} et {adversaire.nom} subissent chacun 1 point de dégâts."
|
||
|
print(message)
|
||
|
if self.est_hs() and adversaire.est_hs():
|
||
|
return ("MP", message)
|
||
|
elif self.est_hs():
|
||
|
return ("P", f"{self.nom} est HS ! {adversaire.nom} reste en vie.")
|
||
|
elif adversaire.est_hs():
|
||
|
return ("M", f"{adversaire.nom} est HS ! {self.nom} reste en vie.")
|
||
|
else:
|
||
|
return ("x", message)
|
||
|
elif score_personnage > score_monstre:
|
||
|
# Le personnage a gagné le combat
|
||
|
adversaire.subir_degats(degats_personnage)
|
||
|
message = f"{self.nom} inflige {degats_personnage} dégâts à {adversaire.nom}."
|
||
|
print(message)
|
||
|
if adversaire.est_hs():
|
||
|
return ("M", f"{adversaire.nom} est HS ! {self.nom} reste en vie.")
|
||
|
else:
|
||
|
return ("x", message)
|
||
|
else:
|
||
|
# Le monstre a gagné le combat
|
||
|
self.subir_degats(degats_monstre)
|
||
|
message = f"{adversaire.nom} inflige {degats_monstre} dégâts à {self.nom}."
|
||
|
print(message)
|
||
|
if self.est_hs():
|
||
|
return ("P", f"{self.nom} est HS ! {adversaire.nom} reste en vie.")
|
||
|
else:
|
||
|
return ("x", message)
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
a = Monstre("Squelette", "Un squelette semblant bouger seul et muni d'une épée.", "squelette.png")
|
||
|
b = Monstre("Yone", "Yone atroce de malone qui pue sa mère", "Yone.png")
|
||
|
c = Monstre("Viego", "Viego trop fort d'alexis lvl master", "Viego.png")
|