Wir nennen es Kunst

Bevor wir uns an das erste Spiel wagen, wollen wir erstmal eine kleine Wiederholung machen und dabei noch ein wenig abstrakte Kunst erzeugen. Deswegen fangen wir mit dem nächsten Programm einfach mal an.

import RPi.GPIO as gpio
import max7219.led as led
from random import randint
import time

matrix = led.matrix()

while True:
  for i in range(8):
    for j in range(8):
      matrix.pixel(i,j,randint(0,1))
      time.sleep(0.0002)

Wenn du dieses Programm ausführst, sollte dir abstrakte Kunst auf der Matrix angezeigt werden.

Bis zur while-Schleife in Zeile 8 sollte dir alles bekannt vorkommen. Das Ziel ist recht einfach: wir wollen jede einzelne LED in der Matrix ansprechen und dann mit randint(0,1) zufällig die LED an- und wieder ausschalten. Doch dafür müssen wir erstmal alle Reihen und Spalten durchgehen. Dazu benutzen wir zuerst die for-Schleife in Zeile 9, um alle Zeilen durchzugehen. Die for-Schleife kann das nicht direkt, wir müssen erst einen kleinen Umweg machen. Mit range(8) erstellen wir eine Liste mit den Zahlen 0 bis 7. Wenn wir diese mit print() ausgeben, würde Folgendes im Terminal erscheinen: [0, 1, 2, 3, 4, 5, 6, 7]. Mit der for-Schleife können wir also Objekte in der Liste durchgehen. Diese wird dann in i gespeichert. Heißt, beim ersten Mal ist i gleich 0, beim zweiten Mal ist i gleich 1 und so weiter.

Das Gleiche machen wir in Zeile 10 nochmal, damit wir auch die ganzen Spalten durchgehen. Diese werden in der Variable j gespeichert. In Zeile 11 müssen wir dann nur noch die .pixel()-Funktion aufrufen und übergeben dann die x und y Koordinaten, die in den Variablen i und j gespeichert sind. Als dritten Parameter wird dann noch der Zufallsgenerator übergeben.

Damit der Spaß auch nicht zu schnell zu Ende ist, übergeben wir in Zeile 12 zusätzlich noch eine kleine Pause. Die Pausenzeiten kannst du natürlich auch noch weiter variieren und auf deine eigenen Bedürfnisse anpassen.

Von der Kunst zum Bild

Jetzt haben wir uns genug mit der Kunst beschäftigt. Natürlich können wir auch selbst eigene Bilder erstellen. Eine Möglichkeit dafür ist das Benutzen von multidimensionalen Listen. Während eine Liste so aufgebaut ist:

liste = [1,5,2]

gibt es hier noch eine Dimension mehr:

mListe = [[1,2], [5,4]]

Dabei gilt das gleiche Nummerierungsprinzip. Heißt: print[liste[1]) gibt 5 aus, weil es das zweite Element ist. (Auch hier wird bei 0 angefangen zu zählen). print(mListe[1]) gibt [5,4] aus und print(mListe[1][1]) gibt 4 aus. Diese multidimensionale Liste eignet sich auch perfekt, um viele x- und y-Koordinaten zu speichern. So haben wir auch unsere Krake nachgebaut.

from MyMax7219 import MyMatrix
import time

matrix = MyMatrix()

krake = [[2,1],[3,1],[4,1],[5,1],
    [1,2],[3,2],[4,2],[6,2],
    [1,3],[2,3],[3,3],[4,3],[5,3],[6,3],
    [1,4],[3,4],[4,4],[5,4],[6,4],
    [1,5],[6,5],
    [1,6],[2,6],[3,6],[4,6],[5,6],[6,6],
    [0,7],[1,7],[3,7],[4,7],[6,7],[7,7]]

for i in krake:
    matrix.pixel(i[0],i[1],1)
time.sleep(5)

Damit die Krake leserlich bleibt, haben wir für jede Zeile auf der Matrix eine neue Zeile im Code gemacht. In Zeile 14 und 15 geben wir diese dann aus. Über die uns schon bekannte for-Schleife gehen wir zuerst jede Unterliste durch und nehmen dann in Zeile 15 mit i[0] und i[1] die Koordinaten für die Krake. Am Ende kommt dann unser Logo heraus. Sieht ein wenig pixelig aus, hat dafür aber auch seinen ganz eigenen Charme.