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.
105 lines
4.1 KiB
105 lines
4.1 KiB
10 months ago
|
# Importations
|
||
|
|
||
|
import interface # Dépendances : PIL(Pillow) et tkinter
|
||
|
import donnees
|
||
|
import sys
|
||
|
import pickle
|
||
|
|
||
|
# Déclaration des fonctions pour la sauvegarde
|
||
|
|
||
|
def sauvegarder_jeu(manoir, fichier):
|
||
|
with open(fichier, 'wb') as f:
|
||
|
pickle.dump(manoir, f)
|
||
|
|
||
|
def charger_jeu(fichier):
|
||
|
with open(fichier, 'rb') as f:
|
||
|
return pickle.load(f)
|
||
|
|
||
|
# Déclaration des fonctions pour le fichier texte
|
||
|
|
||
|
def rediriger_sortie_vers_fichier(fichier_sortie: str):
|
||
|
"""Redirige la sortie de la console vers un fichier texte."""
|
||
|
sys.stdout = open(fichier_sortie, "a")
|
||
|
sys.stderr = sys.stdout
|
||
|
|
||
|
def restaurer_sortie_console():
|
||
|
"""Restaure la sortie de la console après la redirection vers un fichier."""
|
||
|
sys.stdout.close()
|
||
|
sys.stdout = sys.__stdout__
|
||
|
sys.stderr = sys.__stderr__
|
||
|
|
||
|
# Déclaration des fonctions
|
||
|
|
||
|
def ihm_signale_evenement(evenement:'tkinter.Event', manoir:'Manoir', ihm:'IHM') -> None:
|
||
|
"""Fonction où on récupère des informations sur l'événément reçu via l'IHM"""
|
||
|
|
||
|
# On récupère la touche sur laquelle on vient d'appuyer
|
||
|
touche = evenement.char
|
||
|
print(f"\nEVENEMENT RECU : {evenement}") # Permet de voir le vrai événement
|
||
|
print(f"CODE PERSO : {touche}") # L'IHM permet de connaitre la touche utilisée
|
||
|
|
||
|
# Il faut maintenant gérer l'événement : modifier les données et redemander une affichage à l'IHM
|
||
|
|
||
|
h = manoir.heros
|
||
|
|
||
|
if touche == 'X' or touche == 'x':
|
||
|
sauvegarder_jeu(manoir, "sauvegarde_jeu.pkl")
|
||
|
print("Jeu sauvegardé.")
|
||
|
|
||
|
elif touche == 'V' or touche == 'v':
|
||
|
try:
|
||
|
manoir = charger_jeu("sauvegarde_jeu.pkl")
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
print("Jeu chargé.")
|
||
|
except FileNotFoundError:
|
||
|
print("Aucune sauvegarde trouvée.")
|
||
|
|
||
|
h = manoir.heros
|
||
|
|
||
|
if touche == 'N' or touche == 'n':
|
||
|
if h.aller_nord(): # Si aller au nord est possible et c'est bien passé
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'S' or touche == 's':
|
||
|
if h.aller_sud(): # Si aller au sud est possible et c'est bien passé
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'Q' or touche == 'q':
|
||
|
if h.aller_ouest(): # Si aller a l'ouest est possible et c'est bien passé
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'D' or touche == 'd':
|
||
|
if h.aller_est(): # Si aller a l'est est possible et c'est bien passé
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'C' or touche == 'c':
|
||
|
if h.combattre_monstre_actuel(): # Si combattre est possible et c'est bien passé
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'F' or touche == 'f':
|
||
|
if h.fuire(): # Si fuire est possible
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'U' or touche == 'u':
|
||
|
if h.ouvrir(manoir): # Si l'utilisation de la cle fonctionne
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
if touche == 'R' or touche == 'r':
|
||
|
modifier_affichage(manoir, ihm)
|
||
|
|
||
|
def modifier_affichage(manoir:'Manoir', ihm:'IHM') -> None:
|
||
|
"""Modifie les 5 champs de l'interface graphique"""
|
||
|
h = manoir.heros
|
||
|
ihm.afficher_txt_1( h.observer() ) # affiche le texte descriptif
|
||
|
ihm.afficher_txt_2( h.reflechir() ) # affiche les actions possibles
|
||
|
ihm.afficher_txt_3( h.get_carac() ) # affiche les caractéristiques du héros
|
||
|
ihm.afficher_img_1( h.lieu.img ) # affiche l'image éventuelle du lieu
|
||
|
if h.lieu.occupant:
|
||
|
ihm.afficher_img_2( h.lieu.occupant.img) # affiche l'image éventuelle du monstre
|
||
|
|
||
|
|
||
|
# PROGRAMME PRINCIPAL
|
||
|
|
||
|
#rediriger_sortie_vers_fichier("sortie_console.txt")
|
||
|
|
||
|
# Création des données et de l'interface graphique
|
||
|
m = donnees.peupler_manoir() # Création des données du manoir
|
||
|
ihm = interface.IHM() # Création de l'interface graphique
|
||
|
|
||
|
# ihm_signale_evenement va récupérer les événements sur l'ihm
|
||
|
ihm.signaler_evenement(lambda event: ihm_signale_evenement(event, m, ihm))
|
||
|
|
||
|
modifier_affichage(m, ihm)
|