diff --git a/config.pickle b/config.pickle new file mode 100644 index 0000000..07bc3a0 Binary files /dev/null and b/config.pickle differ diff --git a/main.pyw b/main.pyw index 61f67ea..b9a8b57 100644 --- a/main.pyw +++ b/main.pyw @@ -1,6 +1,8 @@ ########### import ############# from tkinter import * import os +import pickle +import json ########## constante ########### PATH_MODULE = "module/" @@ -17,10 +19,12 @@ for file in os.listdir(PATH_MODULE): # On cherche les modules dans leur dossier class AppClass(): # Classe du "moteur" du jeu def __init__(self): # Initialisation + self.load() self.MainMenu() def MainMenu(self, selected = 0): # Niveau 1 + MainMenu_Option = { "Lancer" : self.start, "Option" : self.settings, @@ -38,16 +42,69 @@ class AppClass(): # Classe du "moteur" du jeu func_right = MainMenu_Option[MainMenu_Keys[selected]] # Renvoie la fonction associé à l'option selectionné + classModule["simon"].bind(UpCmd = func_up, DownCmd = func_down, LeftCmd = "pass", RightCmd = func_right) + def save(self): # self.config -> enregistrer dans un fichier pickle + with open(r"config.pickle", "wb") as file: + pickle.dump(self.config, file) + + + def load(self): # Lire le fichier pickle -> self.config + try: # En supposant que le fichier pickle existe et qu'il ne soit pas corrompu + with open(r"config.pickle","rb") as file: + self.config = pickle.load(file) + except: # Sinon, charge les options par défaut + with open(r"config.json","rb") as file: + self.config = json.load(file) + def start(self): pass # Code pour démarrer une partie - def settings(self): - classModule["display"].write("settings") + def settings(self, selected = 0): + # On créer un dictionnaire qui associe toute les options proposé à leur fonction respective. + SettingsMenu_Keys = list(self.config.keys()) # On créer une liste qui ne contient que les clé du dictionnaire, permettant d'utiliser des index numériques. + + classModule["display"].write(SettingsMenu_Keys[selected]) # On affiche le texte sur l'écran + + if selected == 0: func_up = "pass" # Si on est à la première option, ne fait rien + else: func_up = lambda: self.settings(selected = selected - 1) # sinon, remonte + + if selected == len(SettingsMenu_Keys) - 1: func_down = "pass" # Si on est à la dernière option, ne fait rien + else: func_down = lambda: self.settings(selected = selected + 1) # sinon, descend + + selected_name = SettingsMenu_Keys[selected] + func_right = lambda: self.modif_settings(selected_name = selected_name) # Renvoie la fonction associé à l'option selectionné + + func_left = lambda: self.MainMenu(selected = 1) + + classModule["simon"].bind(UpCmd = func_up, DownCmd = func_down, LeftCmd = func_left, RightCmd = func_right) + + + def modif_settings(self, selected_name, selected = 0): + # On créer une liste qui ne contient que les clé du dictionnaire, permettant d'utiliser des index numériques. + ModifSettingsMenu_Keys = self.config[selected_name]["Available"] + + classModule["display"].write(ModifSettingsMenu_Keys[selected]) # On affiche le texte sur l'écran + + if selected == 0: func_up = "pass" # Si on est à la première option, ne fait rien + else: func_up = lambda: self.modif_settings(selected_name = selected_name, selected = selected - 1) + + if selected == len(ModifSettingsMenu_Keys) - 1: func_down = "pass" # Si on est à la dernière option, ne fait rien + else: func_down = lambda: self.modif_settings(selected_name = selected_name, selected = selected + 1) # sinon, descend + + + func_right = lambda: "pass" + func_left = lambda: self.settings(selected = 0) + + classModule["simon"].bind(UpCmd = func_up, DownCmd = func_down, LeftCmd = func_left, RightCmd = func_right) + + # Faire le système pour confirmer + # + Bonus : afficher par défaut la valeur sur laquel le jeu est paramétrer + def leave(self): pass