j'essaie de réaliser un jeu en python avec un raspberry Pi mais je bloque à un certain niveau.
C'est un jeu de réflexe : on allume une led qui s'éteint apres un laps de temps aléatoire, le joueur qui réagi le plus rapidement a l'extinction de la led en appuyant sur son bouton marque 1 point.
Le programme fonctionne bien mais je n'arrive pas à mettre en oeuvre une fonctionnalité importante : si un joueur appuie sur son bouton avant l'extinction de la led, il gagnera à coup sur car je ne sais pas comment tester l'état des boutons durant le la phase du timer aléatoire.
Que faut-il utiliser pour verifier l'état de ces boutons pendant le déroulement du timer ?
Une interruption ?
Par ailleurs, si les 2 joueurs décident de tricher en appuyant sur leur bouton respectif, le joueur A gagnera à coup sur car c'est par lui que la première boucle if commence.
De la même manière, si les 2 joueurs réagissent exactement en même temps (sans tricher), le joueur A l'emportera car c'est par lui que la première boucle if commence (ce n'est pas juste !)
Cela soulève donc un autre problème structurel à corriger.
Je ne code pas souvent mais j'aimerais passer un cap
Merci pour votre aide.
Code : Tout sélectionner
#!/usr/bin/python
# coding: utf-8
from time import sleep
import RPi.GPIO as GPIO
import sys
import os
import time
from random import uniform
def cls():
os.system('cls' if os.name=='nt' else 'clear')
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP) #start button, pin 6
GPIO.setup(27,GPIO.OUT) # led bouton start, pin 27
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_UP) #button A joueur A, pin 14
GPIO.setup(17,GPIO.OUT) #led joueur 1, pin 17
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP) #button D joueur D, pin 15
GPIO.setup(5,GPIO.OUT) #led joueur 2, pin 5
GPIO.setup(4,GPIO.OUT) #led depart, pin 14 output
a = 0 # initialisation des scores
d = 0 # initialisation des scores
while True:
sleep(0.3) #une pause
button_start = GPIO.input(6) #on affecte le bouton A à la pin 6
if button_start == True: #si le bouton start n'est pas presse
os.system('clear') # on nettoie l'ecran
print "Score A :", str(a) #on affiche le score du joueur A
print "Score D :", str(d) #on affiche le score du joueur D
print ('presser le bouton blanc pour commencer le jeu')
GPIO.output(27,GPIO.HIGH) # on fait clignoter la led du bouton demarrer
sleep (0.07) # on fait clignoter la led du bouton demarrer
GPIO.output(27,GPIO.LOW) # on fait clignoter la led du bouton demarrer
buttonA_state = GPIO.input(14)
buttonD_state = GPIO.input(15)
if buttonA_state == False: # on verifie que le bouton A n'est presse avant l'allumage de la led
print('A est trop rapide') #on dit au joueur A qu'il triche
sleep(1) #on affiche le message 1 sec.
if buttonD_state == False: # on verifie que le bouton D n'est presse avant l'allumage de la led
print('D est trop rapide') #on dit au joueur D qu'il triche
sleep(1) #on affiche le message 1 sec.
if button_start == False: # Quand on presse le bouton
GPIO.output(4,GPIO.HIGH) #on allume la led
sleep(uniform(3, 5)) #on demarre le timer aleatoire
#test des 2 boutons ici
GPIO.output(4,GPIO.LOW) #on eteint la led
print ('On attends la reaction des joueurs') #pour savoir ou on en est si peronne n'a reagi
while True: #on demarre une boucle sans fin
buttonA_state = GPIO.input(14) # on affecte le bouton A à la pin 14
buttonD_state = GPIO.input(15) # on affecte le bouton D à la pin 15
if buttonA_state == False: # Joueur A vainqueur
a = a + 1 #on ajoute 1 au score du joueur A
print('A est vainqueur !') #on affiche que le joueur A est vainqueur
x = 1 #on fait clignoter 5 fois le bouton du vainqueur
while x < 5: #on fait clignoter 5 fois le bouton du vainqueur
GPIO.output(17,GPIO.HIGH) #on fait clignoter 5 fois le bouton du vainqueur
sleep (0.07) #on fait clignoter 5 fois le bouton du vainqueur
GPIO.output(17,GPIO.LOW) #on fait clignoter 5 fois le bouton du vainqueur
sleep (0.07) #on fait clignoter 5 fois le bouton du vainqueur
x = x + 1 #on fait clignoter 5 fois le bouton du vainqueur
break
if buttonD_state == False: #Joueur D vainqueur
d = d + 1 #on ajoute 1 au score du joueur D
print('D est vainqueur !') #on affiche que le joueur A est vainqueur
x = 1 #on fait clignoter 5 fois le bouton du vainqueur
while x < 5: #on fait clignoter 5 fois le bouton du vainqueur
GPIO.output(5,GPIO.HIGH) #on fait clignoter 5 fois le bouton du vainqueur
sleep (0.07) #on fait clignoter 5 fois le bouton du vainqueur
GPIO.output(5,GPIO.LOW) #on fait clignoter 5 fois le bouton du vainqueur
sleep (0.07) #on fait clignoter 5 fois le bouton du vainqueur
x = x + 1 #on fait clignoter 5 fois le bouton du vainqueur
break