from machine import Pin, PWM
import time
import random

# LEDs (pinos 0 a 4)
led_pins = {
    1: Pin(0, Pin.OUT),
    2: Pin(1, Pin.OUT),
    3: Pin(2, Pin.OUT),
    4: Pin(3, Pin.OUT),
    5: Pin(4, Pin.OUT)
}

# Segmentos do display 7 segmentos
A = Pin(28, Pin.OUT)
B = Pin(27, Pin.OUT)
C = Pin(26, Pin.OUT)
D = Pin(22, Pin.OUT)
E = Pin(21, Pin.OUT)
F = Pin(20, Pin.OUT)
G = Pin(19, Pin.OUT)

# Botão no pino 6
botao = Pin(6, Pin.IN, Pin.PULL_DOWN)

# Buzzer no pino 16
buzzer = PWM(Pin(16))

# --- Funções ---

def apagar_leds():
    for led in led_pins.values():
        led.off()

def apagar_display():
    A.value(1)
    B.value(1)
    C.value(1)
    D.value(1)
    E.value(1)
    F.value(1)
    G.value(1)

numeros = {
    1: [B, C],
    2: [A, B, G, E, D],
    3: [A, B, C, D, G],
    4: [B, C, F, G],
    5: [A, C, D, F, G],
    0: [A, B, C, D, E, F]
}

def display_number(num):
    apagar_display()
    if num in numeros:
        for segmento in numeros[num]:
            segmento.value(0)

def som_acerto():
    buzzer.freq(1000)
    for _ in range(3):
        buzzer.duty_u16(5000)
        time.sleep(0.1)
        buzzer.duty_u16(0)
        time.sleep(0.05)

def som_erro():
    buzzer.freq(300)
    buzzer.duty_u16(5000)
    time.sleep(0.5)
    buzzer.duty_u16(0)

def som_game_over():
    for freq in [200, 150, 100]:
        buzzer.freq(freq)
        buzzer.duty_u16(4000)
        time.sleep(0.4)
        buzzer.duty_u16(0)
        time.sleep(0.1)

def piscar_led(numero_led, vezes=5, intervalo=0.2):
    for _ in range(vezes):
        led_pins[numero_led].on()
        time.sleep(intervalo)
        led_pins[numero_led].off()
        time.sleep(intervalo)

def piscar_todos_leds(vezes=3, intervalo=0.2):
    for _ in range(vezes):
        for led in led_pins.values():
            led.on()
        time.sleep(intervalo)
        for led in led_pins.values():
            led.off()
        time.sleep(intervalo)

def esperar_botao():
    while botao.value() == 0:
        time.sleep(0.01)
    time.sleep(0.2)

# --- Loop principal do jogo ---

while True:
    vidas = 5
    print("Aperte o botão para iniciar o jogo...")
    esperar_botao()
    print("Jogo iniciado!")
    display_number(vidas)

    while vidas > 0:
        apagar_leds()
        display_number(vidas)
        print(f"Vidas restantes: {vidas}")
        print("Aguardando botão para sortear número...")
        esperar_botao()

        numero_sorteado = random.randint(1, 5)
        print("Número sorteado. Tente adivinhar!")

        try:
            tentativa = int(input("Digite seu palpite (1 a 5): "))
            if 1 <= tentativa <= 5:
                if tentativa == numero_sorteado:
                    print("✅ Acertou!")
                    piscar_led(tentativa)
                    som_acerto()
                    display_number(tentativa)
                    time.sleep(1)
                    continuar = input("Deseja jogar novamente? (s/n): ").strip().lower()
                    if continuar != 's':
                        print("Jogo encerrado.")
                        apagar_leds()
                        apagar_display()
                        buzzer.deinit()
                        exit()
                    else:
                        break  # reinicia do zero
                else:
                    print(f"❌ Errou! O número era {numero_sorteado}")
                    piscar_todos_leds()
                    som_erro()
                    vidas -= 1
                    display_number(vidas)
                    time.sleep(2)
            else:
                print("Número fora do intervalo.")
        except ValueError:
            print("Entrada inválida.")

    if vidas == 0:
        print("💀 Game Over! Suas vidas acabaram.")
        display_number(0)
        som_game_over()
        time.sleep(2)
        jogar_novamente = input("Deseja tentar novamente? (s/n): ").strip().lower()
        if jogar_novamente != 's':
            print("Jogo encerrado.")
            apagar_leds()
            apagar_display()
            buzzer.deinit()
            break
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
VIDAS