Die
Pong-Platine zeigt mit ihren 12x10 Punkten nur einen Ausschnitt des
deutlich größeren Gesamtfelds des Labyrinths. Das Ausschnitts- bzw.
Sichtfenster soll entsprechend den Bewegungen des Spielers über das
gesamte Spielfeld (Labyrinth) wandern. Der Satz an verwendeten
Labyrinthen wird in einer Tabelle ("gPrgBoard" im
Programmspeicher/Flash) gespeichert, wobei jedes Labyrinth als eine
Konstantenmenge abgelegt wird.
Code:
prog_uint16_t
gPrgBoard[SizeY*BOARDN][SizeX]=
{
{0x3FF,0x200,0x2FB,0x282,0x2AE,0x2AA,0x2A2,0x2B8,0x2AF,0x202,0x2FE,0x228,
0x2A2,0x2EE,0x282,0x2BA,0x2AA,0x388,0x2AB,0x23A,0x292,0x2F6,0x254,0x210,
0x2DF,0x388,0x23A,0x2AA,0x28A,0x2AB,0x2BA,0x288,0x2FA,0x282,0x22A,0x3FF},
...
Jede „Zelle“ der Tabelle repräsentiert einen zehnstelligen Binärwert
und beschreibt damit eine Spalte (10 LEDs) des Sichtfensters
(Pong-Platine). Die „Wände“ des Labyrinths (kein Durchgang) sind mit
dem Bitwert „1“ (LED=ein) kodiert, die „Wege“ (Durchgang) mit dem
Bitwert „0“ (LED=aus). Die Tabelle beinhaltet mehre Labyrinthe, und die
Konstante „BOARDN“ enthält die Anzahl der Labyrinthe.
Die
Position des „Sichtfensters“ (sichtbarer Teil des Labyrinths
repräsentiert durch die 12x10 LEDs) bzw. die Position seiner linken,
unteren Ecke wird über die beiden Koordinaten „sx“ und „sy“ („s“ wie
Screen) relativ zur linken, unteren Ecke des Gesamtspielfelds angegeben.
Die
Scroll-Funktion verschiebt die Fläche des Sichtfensters immer dann,
wenn der Spieler in die Nähe der Begrenzung (links, rechts, oben und
unten) des Sichtfensters (LED-Platine) kommt. Die Entfernung zum Rand,
ab der eine Verschiebung ausgelöst wird, ist in der „GAP-Konstante“ in
der Präprozessoranweisung definiert.
Mit einfarbigen LEDs können
(pro LED) an sich nur 2 Zustände abgebildet werden, nämlich „an“ bzw.
„aus“. Beide Zustände werden zur Darstellung von „Wand“ bzw. „Weg“
genutzt. Um die Position (px, py – p wie Player) des Spielers (dritter
Zustand) abgesetzt darzustellen, blinkt die entsprechende LED. Das
Gleiche gilt für die Position (hx, hy – h wie Hatz) der Bombe bzw. des
Ziels.
Die Bewegung der Spieler und damit auch die Verschiebung
des Sichtfensters wird über den Analogjoystick bzw. in der Version ohne
Wii-Nunchuk über die zwei Potentiometer der Platine gesteuert.
Die
manuelle Erarbeitung eines Labyrinths bzw. die Erstellung der
zugehörigen Daten kann sehr aufwendig sein. Natürlich kann ein
individuelles Tool für die Entwicklung eines Labyrinths programmiert
werden, allerdings ist dies gar nicht nötig. Wir bedienen uns einfach
eines Arbeitsblatts einer Standard-Tabellenkalkulation. Die Wände
werden mittels Einsen („1“) markiert bzw. „gemalt“ und die Werte in
entsprechenden Hex-Daten konvertiert. Die farbige Darstellung der Wände
wird mittels „bedingter Formatierung“ erreicht. Das zum Download
beigefügte Arbeitsblatt beinhaltet den Aufbau von drei Labyrinthen in
verschiedenen Schwierigkeitsstufen. Anschließend müssen die Daten noch
im CSV-Format exportiert und wieder in die „main.h“-Datei importiert
werden. Die fehlenden Klammern für eine adäquate „C“-Tabellendefinition
sollte keine Herausforderung darstellen.
Bei der ersten Version
des Programms, habe ich festgestellt, dass die Testanwender gerne
mehrere Spielniveaus hätten, und glücklicherweise ist der
Flash-Speicher groß genug, um mehrere Spielniveaus zu fassen. Das Spiel
wurde dann entsprechend angepasst. Jetzt enthält die Tabelle
Labyrinthdaten für 3 verschiedenen Labyrinthe. Die Anzahl der
Labyrinthe wird mit der Konstante BOARDN bestimmt und kann jeder Zeit
geändert werden. Selbstverständlich müssen die fehlenden Labyrinthe
zusätzlich definiert werden.
Das Spiel fängt immer in der
linken, unteren Ecke am Punkt mit den Koordinaten (1,1) an. Sowohl die
Koordinaten des Zieles (die Bombe) wie auch die Zeit (in Sekunden) für
jedes Spielniveau sind in der „main.h“-Datei in der Tabelle „gPrgHunt“
definiert.
Die entsprechenden Programme liegen in „C“ als AVR-Studio-Projekte und als MS Excel bzw. Open Office Calc zum Download vor.
Dieses
Spiel kann durchaus Grundlage für weitere Entwicklungen sein. Eine
echte Herausforderung wäre eine Anwendung im Bereich der Künstlichen
Intelligenz, wie z.B. die Steuerung eines Roboters. Das könnte ein
Staubsauger sein, der die Karte der eigenen Wohnung im seinem Speicher
intus hat und alle Ecken bei der Reinigung „besuchen“ bzw. abfahren
muss.
Wer also programmiert nun den nächsten Algorithmus für eine maschinelle Labyrinthanwendung unter Nutzung der Pong-Platine?
Download:
1003pong-lab-hex.zip 1003pong-lab-source.zipNachtrag 2019
(B.K.): Die Automatisierung und Digitalisierung der Industrie schreitet
rasant voran. Unternehmen können von der Qualität und Produktivität
roboterbasierter Automatisierungslösungen profitieren. Es geht darum
die komplementären Eigenschaften von Mensch und Maschine optimal zu
kombinieren.
Industrieroboter führen Handhabe- oder andere Fertigungsaufgaben aus. Was hier mehr spielerisch im Kleinen mit der Pong-Platine oder mit
Calliope und
Sparrow entwickelt wird, zeigt kleine Schritte hin zum großen Ziel Roboter-Entwicklung und
künstliche Intelligenz.