Abschnitt 8.5.1, „Timer des ESP32-C3“, Applikation gameoflife

Bei Conways Game of Life handelt es sich um ein Spiel basierend auf einem zweidimensionalen zellulären Automaten (siehe Game of Life).

Basierend auf einfachen Regeln der Nachbarschaft pflanzen sich Zellen in der nächsten Generation fort, stirbt ab oder vermehrt sich. So können Populationen beobachtet werden.

Die Implementierung auf dem ESP32-C3 verwendet ein Entwicklerboard mit einer 5×5 LED-Matrix. Zellen, die neu entstehen, leuchten blau. Absterbende Zellen leuchten rot, und fortbestehende grün.

Conways Game of Life auf einem Board mit 5×5 LEDs

Die in main.c untergebrachte Implementierung erzeugt mit generateGame() ein neues Zellenmuster. In der Konfiguration ist einstellbar, ob das Spielfeld zufällig (CONFIG_INITIALIZE_GAMEFIELD_RANDOM), mit einem oszillierenden Objekt (CONFIG_INITIALIZE_GAMEFIELD_OSCILLATING) oder einem Gleiter-Objekt (CONFIG_INITIALIZE_GAMEFIELD_GLIDER) initialisiert wird.

Konfigurierung der Spielfeld-Initialisierung

In der Hauptschleife wird alle 10 ms das aktuelle Spielfeld, falls verändert, an die WS2812-LEDs gesendet. Ein Timer ruft alle 20 ms die Funktion displayGameState() auf, die die Pixel „zeichnet“: blaue Pixel werden schrittweise langsam heller, rote schrittweise dunkler. Bei jedem 50. Aufruf (i.e. jede Sekunde) wird die Funktion calculateGeneration() aufgerufen, um eine neue Generation auf einem dynamisch neu erstellten Spielfeld aus der bestehenden Generation abzuleiten.

Da das Spielfeld mit 5×5 Zellen recht klein ist, sind der linke und der rechte Rand, sowie der obere und der untere Rand direkt benachbart. Links benachbart zu einem Pixel in der linksten Spalte ist also beispielsweise ein Pixel in der rechtesten Spalte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.