def ProgDetectCard(self): self.th = CardThread(str(self.C1),str(self.C2)) #Initialise le Thread self.th.start() #Le lance (sa fonction run()) lcd = Lcd(1) butCache = Button(5) estAppuie = False afficheTemps = False tempsAttente = datetime.now() lcd.setText("En attente de carte ...") lcd.setColor("bleu") while self.th.valCard == "": #Attends qu'il récupère sa valeur if butCache.estAppuie() and not estAppuie: estAppuie = True elif not butCache.estAppuie() and estAppuie: return -2 #Si ça fait déjà 4 secondes que le joueur n'a pas mit la carte on annonce que c'est bientôt fini elif not afficheTemps and 4 == int((datetime.now() - tempsAttente).total_seconds()): lcd.setText("Bientot fini...") lcd.setColor("rouge") afficheTemps = True print("test : ",self.th.valCard[2]) if len(self.th.valCard[2]) > 2 : # Pas de carte au bout de 10 seconde return -2 else : return self.th.valCard[2] #La retourne
def ProgDetectCard(self): self.th = myThread(str(self.C1), str(self.C2)) #Initialise un Thread self.th.start() #Le lance lcd = Lcd(1) butCache = Button(5) estAppuie = False lcd.setText("En attente de carte ...") lcd.setColor("bleu") while self.th.valCard == "": #Attends qu'il récupère sa valeur if butCache.estAppuie() and not estAppuie: estAppuie = True elif not butCache.estAppuie() and estAppuie: self.th.tuer() return -2 #Quitte le programme : le joueur abandonne print("test : ", self.th.valCard[2]) return self.th.valCard[2] #La retourne
manag = Mp.ManagParams() # gestion des paramètre modifiable de la raspberry manag.modifParams() #Demande à l'utilisateur s'il veut modifier les paramètres avant de lancer la partie. #Fonction permettant de récuperer une valeur d'un paramètre enregister, renvoie la valeur par défaut s'il ne la trouve pas def verifPresenceParams(param,valDefault): valParam = manag.get(param) if valParam != False: # S'il n'y a pas eu d'erreur on met le temps stocké return valParam return valDefault #Sinon on renvoie la valeur par défaut #Gestion des capteurs but3 = Button(3) # Permet de lancer la détection de code (Enigme 1 et 2) but4 = Button(4) # Permet de lancer l'énigme 3 butCache = Button(5) # Permet de lancer l'énigme 5 captLum = CapteurLum(0) # Permet de lancer l'énigme 4 led = Led(7) #Permet de contrôler l'allumage de la LED lcd = Lcd(1) #Permet d'afficher des messages au joueur #Initialisaion Escape Game led.turnOff() estAppuie3 = False estAppuie4 = False estAppuieCacher = False tempsTotal = verifPresenceParams("tempsTotal",600) #Récupère le temps stocké tempsRestant = tempsTotal strEnigmeFini = ["-","-","-","-","-","-"] #Tableau des Enigmes fini (- : non terminer, X : terminé) lcd.setText("Esc Game "+''.join(strEnigmeFini)+" "+str(tempsTotal)+" secondes ") lcd.setColor("vert") time.sleep(1)
def Enigme6(tLim): Led1 = Led(7) lcd = Lcd(1) Button2 = Button(2) ButEstAppuie = False TabAvancer = [ False, False, False ] #0 : bouton enclenché, #1 : Capteur de présence enclenché, #2 Bouton réappuyé CapteurMvt1 = CaptMvt(8) tempsLimite = tLim tempsCommence = -1 LcdAffiche = False time.sleep(0.5) lcd.setText("Debut Enigme finale") time.sleep(2) lcd.setColor("vert") lcd.setText("Appuyez sur un bouton :)") time.sleep(2) while True: if not TabAvancer[0]: if Button2.estAppuie() and not ButEstAppuie: ButEstAppuie = True elif not Button2.estAppuie() and ButEstAppuie: tempsCommence = datetime.now() lcd.setColor("vert") lcd.setText("Cette Led doit s'allumer") time.sleep(1.5) TabAvancer[0] = True elif not TabAvancer[1] and ( datetime.now() - tempsCommence).total_seconds() <= tempsLimite: if CapteurMvt1.estPresence(): lcd.setColor("vert") lcd.setText("1 etape sur 2 realisee") time.sleep(1.5) TabAvancer[1] = True ButEstAppuie = False elif TabAvancer[1] and not TabAvancer[2] and ( datetime.now() - tempsCommence).total_seconds() <= tempsLimite: if Button2.estAppuie() and not ButEstAppuie: ButEstAppuie = True elif not Button2.estAppuie() and ButEstAppuie: Led1.turnOn() lcd.setColor("vert") lcd.setText("Led allumee bravo, Enigme finale reussie !") time.sleep(2) return True else: #Temps dépassé lcd.setColor("rouge") if not TabAvancer[1]: lcd.setText("Temps depasse, il manque 2 etapes !") else: lcd.setText("Temps depasse, il manque une etape ! ") time.sleep(2) lcd.setColor("vert") return False
def Enigme5(tLim) : But0 = Button(2) But1 = Button(3) But2 = Button(4) ButCacher = Button(5) # Permet de quitter l'énigme si le joueur n'y arrive pas EstAppuieCacher = False lcd = Lcd(1) #Cartes NFC codestr1 = "['0x9e','0xb8','0x0','0x0']" codestr2 = "['0x1f','0xf5','0x90','0x0']" nfc = NFC(codestr1,codestr2) #Initialisation du NFC nfcActive = False #N'est pas activé encore pour le joueur tabB = [But0,But1,But2] tabEstAppuie = [False,False,False] tempsLimite = tLim tempsCommence = -1 LcdAffiche = False time.sleep(0.5) lcd.setText("Debut Enigme5") time.sleep(2) while True : if ButCacher.estAppuie() and not EstAppuieCacher: EstAppuieCacher = True if not ButCacher.estAppuie() and EstAppuieCacher: #Le joueur à réappuyer sur le bouton caché : il veut quitté l'énigme return False if not nfcActive : #NFC non activé encore if LcdAffiche == False : butX = random.randint(0,2) #Button aléatoire entre 0, 1 et 2 butX2 = random.randint(0,2) while butX == butX2: # tant que c'est les mêmes, on refait un tirage butX = random.randint(0,2) tabCode = ["0","0","0"] tabCode[butX] = "X" tabCode[butX2] = "X" time.sleep(0.1) lcd.setColor("vert") lcd.setText("-".join(tabCode)+" Activer le lecteur!") tempsCommence = datetime.now() LcdAffiche = True # On a cliqué le mauvais bouton, ou le temps a été dépassé if (datetime.now()-tempsCommence).total_seconds() > tempsLimite or (tabB[0].estAppuie() and (0 != butX and 0 != butX2)) or (tabB[1].estAppuie() and (1 != butX and 1 != butX2)) or (tabB[2].estAppuie() and (2 != butX and 2 != butX2)): lcd.setColor("rouge") if (datetime.now()-tempsCommence).total_seconds() > tempsLimite : lcd.setText("Temps depasse ! ") else : lcd.setText("Oups.. Mauvais Code!") time.sleep(2) lcd.setColor("vert") #lcd.setText("Essaye encore ! ") #LcdAffiche = False return False if tabB[butX].estAppuie() and tabB[butX2].estAppuie() : tabEstAppuie[butX] = True tabEstAppuie[butX2] = True elif not tabB[butX].estAppuie() and tabEstAppuie[butX] and not tabB[butX2].estAppuie() and tabEstAppuie[butX2] and (datetime.now()-tempsCommence).total_seconds() <= tempsLimite: #il a appuyé sur les bon bouton à temps lcd.setColor("vert") lcd.setText(" Lecteur \n NFC active!") time.sleep(2) tabEstAppuie[butX] = False tabEstAppuie[butX2] = False nfcActive = True else : val = nfc.ProgDetectCard() print(val) if val == "2": #Si le NFC est activé et qu'il donne la bonne carte : Enigme fini lcd.setColor("vert") lcd.setText("Enigme 5 reussie") time.sleep(2) return True elif val == "-2": return False #Le joueur à abandonné else: lcd.setText("mauvaise carte ..") time.sleep(2) lcd.setColor("vert") return False
def Enigme1(nbrEtape, tLim, valTempsDiminu): lcd = Lcd(1) But1 = Button(2) But2 = Button(3) But3 = Button(4) tabB = [But1, But2, But3] tabEstAppuie = [False, False, False] indiceEtape = 0 tempsLimite = tLim tempsCommence = -1 LcdAffiche = False time.sleep(0.5) lcd.setText("Debut Enigme1") time.sleep(2) while (indiceEtape < nbrEtape): if LcdAffiche == False: # affiche code à rentré butX = random.randint(0, 2) # entre bouton 0, 1 et 2 tabCode = ["0", "0", "0"] tabCode[butX] = "X" time.sleep(0.1) lcd.setText("-".join(tabCode)) LcdAffiche = True tempsCommence = datetime.now() #S'il appuie sur les autre boutons ou que le temps est fini on recommence depuis le début if (datetime.now() - tempsCommence).total_seconds() > tempsLimite or ( tabB[0].estAppuie() and 0 != butX) or (tabB[1].estAppuie() and 1 != butX) or (tabB[2].estAppuie() and 2 != butX): indiceEtape = 0 tempsLimite = tLim lcd.setColor("rouge") if (datetime.now() - tempsCommence).total_seconds() > tempsLimite: lcd.setText("Temps dépasse ! ") else: lcd.setText("Oups.. Perdu !") time.sleep(2) lcd.setColor("vert") lcd.setText("On recommence ! ") LcdAffiche = False if tabB[butX].estAppuie(): tabEstAppuie[butX] = True elif not tabB[butX].estAppuie() and tabEstAppuie[butX] and ( datetime.now() - tempsCommence).total_seconds( ) <= tempsLimite: #il a appuyé sur le bon bouton à temps print("Bravo ! ") tabEstAppuie[butX] = False indiceEtape += 1 if nbrEtape == indiceEtape: # fini lcd.setText("BRAVO !\n Fini !") time.sleep(2) return True else: # reste des étapes if tempsLimite - valTempsDiminu <= 1: tempsLimite = 1 # 1 seconde minimum else: tempsLimite -= valTempsDiminu #Diminue le temps LcdAffiche = False lcd.setText("Etape" + str(indiceEtape) + " reussie") time.sleep(1)
def DetectCode(code1, code2): lcd = Lcd(1) But1 = Button(2) But2 = Button(3) But3 = Button(4) LancementDirect = True tabB = [But1, But2, But3] tabEstAppuie = [False, False, False] codeEnigme1 = code1 codeEnigme2 = code2 tabCodeEntrer = [-1, -1, -1, -1] ContinueEntrerCode = True LcdAffiche = False while ContinueEntrerCode: if LancementDirect or (tabB[1].estAppuie() and LcdAffiche == False): lcd.setText("Rentre un code!") LcdAffiche = True LancementDirect = False i = 0 while (i < 4): if tabB[0].estAppuie() or tabB[1].estAppuie( ) or tabB[2].estAppuie(): if (tabB[0].estAppuie()): tabEstAppuie[0] = True if (tabB[1].estAppuie()): tabEstAppuie[1] = True if (tabB[2].estAppuie()): tabEstAppuie[2] = True if (not tabB[0].estAppuie() and tabEstAppuie[0]): #relache le premier boutou tabCodeEntrer[i] = 0 i += 1 tabEstAppuie[0] = False if (not tabB[1].estAppuie() and tabEstAppuie[1]): #relache le deuxième bouton tabCodeEntrer[i] = 1 i += 1 tabEstAppuie[1] = False if (not tabB[2].estAppuie() and tabEstAppuie[2]): #relache le troisème bouton tabCodeEntrer[i] = 2 i += 1 tabEstAppuie[2] = False estCode1 = True estCode2 = True for j in range(4): if (tabCodeEntrer[j] != codeEnigme1[j]): estCode1 = False if (tabCodeEntrer[j] != codeEnigme2[j]): estCode2 = False if (estCode1): print("code 1") return 1 elif (estCode2): print("code 2") return 2 else: lcd.setText("Erreur !") lcd.setColor("rouge") time.sleep(1.5) lcd.setColor("vert") lcd.setText("But2 : restart\nBut3 : stop") LcdAffiche = False elif tabB[2].estAppuie() and LcdAffiche == False: #Veut arrêter lcd.setText("Arret ...") return -1
def Enigme2(nbrEtape): lcd = Lcd(1) captMvt = CaptMvt(8) #Capteur de présence captUlt = DUltraSon(6) #Capteur de distance Ultrason tabCapt = [captMvt,captUlt] tabEstPresence = [False,False] indiceEtape = 0 DistMaxPresence = 100 LcdAffiche = False time.sleep(0.5) lcd.setText("Debut Enigme2") time.sleep(2) while(indiceEtape < nbrEtape): if LcdAffiche == False : # affiche code à rentré capteurX = random.randint(0, 1) # Choisie entre capteur 1 et 2 lcd.setText("Recepteur "+str(capteurX)) LcdAffiche = True time.sleep(0.5) #S'il enlenche le mauvais capteur on recommence depuis le début if (tabCapt[0].estPresence() and 0 != capteurX) or (tabCapt[1].estPPD(DistMaxPresence) and 1 != capteurX): indiceEtape = 0 lcd.setColor("rouge") lcd.setText("Oups.. Perdu !") time.sleep(2) lcd.setColor("vert") lcd.setText("On recommence ! ") LcdAffiche = False if not tabEstPresence[capteurX] and ((0 == capteurX and tabCapt[0].estPresence()) or (1 == capteurX and tabCapt[1].estPPD(DistMaxPresence))): #le détecteur la capté, on attend qu'il ressorte de la zone tabEstPresence[capteurX] = True elif tabEstPresence[capteurX] and ((0 == capteurX and not tabCapt[capteurX].estPresence()) or (1 == capteurX and not tabCapt[1].estPPD(DistMaxPresence))): #il est sortie de la zone print("Bravo") tabEstPresence[capteurX] = False indiceEtape+=1 if nbrEtape == indiceEtape: # fini lcd.setText("BRAVO !\n Fini !") time.sleep(2) return True else : # reste des étapes LcdAffiche = False lcd.setText("Etape "+str(indiceEtape)+" reussie") time.sleep(2)
def Enigme3(tLim, nbTour, zone): captUlt = DUltraSon(6) lcd = Lcd(1) led = Led(7) #Cartes NFC codestr1 = "['0x9e','0xb8','0x0','0x0']" codestr2 = "['0x1f','0xf5','0x90','0x0']" nfc = NFC(codestr1, codestr2) #Initialisation du NFC time.sleep(0.5) lcd.setText("Debut Enigme3") nbtMax = 5 time.sleep(2) val = nfc.ProgDetectCard() #test carte print(val) if val == "1": #bonne carte i = 0 while nbtMax > 0 and i < nbTour: Dist = random.randint( 10, 200) #Button aléatoire entre 10 et 400 (centimetre) time.sleep(0.1) lcd.setColor("vert") lcd.setText("Dist : " + str(Dist) + "cm..") led.blinkPlus(tLim) if captUlt.estDansZone( Dist - zone, Dist + zone): #si le joueur est dans la bonne distance lcd.setText(" -- Bravo! -- Etape " + str(i) + " finie") time.sleep(1.5) i = i + 1 else: time.sleep(1) lcd.setColor("rouge") lcd.setText("Mauvaise distance !") i = 0 nbtMax = nbtMax - 1 time.sleep(1.5) lcd.setText("On recommence !") time.sleep(1) led.turnOff() if nbtMax <= 0: lcd.setText("Enigme echouer :(") time.sleep(1) return False return True elif val == "-2": lcd.setText("Plus de temps") return False else: #mauvaise carte lcd.setText("mauvaise carte ..") return False