# 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)