diff --git a/08_snake.py b/08_snake.py index e328545..377d889 100644 --- a/08_snake.py +++ b/08_snake.py @@ -1,7 +1,7 @@ import neopixel from machine import Pin import time -from random import randint, random, seed, choice +from random import random, seed, choice seed() @@ -50,15 +50,73 @@ def setze_pixel(x, y, farbe): i = y * 8 + x matrix[i] = farbe -def neue_richtung(): - if not taster_runter.value(): - return "runter" - if not taster_rechts.value(): - return "rechts" - if not taster_links.value(): - return "links" - if not taster_hoch.value(): - return "hoch" +def neue_richtung(t): + richtung = None + for i in range(1, 10): + if not taster_runter.value(): + richtung = "runter" + if not taster_rechts.value(): + richtung = "rechts" + if not taster_links.value(): + richtung = "links" + if not taster_hoch.value(): + richtung = "hoch" + time.sleep(t/10) + return richtung + +def warte_auf_taste(): + richtung = "vor" + i = 0 + taste = None + schwierigkeit = 1 + while taste != "rechts": + taste = neue_richtung(0.2) + + matrix.fill((0, 0, 0)) + + if i == 0: + richtung = "vor" + if i == 7: + richtung = "zurueck" + + if richtung == "vor": + i = i+1 + elif richtung == "zurueck": + i = i-1 + + setze_pixel(i, 0, (255, 0, 0)) + setze_pixel(7, i, (0, 255, 0)) + setze_pixel(7-i, 7, (0, 0, 255)) + setze_pixel(0, 7-i, (255, 255, 0)) + + if taste == "runter": + schwierigkeit = schwierigkeit + 1 + if schwierigkeit == 4: schwierigkeit = 3 + if taste == "hoch": + schwierigkeit = schwierigkeit - 1 + if schwierigkeit == 0: schwierigkeit = 1 + + gruen = (0, 255, 0) + gelb = (255, 255, 0) + rot = (255, 0, 0) + if schwierigkeit == 1: + setze_pixel(3, 1, gruen) + setze_pixel(4, 1, gruen) + setze_pixel(3, 2, gruen) + setze_pixel(4, 2, gruen) + if schwierigkeit == 2: + setze_pixel(3, 3, gelb) + setze_pixel(4, 3, gelb) + setze_pixel(3, 4, gelb) + setze_pixel(4, 4, gelb) + if schwierigkeit == 3: + setze_pixel(3, 5, rot) + setze_pixel(4, 5, rot) + setze_pixel(3, 6, rot) + setze_pixel(4, 6, rot) + + matrix.write() + return schwierigkeit RICHTUNGEN = { "hoch": (0, -1), @@ -67,6 +125,19 @@ RICHTUNGEN = { "rechts": (1, 0) } +SCHWIERIGKEITEN = [0.6, 0.4, 0.3] + +def ist_entgegengesetzt(r1, r2): + if r1 == "hoch" and r2 == "runter": + return True + if r1 == "links" and r2 == "rechts": + return True + if r1 == "rechts" and r2 == "links": + return True + if r1 == "runter" and r2 == "hoch": + return True + return False + def anzeigen(snake, essen): matrix.fill((0, 0, 0)) @@ -79,7 +150,7 @@ def anzeigen(snake, essen): # Essen anzeigen fx, fy = essen - setze_pixel(fx, fy, zufall_farbe()) + setze_pixel(fx, fy, (255, 255, 255)) matrix.write() @@ -192,13 +263,16 @@ def game_over(score): def spiel(): snake = [(4, 4)] - richtung = "rechts" essen = neues_essen(snake) - while True: - naechste_richtung = neue_richtung() + schwierigkeit = warte_auf_taste() - if naechste_richtung in RICHTUNGEN: + zeit = SCHWIERIGKEITEN[schwierigkeit - 1] + richtung = "rechts" + + while True: + naechste_richtung = neue_richtung(zeit) + if naechste_richtung in RICHTUNGEN and not ist_entgegengesetzt(naechste_richtung, richtung): richtung = naechste_richtung dx, dy = RICHTUNGEN[richtung] @@ -218,8 +292,6 @@ def spiel(): snake.pop() anzeigen(snake, essen) - time.sleep(0.4) while True: spiel() - time.sleep(1) diff --git a/main.py b/main.py index e328545..377d889 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ import neopixel from machine import Pin import time -from random import randint, random, seed, choice +from random import random, seed, choice seed() @@ -50,15 +50,73 @@ def setze_pixel(x, y, farbe): i = y * 8 + x matrix[i] = farbe -def neue_richtung(): - if not taster_runter.value(): - return "runter" - if not taster_rechts.value(): - return "rechts" - if not taster_links.value(): - return "links" - if not taster_hoch.value(): - return "hoch" +def neue_richtung(t): + richtung = None + for i in range(1, 10): + if not taster_runter.value(): + richtung = "runter" + if not taster_rechts.value(): + richtung = "rechts" + if not taster_links.value(): + richtung = "links" + if not taster_hoch.value(): + richtung = "hoch" + time.sleep(t/10) + return richtung + +def warte_auf_taste(): + richtung = "vor" + i = 0 + taste = None + schwierigkeit = 1 + while taste != "rechts": + taste = neue_richtung(0.2) + + matrix.fill((0, 0, 0)) + + if i == 0: + richtung = "vor" + if i == 7: + richtung = "zurueck" + + if richtung == "vor": + i = i+1 + elif richtung == "zurueck": + i = i-1 + + setze_pixel(i, 0, (255, 0, 0)) + setze_pixel(7, i, (0, 255, 0)) + setze_pixel(7-i, 7, (0, 0, 255)) + setze_pixel(0, 7-i, (255, 255, 0)) + + if taste == "runter": + schwierigkeit = schwierigkeit + 1 + if schwierigkeit == 4: schwierigkeit = 3 + if taste == "hoch": + schwierigkeit = schwierigkeit - 1 + if schwierigkeit == 0: schwierigkeit = 1 + + gruen = (0, 255, 0) + gelb = (255, 255, 0) + rot = (255, 0, 0) + if schwierigkeit == 1: + setze_pixel(3, 1, gruen) + setze_pixel(4, 1, gruen) + setze_pixel(3, 2, gruen) + setze_pixel(4, 2, gruen) + if schwierigkeit == 2: + setze_pixel(3, 3, gelb) + setze_pixel(4, 3, gelb) + setze_pixel(3, 4, gelb) + setze_pixel(4, 4, gelb) + if schwierigkeit == 3: + setze_pixel(3, 5, rot) + setze_pixel(4, 5, rot) + setze_pixel(3, 6, rot) + setze_pixel(4, 6, rot) + + matrix.write() + return schwierigkeit RICHTUNGEN = { "hoch": (0, -1), @@ -67,6 +125,19 @@ RICHTUNGEN = { "rechts": (1, 0) } +SCHWIERIGKEITEN = [0.6, 0.4, 0.3] + +def ist_entgegengesetzt(r1, r2): + if r1 == "hoch" and r2 == "runter": + return True + if r1 == "links" and r2 == "rechts": + return True + if r1 == "rechts" and r2 == "links": + return True + if r1 == "runter" and r2 == "hoch": + return True + return False + def anzeigen(snake, essen): matrix.fill((0, 0, 0)) @@ -79,7 +150,7 @@ def anzeigen(snake, essen): # Essen anzeigen fx, fy = essen - setze_pixel(fx, fy, zufall_farbe()) + setze_pixel(fx, fy, (255, 255, 255)) matrix.write() @@ -192,13 +263,16 @@ def game_over(score): def spiel(): snake = [(4, 4)] - richtung = "rechts" essen = neues_essen(snake) - while True: - naechste_richtung = neue_richtung() + schwierigkeit = warte_auf_taste() - if naechste_richtung in RICHTUNGEN: + zeit = SCHWIERIGKEITEN[schwierigkeit - 1] + richtung = "rechts" + + while True: + naechste_richtung = neue_richtung(zeit) + if naechste_richtung in RICHTUNGEN and not ist_entgegengesetzt(naechste_richtung, richtung): richtung = naechste_richtung dx, dy = RICHTUNGEN[richtung] @@ -218,8 +292,6 @@ def spiel(): snake.pop() anzeigen(snake, essen) - time.sleep(0.4) while True: spiel() - time.sleep(1)