class morse(): def __init__(self): # Cette fonction est automatiquement éxécuter lors de la création de l'objetself.Complete = False self.PATH_SYMBOL = "./assets/morse/" self.MorseWordTable = { 'ABSTRAIT': 3, 'BAIGNER': 9, 'CACHOT': 10, 'DALLE': 2, 'ERREUR': 11, 'FLEUR': 6, 'GALLAIS': 8, 'HANCHE': 4, 'IDOLE': 1, 'JAPON': 5, 'KART': 8, 'LAIT': 11, 'MACRO': 4, 'NAVET': 10, 'OBJET': 4, 'PUIT': 10, 'QUEL': 11, 'RUELLE': 12, 'SANS': 9, 'TABLE': 8, 'ULTRA': 3, 'VACHE': 12, 'WAGON': 5, 'XYLENE': 3, 'YAOURT': 8, 'ZAFARI': 12, 'AMBRE': 4, 'BUCHE': 9, 'COFFRE': 7, 'DOIGT': 4, 'EFFET': 12, 'FIL': 7, 'GRENADE': 1, 'HOTEL': 11, 'IDEAL': 10, 'JOUET': 5, 'KAYAK': 5, 'LAMPE': 2, 'MANOIR': 3, 'NEZ': 6, 'OCEAN': 5, 'PETIT': 1, 'QUINTE': 4, 'RIRE': 1, 'SUIVRE': 7, 'TETE': 5, 'USINE': 6, 'VIVRE': 3, 'WIKI': 10, 'XYLOPHONE': 7, 'YEUX': 6, 'ZINC': 2, 'ANIMAL': 2, 'BEBE': 1, 'CUIVRE': 3, 'DORMIR': 2, 'EFFECTIF': 8, 'FABULEUX': 3, 'GRANDE': 12, 'HAUTEUR': 7, 'IDEE': 7, 'JOIE': 12, 'KOALA': 6, 'LOUP': 4, 'MOUCHE': 1, 'NOUS': 9, 'ORANGE': 11, 'POULET': 8, 'QUICHE': 6, 'RITUEL': 12, 'SAUCE': 10, 'TUILE': 9, 'UTILE': 2, 'VICTOIRE': 11, 'WEEKEND': 9, 'XENOPHOBE': 5, 'YOGA': 2, 'ZEN': 9} self.MorseLetter = { "A": ".-", "B":"-...", "C":"-.-.", "D":"-..", "E":".", "F":"..-.", "G":"--.", "H":"....", "I":"..", "J":".---", "K":"-.-", "L":"--.", "M":"--", "N":"-.", "O":"---", "P":".--.", "Q":"--.-", "R":".-.", "S":"...", "T":"-", "U":"..-", "V":"...-", "W":".--", "X":"-..-", "Y":"-.--", "Z":"--.."} self.frame = LabelFrame(Fen, text = "Morse") # On créer une sous-f enêtre self.frame.grid(row = 2, column = 2, sticky = "NEWS") # On l'affiche self.frame.grid_rowconfigure(1, weight = 1) # tout les objets seront centré horizontalement self.frame.grid_columnconfigure(1, weight = 1) # tout les objets seront centré verticalement self.morse = Label(self.frame, text = "", background = "lightgray", relief = SUNKEN, width = 2, height = 1) self.morse.grid(row = 1, column = 1) self.SelectButton = Button(self.frame, text = "", relief = RIDGE, width = 16, height = 3) self.SelectButton.grid(row = 2, column = 1) self.SelectFen = Toplevel() # Créer une fenêtre secondaire. self.SelectFen.iconbitmap(PATH_ASSETS + "icon.ico") # Change l'icone self.SelectFen.title("Emulateur - Morse") # Change le titre self.SelectFen.protocol('WM_DELETE_WINDOW', lambda: "pass") # Rend la fenêtre non fermable self.HideSymbol() def start(self): self.defuse = False self.SelectButton.config(command = self.ShowSymbol) # mot à afficher en morse ###### Img_random = list(range(1, 13)) # On créer une liste allant de 1 à 12 random.shuffle(Img_random) # On la mélange self.dico_PNG = {} # On créer un dico pour garder en mémoire toute les images self.dico_But = {} for index, Num_img in enumerate(Img_random): # On les affiches toutes dans des bouttons self.dico_PNG[Num_img] = ImageTk.PhotoImage(Image.open(PATH_ASSETS + "morse/" + str(Num_img) + ".png")) self.dico_But[Num_img] = Button(self.SelectFen, image = self.dico_PNG[Num_img], width = 200, height = 200, command = lambda x = Num_img: self.check(x)) self.dico_But[Num_img].grid(row = index // 3, column = index % 3) self.SelectFen.update() ###### ###### self.word = random.choice(list(self.MorseWordTable.keys())) # On prend un mot au pif dans la liste List_letter = [] for Letter in self.word: List_letter.append(self.MorseLetter[Letter]) self.word_morse = " ".join(List_letter) ###### self.LedMorse() self.True_symbol = self.MorseWordTable[self.word] def LedMorse(self, index = 0): # Responsable de l'affichage du mot en morse avec la LED if index < len(self.word_morse): if self.word_morse[index] == ".": self.morse.config(background = "yellow") Fen.after(250, lambda: self.morse.config(background = "lightgray")) Fen.after(750, lambda: self.LedMorse(index + 1)) # 500 ms d'attente entre les signaux, plus les 250ms ou elle reste allumé afin de séparer les points et les virgules entre eux elif self.word_morse[index] == "-": self.morse.config(background = "yellow") Fen.after(1000, lambda: self.morse.config(background = "lightgray")) Fen.after(1500, lambda: self.LedMorse(index + 1)) elif self.word_morse[index] == " ": Fen.after(2000, lambda: self.LedMorse(index + 1)) else: Fen.after(4000, lambda: self.LedMorse(index = 0)) def ShowSymbol(self): # Affiche la fenêtre de sélection self.SelectFen.deiconify() # Affiche la fenêtre de sélection self.SelectButton.config(command = self.HideSymbol, text = "Cacher les cartes") def HideSymbol(self): # Affiche la fenêtre de sélection self.SelectFen.withdraw() # Cache la fenêtre de sélection self.SelectButton.config(command = self.ShowSymbol, text = "Afficher les cartes") def check(self, symbol_press): if symbol_press == self.True_symbol: self.defuse = True for index in self.dico_But: self.dico_But[index].config(command = lambda: "pass") else: pass # + pénalité classModule["morse"] = morse()