v0.14
Sauvegarde du 22/04/2020
This commit is contained in:
parent
ed1f7a18c3
commit
1dc79fe64b
9 changed files with 137 additions and 27 deletions
Binary file not shown.
BIN
config.pickle
BIN
config.pickle
Binary file not shown.
2
main.pyw
2
main.pyw
|
@ -55,6 +55,8 @@ class AppClass(): # Classe du "moteur" du jeu
|
||||||
def start(self):
|
def start(self):
|
||||||
classModule["simon"].bind(UpCmd = "pass", DownCmd = "pass", LeftCmd = "pass", RightCmd = "pass")
|
classModule["simon"].bind(UpCmd = "pass", DownCmd = "pass", LeftCmd = "pass", RightCmd = "pass")
|
||||||
|
|
||||||
|
self.Life = self.config["Vie"]["Value"] # On initialise le nombre de vie comme indiqué dans les paramètres
|
||||||
|
|
||||||
for module in classModule:
|
for module in classModule:
|
||||||
classModule[module].start()
|
classModule[module].start()
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,23 @@
|
||||||
class button():
|
class button():
|
||||||
def __init__(self): # Cette fonction est automatiquement éxécuter lors de la création de l'objet
|
def __init__(self): # Cette fonction est automatiquement éxécuter lors de la création de l'objet
|
||||||
|
self.rules = {
|
||||||
|
"Facile": {
|
||||||
|
"Else": "None"
|
||||||
|
}, "Normal": {
|
||||||
|
"F Blink": "3 any",
|
||||||
|
"F Off": "7 any",
|
||||||
|
"F On": "0 any"
|
||||||
|
}, "Difficile": {
|
||||||
|
"D Blink": "3 any",
|
||||||
|
"A Off": "7 any",
|
||||||
|
"B On": "0 any",
|
||||||
|
"F Blink": "5 sec",
|
||||||
|
"B Blink": "5 sec",
|
||||||
|
"C On": "3 sec",
|
||||||
|
"Else": "None"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.frame = LabelFrame(Fen, text = "Button") # On créer une sous-fenêtre
|
self.frame = LabelFrame(Fen, text = "Button") # On créer une sous-fenêtre
|
||||||
self.frame.grid(row = 2, column = 3, sticky = "NEWS") # On l'affiche
|
self.frame.grid(row = 2, column = 3, sticky = "NEWS") # On l'affiche
|
||||||
|
|
||||||
|
@ -9,8 +27,52 @@ class button():
|
||||||
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
pass
|
self.defuse = False
|
||||||
# déterminer les règles pour désamorçer
|
self.big_but.config(command = self.check)
|
||||||
|
|
||||||
|
|
||||||
|
def def_condition(self):
|
||||||
|
Difficulty = App.config["Difficulté"]["Value"]
|
||||||
|
Condition = list(self.rules[Difficulty].keys())
|
||||||
|
|
||||||
|
for index in range(len(Condition)):
|
||||||
|
Condition_split = Condition[index].split(" ")
|
||||||
|
|
||||||
|
if Condition_split[0] != "Else": State_led = classModule["wire"].dico_wire[Condition_split[0]]["LIT"] # Si la condition n'est pas else, on récupère l'état de la LED
|
||||||
|
else: State_led = Condition_split[-1] # Sinon, on fait en sorte que la condition fonctionne obligatoirement.
|
||||||
|
|
||||||
|
if State_led == Condition_split[-1]:
|
||||||
|
self.rules_chrono = self.rules[Difficulty][Condition[index]]
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
second = classModule["display"].second
|
||||||
|
minute = classModule["display"].minute
|
||||||
|
|
||||||
|
rules_chrono_split = self.rules_chrono.split(" ")
|
||||||
|
|
||||||
|
_Stop = False
|
||||||
|
|
||||||
|
if rules_chrono_split[0] != "None":
|
||||||
|
if rules_chrono_split[1] == "any":
|
||||||
|
if not(rules_chrono_split[0] in str(minute) + str(second)):
|
||||||
|
_Stop = True
|
||||||
|
|
||||||
|
if rules_chrono_split[1] == "sec":
|
||||||
|
if not(rules_chrono_split[0] in str(second)[-1]):
|
||||||
|
_Stop = True
|
||||||
|
|
||||||
|
|
||||||
|
if not(_Stop):
|
||||||
|
self.defuse = True
|
||||||
|
classModule["display"].checkDefuse()
|
||||||
|
|
||||||
|
else:
|
||||||
|
classModule["display"].PenalityLife()
|
||||||
|
|
||||||
|
|
||||||
classModule["button"] = button()
|
classModule["button"] = button()
|
||||||
|
|
||||||
|
# 2 - Le bouton doit être relié à la fonction "check"
|
||||||
|
# 3 - On vérifie que la condition est respecté
|
||||||
|
|
|
@ -12,19 +12,61 @@ class display():
|
||||||
self.label.config(text = text)
|
self.label.config(text = text)
|
||||||
|
|
||||||
|
|
||||||
def chrono(self, time):
|
def chrono(self):
|
||||||
minute = time // 60
|
self.time -= 1
|
||||||
seconde = time % 60
|
self.minute = self.time // 60
|
||||||
|
self.second = self.time % 60
|
||||||
|
|
||||||
self.write("%02i:%02i" % (minute, seconde))
|
if self.PenalityAnimation: # Si le joueur vient de se trompé
|
||||||
|
self.PenalityAnimation = False
|
||||||
|
self.write("/!\\ Erreur /!\\\nVie restante : %i" % App.Life)
|
||||||
|
|
||||||
self.chrono_event = Fen.after(1000, lambda: self.chrono(time - 1))
|
elif self.DefuseAnimation: # Si le joueur vient de désamorçé tout le module
|
||||||
|
self.DefuseAnimation = False
|
||||||
|
self.write("Module désamorcé !")
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.write("%02i:%02i" % (self.minute, self.second))
|
||||||
|
|
||||||
|
if self.time > 0:
|
||||||
|
self.chrono_event = Fen.after(1000, self.chrono)
|
||||||
|
else: self.Lose() # Perdu par manque de temps
|
||||||
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.chrono(time = 180)
|
self.PenalityAnimation = False
|
||||||
# rien de spécial
|
self.DefuseAnimation = False
|
||||||
# peut être chrono
|
self.time = 181 # En lanceant le chrono, une seconde est immédiatement supprimée
|
||||||
|
self.chrono()
|
||||||
|
|
||||||
|
|
||||||
|
def checkDefuse(self):
|
||||||
|
self.time += App.config["Bonus de temps"]["Value"]
|
||||||
|
|
||||||
|
_Stop = False
|
||||||
|
for module in classModule:
|
||||||
|
if classModule[module].defuse == False:
|
||||||
|
_Stop = True
|
||||||
|
|
||||||
|
if not(_Stop): # Si tout les modules sont désamorcé
|
||||||
|
Fen.after_cancel(self.chrono_event) # On désactive le chrono
|
||||||
|
self.write(random.choice(["GG", "Bravo", "Félicitation"]))
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.DefuseAnimation = True
|
||||||
|
|
||||||
|
|
||||||
|
def PenalityLife(self):
|
||||||
|
App.Life -= 1
|
||||||
|
self.PenalityAnimation = True
|
||||||
|
|
||||||
|
if App.Life <= 0:
|
||||||
|
self.Lose()
|
||||||
|
|
||||||
|
|
||||||
|
def Lose(self):
|
||||||
|
Fen.after_cancel(self.chrono_event) # On désactive le chrono
|
||||||
|
self.write(random.choice(["Perdu", "Dommage", "Try again"]))
|
||||||
|
# Réitialiser tout les modules
|
||||||
|
|
||||||
classModule["display"] = display()
|
classModule["display"] = display()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class morse():
|
class morse():
|
||||||
def __init__(self): # Cette fonction est automatiquement éxécuter lors de la création de l'objetself.Complete = False
|
def __init__(self): # Cette fonction est automatiquement éxécuter lors de la création de l'objet
|
||||||
self.PATH_SYMBOL = "./assets/morse/"
|
self.PATH_SYMBOL = "./assets/morse/"
|
||||||
self.MorseWordTable = {
|
self.MorseWordTable = {
|
||||||
'ABSTRAIT': 3, 'BAIGNER': 9, 'CACHOT': 10, 'DALLE': 2, 'ERREUR': 11, 'FLEUR': 6,
|
'ABSTRAIT': 3, 'BAIGNER': 9, 'CACHOT': 10, 'DALLE': 2, 'ERREUR': 11, 'FLEUR': 6,
|
||||||
|
@ -13,13 +13,15 @@ class morse():
|
||||||
'CUIVRE': 3, 'DORMIR': 2, 'EFFECTIF': 8, 'FABULEUX': 3, 'GRANDE': 12, 'HAUTEUR': 7,
|
'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,
|
'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,
|
'POULET': 8, 'QUICHE': 6, 'RITUEL': 12, 'SAUCE': 10, 'TUILE': 9, 'UTILE': 2,
|
||||||
'VICTOIRE': 11, 'WEEKEND': 9, 'XENOPHOBE': 5, 'YOGA': 2, 'ZEN': 9}
|
'VICTOIRE': 11, 'WEEKEND': 9, 'XENOPHOBE': 5, 'YOGA': 2, 'ZEN': 9
|
||||||
|
}
|
||||||
|
|
||||||
self.MorseLetter = {
|
self.MorseLetter = {
|
||||||
"A": ".-", "B":"-...", "C":"-.-.", "D":"-..", "E":".", "F":"..-.", "G":"--.",
|
"A": ".-", "B":"-...", "C":"-.-.", "D":"-..", "E":".", "F":"..-.", "G":"--.",
|
||||||
"H":"....", "I":"..", "J":".---", "K":"-.-", "L":"--.", "M":"--", "N":"-.",
|
"H":"....", "I":"..", "J":".---", "K":"-.-", "L":"--.", "M":"--", "N":"-.",
|
||||||
"O":"---", "P":".--.", "Q":"--.-", "R":".-.", "S":"...", "T":"-", "U":"..-",
|
"O":"---", "P":".--.", "Q":"--.-", "R":".-.", "S":"...", "T":"-", "U":"..-",
|
||||||
"V":"...-", "W":".--", "X":"-..-", "Y":"-.--", "Z":"--.."}
|
"V":"...-", "W":".--", "X":"-..-", "Y":"-.--", "Z":"--.."
|
||||||
|
}
|
||||||
|
|
||||||
self.frame = LabelFrame(Fen, text = "Morse") # On créer une sous-fenêtre
|
self.frame = LabelFrame(Fen, text = "Morse") # On créer une sous-fenêtre
|
||||||
self.frame.grid(row = 2, column = 2, sticky = "NEWS") # On l'affiche
|
self.frame.grid(row = 2, column = 2, sticky = "NEWS") # On l'affiche
|
||||||
|
@ -107,12 +109,12 @@ class morse():
|
||||||
def check(self, symbol_press):
|
def check(self, symbol_press):
|
||||||
if symbol_press == self.True_symbol:
|
if symbol_press == self.True_symbol:
|
||||||
self.defuse = True
|
self.defuse = True
|
||||||
|
classModule["display"].checkDefuse()
|
||||||
for index in self.dico_But:
|
for index in self.dico_But:
|
||||||
self.dico_But[index].config(command = lambda: "pass")
|
self.dico_But[index].config(command = lambda: "pass")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
pass
|
classModule["display"].PenalityLife()
|
||||||
# + pénalité
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,12 +71,12 @@ class safe():
|
||||||
self.Step += 1
|
self.Step += 1
|
||||||
if self.Step >= Step_max: # Si à la dernière étape
|
if self.Step >= Step_max: # Si à la dernière étape
|
||||||
self.defuse = True
|
self.defuse = True
|
||||||
print("DEFUSER")
|
classModule["display"].checkDefuse()
|
||||||
else:
|
else:
|
||||||
self.zone_choice()
|
self.zone_choice()
|
||||||
|
|
||||||
else: print("FAUX")
|
else:
|
||||||
# +pénaliter si le nombre d'erreur autorisé est atteint donc enlever une vie
|
classModule["display"].PenalityLife()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -70,12 +70,12 @@ class simon():
|
||||||
for index in range(nomber_condition): # boucle pour tester toute les conditions
|
for index in range(nomber_condition): # boucle pour tester toute les conditions
|
||||||
Condition = list(self.rules[Difficulty].keys())[index] # Condition pour utiliser le réarangement des touches
|
Condition = list(self.rules[Difficulty].keys())[index] # Condition pour utiliser le réarangement des touches
|
||||||
Condition_split = Condition.split(" ")
|
Condition_split = Condition.split(" ")
|
||||||
if Condition_split[0] != "Else": State_led = classModule["wire"].dico_wire[Condition_split[0]]["LIT"]
|
|
||||||
|
|
||||||
if (State_led == Condition_split[-1]) or (Condition_split[0] == "Else"): # regarder si le sconditon est bonne avec les LED
|
if Condition_split[0] != "Else": State_led = classModule["wire"].dico_wire[Condition_split[0]]["LIT"]
|
||||||
|
else: State_led = Condition_split[-1]
|
||||||
|
|
||||||
|
if (State_led == Condition_split[-1]): # regarder si le condition est bonne avec les LED
|
||||||
self.rules_sequence = self.rules[Difficulty][Condition] # difinition de la bonne séquence
|
self.rules_sequence = self.rules[Difficulty][Condition] # difinition de la bonne séquence
|
||||||
print(self.rules_sequence)
|
|
||||||
print(Condition)
|
|
||||||
break # On arrête la boucle car on a trouvé ce que l'on cherchait
|
break # On arrête la boucle car on a trouvé ce que l'on cherchait
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,14 +120,14 @@ class simon():
|
||||||
self.Step += 1
|
self.Step += 1
|
||||||
|
|
||||||
else:
|
else:
|
||||||
pass
|
classModule["display"].PenalityLife()
|
||||||
# + Pénalité
|
|
||||||
|
|
||||||
self.Sequence_Button = []
|
self.Sequence_Button = []
|
||||||
|
|
||||||
|
|
||||||
if self.Step >= self.MaxStep - 1: # Si le joueur a atteint la dernière étape
|
if self.Step >= self.MaxStep - 1: # Si le joueur a atteint la dernière étape
|
||||||
self.defuse = True # la bombe est désamorçé.
|
self.defuse = True # la bombe est désamorçé.
|
||||||
|
classModule["display"].checkDefuse()
|
||||||
self.bind(LeftCmd = lambda: "pass", RightCmd = lambda: "pass", UpCmd = lambda: "pass", DownCmd = lambda: "pass")
|
self.bind(LeftCmd = lambda: "pass", RightCmd = lambda: "pass", UpCmd = lambda: "pass", DownCmd = lambda: "pass")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,8 @@ class wire():
|
||||||
self.wrong_cut = 0 # Compte le nombre de fils que le joueur n'aurait dû pas coupé avant
|
self.wrong_cut = 0 # Compte le nombre de fils que le joueur n'aurait dû pas coupé avant
|
||||||
self.check(penality = False) # On compte le nombre de fil à corrigé pour les pénalités plus tard
|
self.check(penality = False) # On compte le nombre de fil à corrigé pour les pénalités plus tard
|
||||||
|
|
||||||
classModule["simon"].def_sequence() # Puisque le module "simon" a besoin de l'état des LEDs pour fonctionner, on l'éxécute après leur définition
|
if "simon" in classModule: classModule["simon"].def_sequence() # Puisque le module "simon" a besoin de l'état des LEDs pour fonctionner, on l'éxécute après leur définition
|
||||||
|
if "button" in classModule: classModule["button"].def_condition() # Puisque le module "button" a besoin de l'état des LEDs pour fonctionner, on l'éxécute après leur définition
|
||||||
|
|
||||||
|
|
||||||
def cut_wire(self, led): #coupe les cables
|
def cut_wire(self, led): #coupe les cables
|
||||||
|
@ -96,11 +97,12 @@ class wire():
|
||||||
if penality: # Si on compte les pénalité, alors on fait ces calculs
|
if penality: # Si on compte les pénalité, alors on fait ces calculs
|
||||||
if self.wire_errorTotalBefore - self.wire_errorTotal == -1: # Si le fil à mal été coupé
|
if self.wire_errorTotalBefore - self.wire_errorTotal == -1: # Si le fil à mal été coupé
|
||||||
self.wrong_cut += 1
|
self.wrong_cut += 1
|
||||||
# + Rajouter +1 sur le compteur
|
classModule["display"].PenalityLife()
|
||||||
|
|
||||||
|
|
||||||
if self.wire_errorTotal - self.wrong_cut == 0: # Si le joueur à tout désamorçer, en comptant les fils qu'ils n'auraient pas du coupé
|
if self.wire_errorTotal - self.wrong_cut == 0: # Si le joueur à tout désamorçer, en comptant les fils qu'ils n'auraient pas du coupé
|
||||||
self.defuse = True
|
self.defuse = True
|
||||||
|
classModule["display"].checkDefuse()
|
||||||
for led in self.dico_wire: # On rend les câbles insécable de nouveau pour évité une nouvelle erreur
|
for led in self.dico_wire: # On rend les câbles insécable de nouveau pour évité une nouvelle erreur
|
||||||
self.dico_wire[led]["WIRE"].config(command = lambda: "pass")
|
self.dico_wire[led]["WIRE"].config(command = lambda: "pass")
|
||||||
# + Rajouter le bonus de temps
|
# + Rajouter le bonus de temps
|
||||||
|
|
Loading…
Reference in a new issue