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.
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.
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.