import machine
import time
import random
# --- Konfiguration ---
# Pins für LEDs (Rot, Grün, Blau, Gelb)
LED_PINS = [2, 3, 4, 5]
# Pins für Taster (passend zu den LEDs)
BTN_PINS = [10, 11, 12, 13]
FREQ_START = 0.5 # Geschwindigkeit der Wiedergabe (Sekunden)
SPEED_UP = 0.95 # Faktor, um den es pro Runde schneller wird
# --- Setup ---
leds = []
buttons = []
# LEDs initialisieren
for pin in LED_PINS:
leds.append(machine.Pin(pin, machine.Pin.OUT))
# Taster initialisieren (Pull-Up: 1 = offen, 0 = gedrückt)
for pin in BTN_PINS:
buttons.append(machine.Pin(pin, machine.Pin.IN, machine.Pin.PULL_UP))
def blink_led(index, duration):
"""Lässt eine spezifische LED kurz aufleuchten."""
leds[index].value(1)
time.sleep(duration)
leds[index].value(0)
time.sleep(duration / 2) # Kurze Pause zwischen Blinken
def blink_all(times, delay):
"""Lässt alle LEDs blinken (für Game Over oder Start)."""
for _ in range(times):
for led in leds: led.value(1)
time.sleep(delay)
for led in leds: led.value(0)
time.sleep(delay)
def get_button_press():
"""Wartet darauf, dass ein Taster gedrückt wird und gibt dessen Index zurück."""
while True:
for i, btn in enumerate(buttons):
if btn.value() == 0: # Taster gedrückt
leds[i].value(1) # Feedback: LED leuchtet beim Drücken
# Entprellen & Warten bis Taster losgelassen wird
while btn.value() == 0:
time.sleep(0.01)
leds[i].value(0) # LED aus
time.sleep(0.1) # Kurzes Delay gegen versehentliches Doppeldrücken
return i
time.sleep(0.01)
# --- Hauptspiel ---
print("--- SIMON SAYS ---")
blink_all(3, 0.2)
time.sleep(1)
while True:
game_sequence = []
current_speed = FREQ_START
game_active = True
while game_active:
# 1. Neue Farbe zur Sequenz hinzufügen
game_sequence.append(random.randint(0, 3))
print(f"Level {len(game_sequence)}")
# 2. Sequenz abspielen
time.sleep(0.5)
for step in game_sequence:
blink_led(step, current_speed)
# 3. Spielereingabe überprüfen
print("Deine Runde...")
for expected_step in game_sequence:
user_input = get_button_press()
if user_input != expected_step:
print(f"Falsch! Erwartet: {expected_step}, Gedrückt: {user_input}")
game_active = False
break # Raus aus der For-Schleife
if game_active:
print("Richtig!")
time.sleep(0.5)
current_speed *= SPEED_UP # Es wird schneller!
# Game Over Logik
print("GAME OVER")
blink_all(5, 0.1) # Hektisches Blinken
time.sleep(2)
print("Neues Spiel startet...")