Browse Source

correction de nombreux bugs, amélioration de l'interface

master
bollet.c 1 year ago
parent
commit
ae222241da
  1. 11
      ascii/elfe.txt
  2. 10
      ascii/etreEtrange.txt
  3. 7
      ascii/game_over.txt
  4. 11
      ascii/guerrier.txt
  5. 10
      ascii/magicien.txt
  6. 26
      ascii/titre_accueil.txt
  7. 12
      ascii/voleur.txt
  8. 8
      ascii/youWon.txt
  9. 133
      interface.py
  10. 55
      main.py
  11. 107
      personnage.py

11
ascii/elfe.txt

@ -0,0 +1,11 @@
.-''-. .---. ________ .-''-.
.'_ _ \ | ,_| | | .'_ _ \
/ ( ` ) ',-./ ) | .----' / ( ` ) '
. (_ o _) |\ '_ '`) | _|____ . (_ o _) |
| (_,_)___| > (_) ) |_( )_ || (_,_)___|
' \ .---.( . .-' (_ o._)__|' \ .---.
\ `-' / `-'`-'|___ |(_,_) \ `-' /
\ / | \| | \ /
`'-..-' `--------`'---' `'-..-'

10
ascii/etreEtrange.txt

@ -0,0 +1,10 @@
.-. .-') .-') _ _ .-')
\ ( OO ) ( OO ) ) ( \( -O )
;-----.\ .-'),-----. ,--./ ,--,' ,--. .-'),-----. ,--. ,--. ,------.
| .-. | ( OO' .-. '| \ | |\ .-')| ,|( OO' .-. ' | | | | | /`. '
| '-' /_)/ | | | || \| | )( OO |(_|/ | | | | | | | .-') | / | |
| .-. `. \_) | |\| || . |/ | `-'| |\_) | |\| | | |_|( OO )| |_.' |
| | \ | \ | | | || |\ | ,--. | | \ | | | | | | | `-' /| . '.'
| '--' / `' '-' '| | \ | | '-' / `' '-' '(' '-'(_.-' | |\ \
`------' `-----' `--' `--' `-----' `-----' `-----' `--' '--'

7
ascii/game_over.txt

@ -0,0 +1,7 @@
___ ___
/ __| __ _ _ __ ___ o O O / _ \ __ __ ___ _ _
| (_ | / _` | | ' \ / -_) o | (_) | \ V / / -_) | '_|
\___| \__,_| |_|_|_| \___| TS__[O] \___/ _\_/_ \___| _|_|_
_|"""""|_|"""""|_|"""""|_|"""""| {======|_|"""""|_|"""""|_|"""""|_|"""""|
"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'

11
ascii/guerrier.txt

@ -0,0 +1,11 @@
▄████ █ ██ ▓█████ ██▀███ ██▀███ ██▓▓█████ ██▀███
██▒ ▀█▒ ██ ▓██▒▓█ ▀ ▓██ ▒ ██▒▓██ ▒ ██▒▓██▒▓█ ▀ ▓██ ▒ ██▒
▒██░▄▄▄░▓██ ▒██░▒███ ▓██ ░▄█ ▒▓██ ░▄█ ▒▒██▒▒███ ▓██ ░▄█ ▒
░▓█ ██▓▓▓█ ░██░▒▓█ ▄ ▒██▀▀█▄ ▒██▀▀█▄ ░██░▒▓█ ▄ ▒██▀▀█▄
░▒▓███▀▒▒▒█████▓ ░▒████▒░██▓ ▒██▒░██▓ ▒██▒░██░░▒████▒░██▓ ▒██▒
░▒ ▒ ░▒▓▒ ▒ ▒ ░░ ▒░ ░░ ▒▓ ░▒▓░░ ▒▓ ░▒▓░░▓ ░░ ▒░ ░░ ▒▓ ░▒▓░
░ ░ ░░▒░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░▒ ░ ▒░ ▒ ░ ░ ░ ░ ░▒ ░ ▒░
░ ░ ░ ░░░ ░ ░ ░ ░░ ░ ░░ ░ ▒ ░ ░ ░░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░

10
ascii/magicien.txt

@ -0,0 +1,10 @@
▄▄▄▄███▄▄▄▄ ▄████████ ▄██████▄ ▄█ ▄████████ ▄█ ▄████████ ███▄▄▄▄
▄██▀▀▀███▀▀▀██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███▀▀▀██▄
███ ███ ███ ███ ███ ███ █▀ ███▌ ███ █▀ ███▌ ███ █▀ ███ ███
███ ███ ███ ███ ███ ▄███ ███▌ ███ ███▌ ▄███▄▄▄ ███ ███
███ ███ ███ ▀███████████ ▀▀███ ████▄ ███▌ ███ ███▌ ▀▀███▀▀▀ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ █▄ ███ ███ █▄ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
▀█ ███ █▀ ███ █▀ ████████▀ █▀ ████████▀ █▀ ██████████ ▀█ █▀

26
ascii/titre_accueil.txt

@ -0,0 +1,26 @@
88888888888 888 .d88888b. 888
888 888 d88P" "Y88b 888
888 888 888 888 888
888 88888b. .d88b. 888 888 888 888 .d88b. .d8888b 888888
888 888 "88b d8P Y8b 888 888 888 888 d8P Y8b 88K 888
888 888 888 88888888 888 Y8b 888 888 888 88888888 "Y8888b. 888
888 888 888 Y8b. Y88b.Y8b88P Y88b 888 Y8b. X88 Y88b.
888 888 888 "Y8888 "Y888888" "Y88888 "Y8888 88888P' "Y888
Y8b
.d888
d88P"
888888 .d88b. 888d888
888 d88""88b 888P"
888 888 888 888
888 Y88..88P 888
888 "Y88P" 888
.d888 888
d88P" 888
888 888
888888 888d888 .d88b. .d88b. .d88888 .d88b. 88888b.d88b.
888 888P" d8P Y8b d8P Y8b d88" 888 d88""88b 888 "888 "88b
888 888 88888888 88888888 888 888 888 888 888 888 888
888 888 Y8b. Y8b. Y88b 888 Y88..88P 888 888 888
888 888 "Y8888 "Y8888 "Y88888 "Y88P" 888 888 888

12
ascii/voleur.txt

@ -0,0 +1,12 @@
/$$
| $$
/$$ /$$ /$$$$$$ | $$ /$$$$$$ /$$ /$$ /$$$$$$
| $$ /$$//$$__ $$| $$ /$$__ $$| $$ | $$ /$$__ $$
\ $$/$$/| $$ \ $$| $$| $$$$$$$$| $$ | $$| $$ \__/
\ $$$/ | $$ | $$| $$| $$_____/| $$ | $$| $$
\ $/ | $$$$$$/| $$| $$$$$$$| $$$$$$/| $$
\_/ \______/ |__/ \_______/ \______/ |__/

8
ascii/youWon.txt

@ -0,0 +1,8 @@
__ __ U ___ u _ _ U ___ u _ _ _
\ \ / / \/"_ \/U |"|u| | __ __ \/"_ \/ | \ |"| U|"|u
\ V / | | | | \| |\| | \"\ /"/ | | | |<| \| |> \| |/
U_|"|_u.-,_| |_| | | |_| | /\ \ /\ / /\.-,_| |_| |U| |\ |u |_|
|_| \_)-\___/ <<\___/ U \ V V / U\_)-\___/ |_| \_| (_)
.-,//|(_ \\ (__) )( .-,_\ /\ /_,-. \\ || \\,-. |||_
\_) (__) (__) (__) \_)-' '-(_/ (__) (_") (_/ (__)_)

133
interface.py

@ -1,12 +1,125 @@
class FenetreCombat(): from time import sleep
def __init__(self, nom, texte_de_presentation):
"""initialise une interface pour un combat""" #======fonctions utiles======
self.texte_de_presentation = texte_de_presentation def cls():
"""efface la console"""
self.instructions() print("\033[H\033[J", end="")
def instructions(self):
print(texte_de_presentation)
def affiche_fichier(path): def affiche_fichier(path):
with open(path, 'r') as file: """affiche le contenu d'un fichier - ici ce seront des fichiers textes"""
with open(path, 'r', encoding="utf8") as file:
for line in file: for line in file:
print(line) print(line, end="")
print("")
def message_avec_suite(msg):
"""affiche un message lettre par lettre et attend que l'utilisateur presse 'Entrée'"""
for lettre in msg:
print(lettre, end="", flush=True)
sleep(0.02)
input("\n\n[Entrée]")
cls()
#===========Intros===========
def intro_longue():
"""intro du jeu, version longue
retourne le nom et la catégorie du joueur"""
cls()
#intro
message_avec_suite("Vous vous trouvez là, en face d'une porte mystérieuse.")
message_avec_suite("Hésitant un peu, vous la poussez, pour trouver un être étrange, assis derrière un bureau moderne.")
message_avec_suite("La porte se referme violemment derrière vous, comme par \033[3mmagie\033[0m.")
message_avec_suite("Vous êtes dans une fâcheuse position.")
affiche_fichier("ascii/titre_accueil.txt")
input("Appuyez sur Entrée pour jouer...")
cls()
#salutations
message_avec_suite("L'être étrange vous salue, d'une voix artificielle : \n")
affiche_fichier("ascii/etreEtrange.txt")
#nom du joueur
nomJoueur1 = input("\n\n Quel est ton nom ? : ")
while nomJoueur1 == "":
nomJoueur1 = input("J'aimerais bien savoir à qui je m'adresse ; quel est ton nom ? : ")
#42
if nomJoueur1 == "42":
youWon()
cls()
#2e partie de l'intro
#demander si 2 1ere l. pas superflues
message_avec_suite("Bon, "+nomJoueur1+", je vais t'offrir une seule chance de sortir d'ici.\nTu vas devoir affronter un de mes sbires.\nSi, par \033[3mchance\033[0m, tu arrives à gagner le combat, je te laisse sortir.")
q_reth = input("Acceptes-tu mon petit jeu ? (oui/oui) ")
if q_reth != "oui":
print("Parfait ! J'étais sûr que tu accepterais.")
message_avec_suite("Alors commençons...")
##choix des persos
print("Tu peux incarner 4 personnages.\nTous disposent d'une potion énergisante, qu'ils prendront automatiquement avant le combat.\n\n")
#guerrier
print("Le premier est le guerrier.")
affiche_fichier("ascii/guerrier.txt")
print("Voici ses stats: \nclasse d'attaque : 10 \nclasse de défense : 8")
print("Son arme préférée est l'épée.")
input("\n\nAppuyez sur Entrée pour voir le personnage suivant...")
cls()
#magicien
print("Le deuxième est le magicien.")
affiche_fichier("ascii/magicien.txt")
print("Voici ses stats: \nclasse d'attaque : 10 \nclasse de défense : 7")
print("Son arme préférée est le bâton.")
input("\n\nAppuyez sur Entrée pour voir le personnage suivant...")
cls()
#voleur
print("Le troisième est le voleur.")
affiche_fichier("ascii/voleur.txt")
print("Voici ses stats: \nclasse d'attaque : 3 \nclasse de défense : 3")
print("Son arme préférée est la dague.")
input("\n\nAppuyez sur Entrée pour voir le personnage suivant...")
cls()
#elfe
print("Le dernier est l'elfe.")
affiche_fichier("ascii/elfe.txt")
print("Voici ses stats: \nclasse d'attaque : 8 \nclasse de défense : 8")
print("Son arme préférée est l'arc.")
input("\n\nAppuyez sur Entrée pour choisir votre personnage...")
cls()
catJoueur1 = input("Donc, quel personnage choisis-tu ? \n Ecris le nom de ta catégorie en toutes lettres (guerrier/magicien/voleur/elfe) : ")
while not(catJoueur1 in ["guerrier","magicien", "voleur", "elfe"]):
cls()
print("Tu dois choisir une catégorie parmi : \n guerrier, \n magicien, \n voleur, \n et elfe.")
catJoueur1 = input("Donc, quel personnage choisis-tu ? \n Ecris le nom de ta catégorie en toutes lettres (guerrier/magicien/voleur/elfe) : ")
message_avec_suite("Que le combat commence !...")
return nomJoueur1, catJoueur1
def intro_courte():
"""intro du jeu, version courte
retourne le nom et la catégorie du joueur"""
nomJoueur1 = input("nom : ")
#42
if nomJoueur1 == "42":
youWon()
print("Les catégories sont : \n guerrier => entrez 0 \n magicien => entrez 1 \n voleur => entrez 2 \n elfe => entrez 3.")
catJoueur1 = input("catégorie : ")
while catJoueur1 not in ["0", "1", "2", "3"]:
print("Les catégories sont : \n guerrier => entrez 0 \n magicien => entrez 1 \n voleur => entrez 2 \n elfe => entrez 3.")
catJoueur1 = input("catégorie : ")
catJoueur1 = ["guerrier","magicien","voleur","elfe"][int(catJoueur1)]
return nomJoueur1, catJoueur1
#========Fins de partie==============
def youWon(nom):
"""affiche message de félicitation lorsque le joueur a gagné"""
print("Cher "+nom+", tu as gagné la partie ! (et ta liberté !)")
affiche_fichier("ascii/youWon.txt")
def gameOver():
"""affiche message de game over lorsque le joueur a perdu"""
affiche_fichier("ascii/game_over.txt")
print("Dommage...")

55
main.py

@ -1,38 +1,67 @@
from random import randint, choice from random import randint, choice
from personnage import Personnage from personnage import Personnage
from interface import Accueil from interface import *
def combat(perso1, perso2): def combat(perso1, perso2):
"""simule un combat jusqu'à ce que les joueurs n'aient plus de vies""" """simule un combat jusqu'à ce que les joueurs n'aient plus de vies"""
cls()
input("Pressez Entrée pour combattre...")
cls()
attaquant = perso1 attaquant = perso1
defenseur = perso2 defenseur = perso2
while perso1.pdv > 0 and perso2.pdv > 0: while perso1.pdv > 0 and perso2.pdv > 0:
perso1_anciens_pdv = perso1.pdv
perso2_anciens_pdv = perso2.pdv
if attaquant.jet_attaque() > defenseur.jet_defense(): if attaquant.jet_attaque() > defenseur.jet_defense():
defenseur.change_pdv(-randint(1,8)) defenseur.change_pdv(-randint(1,8))
elif attaquant.jet_attaque() < defenseur.jet_defense(): elif attaquant.jet_attaque() < defenseur.jet_defense():
attaquant.change_pdv(-randint(1,4)) attaquant.change_pdv(-randint(1,4))
perso1.affiche_caracteristiques() #perso1.affiche_caracteristiques()
perso2.affiche_caracteristiques() #perso2.affiche_caracteristiques()
cls()
print("Vous avez\033[36m",perso1.pdv,"\033[0mpoints de vie", end=" ")
diff = perso1.pdv - perso1_anciens_pdv
if diff < 0:
color = 31
else:
color = 39
print("(\033["+str(color)+"m"+str(diff)+"\033[0m points)")
print("Votre ennemi a\033[36m",perso2.pdv,"\033[0mpoints de vie", end=" ")
diff = perso2.pdv - perso2_anciens_pdv
if diff < 0:
color = 32
else:
color = 39
print("(\033["+str(color)+"m"+str(diff)+"\033[0m points)\n")
input("[Entrée]")
attaquant, defenseur = defenseur , attaquant attaquant, defenseur = defenseur , attaquant
#changement de l'exp
if perso1.pdv > 0: if perso1.pdv > 0:
perso1.change_exp(1) perso1.change_exp(1)
else: else:
perso2.change_exp(1) perso2.change_exp(1)
def main(): def main():
accueil("Jeu de rôle") """programme principal"""
print("Bienvenue dans...") intro_bool = input("Voulez-vous l'intro longue ou courte ? (longue/courte) : ")
affiche_fichier("ascii/titre_accueil.txt") if intro_bool == "longue":
(nomJoueur1, catJoueur1) = intro_longue()
else:
(nomJoueur1, catJoueur1) = intro_courte()
nomJoueur1 = input("Quel est votre nom ? ")
print("Vous pouvez être : \n guerrier \n magicien \n voleur \n elfe")
catJoueur1 = input("Quel est votre catégorie (l'écrire en toutes lettres) ? ")
while not(catJoueur1 in ["guerrier","magicien","voleur","elfe"]):
print("Vous devez choisir une catégorie parmi : \n guerrier, \n magicien, \n voleur, \n et elfe.")
catJoueur1 = input("Quel est votre personnage (l'écrire en toutes lettres) ? ")
joueur1 = Personnage(nomJoueur1, catJoueur1) joueur1 = Personnage(nomJoueur1, catJoueur1)
joueur2 = Personnage("ennemi", choice(["guerrier","magicien","voleur","elfe"])) joueur2 = Personnage("ennemi", choice(["guerrier","magicien","voleur","elfe"]))
#le combat !
combat(joueur1, joueur2) combat(joueur1, joueur2)
#affichage des résultats
if joueur1.exp > joueur2.exp:
youWon(perso1.nom)
else:
gameOver()
if __name__ == "__main__": if __name__ == "__main__":
main() main()

107
personnage.py

@ -1,57 +1,60 @@
from random import randint from random import randint
class Personnage: class Personnage:
def __init__(self, nom, cat): def __init__(self, nom, cat):
self.nom = nom """initialise le personnage"""
self.pdv = 20 self.nom = nom
self.exp = 1 self.pdv = 20
self.cat = cat self.exp = 1
self.cat = cat
self.switcher_obj = { self.switcher_obj = {
"guerrier" : "épée", "guerrier" : "épée",
"magicien" : "bâton", "magicien" : "bâton",
"voleur" : "dague", "voleur" : "dague",
"elfe" : "arc", "elfe" : "arc",
} }
self.inventaire = [self.switcher_obj.get(self.cat)] self.inventaire = [self.switcher_obj.get(self.cat)]
self.inventaire.append("potion") self.inventaire.append("potion")
def jet_attaque(self): def jet_attaque(self):
"""renvoie le jet d'attaque""" """renvoie le jet d'attaque"""
= randint(1,20) = randint(1,20)
self.switcher_classe = { self.switcher_classe = {
"guerrier" : 10, "guerrier" : 10,
"magicien" : 10, "magicien" : 10,
"voleur" : 3, "voleur" : 3,
"elfe" : 8, "elfe" : 8,
} }
self.classe = self.switcher_classe.get(self.cat) self.classe = self.switcher_classe.get(self.cat)
return + self.exp * self.classe return + self.exp * self.classe
def jet_defense(self):
"""renvoie le jet de défense"""
= randint(1,20)
self.switcher_classe = {
"guerrier" : 8,
"magicien" : 7,
"voleur" : 3,
"elfe" : 8,
}
self.classe = self.switcher_classe.get(self.cat)
return + self.exp * self.classe
def change_pdv(self, nb_pdv):
self.pdv += nb_pdv
def change_exp(self, nb_exp):
self.exp += nb_exp
def affiche_caracteristiques(self): def jet_defense(self):
"""affiche les caractéristiques du personnage""" """renvoie le jet de défense"""
print("nom : ", self.nom) = randint(1,20)
print("catégorie : ", self.cat) self.switcher_classe = {
print("points de vie : ", self.pdv) "guerrier" : 8,
print("expérience : ", self.exp) "magicien" : 7,
print("") "voleur" : 3,
def affiche_inventaire(self): "elfe" : 8,
"""affiche l'inventaire du personnage""" }
print("inventaire : ", self.inventaire) self.classe = self.switcher_classe.get(self.cat)
return + self.exp * self.classe
def change_pdv(self, nb_pdv):
"""change le total de points de vie"""
self.pdv += nb_pdv
def change_exp(self, nb_exp):
"""change le nombre de points d'experience"""
self.exp += nb_exp
def affiche_caracteristiques(self):
"""affiche les caractéristiques du personnage"""
print("nom : ", self.nom)
print("catégorie : ", self.cat)
print("points de vie : ", self.pdv)
print("expérience : ", self.exp)
print("")
def affiche_inventaire(self):
"""affiche l'inventaire du personnage"""
print("inventaire : ", self.inventaire)
Loading…
Cancel
Save