In diesem Kapitel geht es vornehmlich um die Programmierung von kurzen Animationen und einfachen Spielen. Dabei dient die 8x8 LED-Matrix als Anzeige oder Bildschirmersatz.
Dieses Kapitel setzt Kenntnisse über die Sprache Python voraus und bedient sich des Moduls pygame, einer Sammlung von Funktionen, mit denen das Programmieren von Spielen stark vereinfacht wird.
In Sense HAT - Teil 1 - Übung 3 wurde gezeigt, wie man verschiedene Bilder über ein Python-Programm auf dem 8x8 LED-Display ausgibt.
In dieser Übung geht es darum, eine kleine Figur zu entwerfen und sie in einer Animation eine einfache Laufbewegung ausführen zu lassen. Dazu muss zunächst eine Figur entworfen und diese dann in verschiedenen Laufpositionen dargestellt werden.
Das nacheinander aufrufen der einzelnen Bilder vermittelt dem Zuschauer dann den Eindruck einer Bewegung. Gestartet wird die Animation auf dem Rechner dadurch, dass der Raspi bewegt wird.
Installation eines GRID Editors
Zum Entwurf der Animationsbilder eignet sich kariertes Papier hervorragend. Dazu markiert man sich ein 8x8 Kästchen großes Quadrat und positioniert in diesem Feld die entsprechenden Bildpunkte der Figur.
Ich benutze für die Entwürfe häufig den GRID-Editor von J. Robinson. Um ihn unter Linux auf dem Raspi benutzen zu können, muss zuerst LXTerminal geöffnet und die folgende Zeile eingegeben werden
Nach Abschluss des Installationsvorgangs wird der Grid Editor geladen mit
Anschließend wechselt man in das Verzeichnis des neu installierten Programms
und startet es mit
Der Startbildschirm des Grid-Editors zeigt das 8x8 LED-Matrixfeld des Sense-HAT; in einer rechten Spalte sind neun RGB-Farben voreingestellt, die sich durch einfaches Anklicken anwählen lassen. Es lassen sich beliebig viele Frames (Bildchen) erstellen, die durch die beiden Pfeiltasten in der rechten Spalte angesteuert werden können.
Ist ein Raspi mit Sense-HAT angeschlossen, kann über die Taste "Play on LEDs" sofort überprüft werden, wie gut oder schlecht der eigenen Entwurf ist. Mit "Clear Grid" wird das komplette Bild gelöscht; mit "Delete" jeweils der aktuelle Frame.
Die Animationsbilder
Als RGB-Farben werden festgelegt:
pi = (238, 0, 238) # pink
gr = (0, 100,0) # grün
we = (200,200,200) # weiß
ge = (255,215,0) # gelb
hb = (34,139,34) # hellbraun
le = (0,0,0) # schwarz oder leer
Eine einfache Animation | |
Material |
|
Aufgaben |
|
Das Programm animation_1.py
Wie arbeitet das Programm animation_1.py?
Der Programmteil, der sich mit dem Festlegen der Farben und der Definition der Bilder beschäftigt, muss nicht mehr weiter erläutert werden.
In der Endlosschleife while True: spielt sich die Animation ab. Die Daten des Beschleunigungssensors werden eingelesen.
Die Funktion "laufen" fast den Bewegungsablauf der Figur zusammen. Als Pausenzeit zwischen den einzelnen Frames wird 0,2s vorgegeben. Insgesamt werden vier Frames und drei verschiedene Bilder 10-mal durchlaufen. Anschließend werden alle LEDs der Matrix dunkel geschaltet.
Wird der Controller nicht bewegt, dann wird kein Beschleunigungswert bezüglich einer der drei Raumachsen größer als 1 sein und das Programm verweilt in der while-Schleife solange, bis der Controller einmal ruckartig bewegt wird. Dadurch wird mindestens ein Beschleunigungswert bezüglich einer Raumachse größer als 2 sein und das Programm führt die Funktion "laufen" aus.
Der SenseHat Joystick kennt fünf Events: rechts, links, oben, unten und Bestätigen. In dieser Übung wird der Joystick so programmiert, dass zu jedem ausgeführten Event im Terminalfenster die Beschreibungsgröße ausgegeben wird.
Den Joystick programmieren | |
Material |
|
Aufgaben |
|
Das Programm joystick_03.py
Terminalausgabe
Wie arbeitet das Programm joystick_03.py?
In der Endlosschleife spielt sich der Ablauf des Programms ab. Immer dann, wenn eine Joystickaktion erkannt wird, gibt der nachfolgende print-Befehl im Terminalfenster den dazugehörigen Event-Text aus. Es gibt
In dem Moment, wo der Joystick in eine Raumrichtung gedrückt wird, gilt:
Sobald der Joystick losgelassen wird, gilt:
In diesem einfachen Spiel werden 44 Bonuspunkte und 20 Maluspunkte auf dem 8x8 LED Feld des SenseHat versteckt. Es ist die Aufgabe eines Spielers, aus den 64 Feldern mit Hilfe des Joystick 10 Felder auszuwählen und dabei auf eine möglichst hohe Summe zu kommen. Am Ende soll das Ergebnis auf dem LED-Feld angezeigt werden.
Das Spielfeld auf der 8x8 LED Matrix
Ein kleines Spiel auf dem 8x8 LED Feld | |
Material |
|
Aufgaben |
|
Das Programm SenseHat_spiel01.py
Wie arbeitet das Programm SenseHat_spiel01.py
Im Initialisierungsteil werden alle Vorbereitungen für den Ablauf des Programms getroffen. Es werden ein Spiel- und ein Statusfeld angelegt. In letzterem werden die 25 Malusfelder per Zufallsgenerator gesetzt. Zu Beginn des Spiels werden alle 64 LEDs eingeschaltet (blau) und der Cursor (rot) in der untersten LED-Reihe (y = 7) an der vierten Stelle von links (x = 4) postiert. Eine Variable "spielzug" wird auf 0 gesetzt. Alle Aktionen finden auf dem Spielfeld statt.
Im Bereich "Ereignisse abfragen" werden die Maluspunkte mit Hilfe der Funktion "hindernisse()" gesetzt und anschließend in einer 10-er Schleife die events des Joysticks abgefragt. Das kennen wir bis auf die Schleife bereits aus Übung 1. Wird der Taster gedrückt (event.direction == ´middle´) prüft das Programm, ob das markierte Feld ein Malusfeld ist. Wenn das der Fall ist, wird die LED auf die Farbe PINK geschaltet und es gibt 100 Maluspunkte. Ist das markierte Feld hingegen kein Malusfeld, wird die LED auf GELB geschaltet und 50 Bonuspunkte dem Konto des Spielers gut geschrieben. Anschließend wird die Variable "spielzug" um 1 erhöht.
Hat der Spieler zehn Felder markiert (entspricht 10 Spielzügen), wird abschließend über eine 2-er Schleife auf der 8x8 LED Matrix der Text "Score: " und anschließend der erspielte Punktestand ausgegeben. Zum Schluss werden alle LEDs auf "schwarz" oder AUS geschaltet.