Как сделать Саймона с GPIOZero? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь сделать Саймона на своем Raspberry Pi с помощью GPIOZero. Когда я пытаюсь использовать мои кнопки, он проходит только первую последовательность одного светодиода. В противном случае он говорит, что каждая кнопка неверна или просто ничего не делает, пока я не нажму другую кнопку, в результате чего будет сказано, что кнопка, которую я нажал, снова была неправильной.

У меня 4 светодиода и 4 кнопки. Все правильно подключено, так как я все их проверил, прежде чем начал кодировать. Итак, я знаю, что это просто неправильный код.

Это мой код:


    from gpiozero import LED, Button
    from random import choice
    from time import sleep

    white = LED(5)
    red = LED(22)
    yellow = LED(27)
    green = LED(17)

    b_white = Button(21)
    b_red = Button(20)
    b_yellow = Button(16)
    b_green = Button(12)
    leds = [white, red, yellow, green]

    buttons = [b_white, b_red, b_yellow, b_green]

    lit_leds = []

    def Buttons():

        def Simon():
            lit_leds.append(choice(leds))
            for led in lit_leds:
                led.on()
                sleep(0.5)
                led.off()
                sleep(0.2)
        def Decide():
            sleep(0.5)
            Simon()
            score = 0


            for led in lit_leds:
                while True:
                    if ((buttons[0].is_pressed) or (buttons[1].is_pressed) or (buttons[2].is_pressed) or (buttons[3].is_pressed)) == True:

                        if b_white.is_pressed:
                            if led == white:
                                pass

                            else:
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                sleep(0.3)
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                print("Your score was",score)
                                exit()
                        elif b_red.is_pressed:
                            if led == red:
                                pass

                            else:
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                sleep(0.3)
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                print("Your score was",score)
                                exit()
                        elif b_yellow.is_pressed:
                            if led == yellow:
                                pass

                            else:
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                sleep(0.3)
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                print("Your score was",score)
                                exit()
                        elif b_green.is_pressed:
                            if led == green:
                                pass
                            else:
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                sleep(0.3)
                                for led in leds:
                                    led.on()
                                sleep(0.3)
                                for led in leds:
                                    led.off()
                                print("Your score was",score)
                                exit()
                        if led == lit_leds[(len(lit_leds) - 1)]:
                            score += 1
                            Simon()


        Decide()
    Buttons()

Я ожидал, что игра добавит светодиоды в список. Она загорится по порядку, а затем для каждого светодиода в списке потребуется кнопка ввода, чтобы продолжить, и она примет решение, будет ли она правильно или неправильно.

...