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. 57
      main.py
  11. 3
      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():
def __init__(self, nom, texte_de_presentation):
"""initialise une interface pour un combat"""
self.texte_de_presentation = texte_de_presentation
self.instructions()
def instructions(self):
print(texte_de_presentation)
from time import sleep
#======fonctions utiles======
def cls():
"""efface la console"""
print("\033[H\033[J", end="")
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:
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...")

57
main.py

@ -1,38 +1,67 @@
from random import randint, choice
from personnage import Personnage
from interface import Accueil
from interface import *
def combat(perso1, perso2):
"""simule un combat jusqu'à ce que les joueurs n'aient plus de vies"""
cls()
input("Pressez Entrée pour combattre...")
cls()
attaquant = perso1
defenseur = perso2
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():
defenseur.change_pdv(-randint(1,8))
elif attaquant.jet_attaque() < defenseur.jet_defense():
attaquant.change_pdv(-randint(1,4))
perso1.affiche_caracteristiques()
perso2.affiche_caracteristiques()
attaquant, defenseur = defenseur , attaquant
#perso1.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
#changement de l'exp
if perso1.pdv > 0:
perso1.change_exp(1)
else:
perso2.change_exp(1)
def main():
accueil("Jeu de rôle")
print("Bienvenue dans...")
affiche_fichier("ascii/titre_accueil.txt")
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) ? ")
"""programme principal"""
intro_bool = input("Voulez-vous l'intro longue ou courte ? (longue/courte) : ")
if intro_bool == "longue":
(nomJoueur1, catJoueur1) = intro_longue()
else:
(nomJoueur1, catJoueur1) = intro_courte()
joueur1 = Personnage(nomJoueur1, catJoueur1)
joueur2 = Personnage("ennemi", choice(["guerrier","magicien","voleur","elfe"]))
#le combat !
combat(joueur1, joueur2)
#affichage des résultats
if joueur1.exp > joueur2.exp:
youWon(perso1.nom)
else:
gameOver()
if __name__ == "__main__":
main()

3
personnage.py

@ -1,6 +1,7 @@
from random import randint
class Personnage:
def __init__(self, nom, cat):
"""initialise le personnage"""
self.nom = nom
self.pdv = 20
self.exp = 1
@ -40,9 +41,11 @@ class Personnage:
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):

Loading…
Cancel
Save