import machine
import time
import random

# Pin setup
button_pins = [0, 1, 2, 3]
led_pins = [4, 5, 6, 7]

buttons = [machine.Pin(pin, machine.Pin.IN, machine.Pin.PULL_UP) for pin in button_pins]
leds = [machine.Pin(pin, machine.Pin.OUT) for pin in led_pins]

def flash_led(index, duration=0.5):
    leds[index].value(1)
    time.sleep(duration)
    leds[index].value(0)
    time.sleep(0.2)

def show_sequence(sequence):
    for i in sequence:
        flash_led(i)

def get_button_press():
    while True:
        for i, button in enumerate(buttons):
            if not button.value():  # Button is pressed (active LOW)
                while not button.value():  # Wait for release
                    time.sleep(0.01)
                print(f"Button {i} pressed")
                flash_led(i, 0.2)
                return i

def play_game():
    sequence = []  # ✅ RESET the sequence here
    level = 1

    while True:
        print(f"\nLevel {level}")
        sequence.append(random.randint(0, 3))
        print(f"Sequence: {sequence}")
        show_sequence(sequence)

        for expected in sequence:
            pressed = get_button_press()
            print(f"Expected: {expected}, Got: {pressed}")
            if pressed != expected:
                print("Wrong button! Game Over.")
                for _ in range(3):
                    for led in leds:
                        led.value(1)
                    time.sleep(0.2)
                    for led in leds:
                        led.value(0)
                    time.sleep(0.2)
                return  # ✅ Exit play_game and start over
        level += 1
        time.sleep(0.5)

# Main loop
while True:
    print("\nPress any button to start...")
    while all(button.value() for button in buttons):
        time.sleep(0.1)
    play_game()  # This now resets the sequence every time
