Software

Das Ziel dieser Gruppe war es, eine paremetrisierbare Game Engine für den Flipperautomaten zu entwickeln. Die Anforderungen waren folgende:

  • Erstellen einer parametrisierbaren Game Engine mit Python
  • visuelle Darstellung auf 24" LCD Monitor
  • lauffähig auf einem Raspberry Pi
  • Kommunikation mit FPGA via RS-232
  • Erweiterungen entwickeln (z.B. Minispiele)

 

Aufbau:

 

Das Zentrale Element der Software ist die Basisklasse GameEngine. Dieser implementiert die Standartfunktionen, die jeder Flipper besitzen muss um zu funktionieren. Das bedeutet Funktionen wie Punkte zählen, Spieler hinzufügen, Game Over Conditions bestimmen und natürlich die Kommunikation über den Port. Diese Basisklasse Port wird selbst nicht instanziert, sondern je nachdem wie die Verbindung aussehen soll, einer seiner abgeleiteten Klassen Serial, Socket oder Pipe. WIe der Name schon sagt, regelt die Klasse serial die serielle Kommunikation mit dem FPGA. Alle erhaltenen Daten werden in einem Buffer gespeichert und nacheinander ausgewertet. Die beiden anderen Klassen socket und pipe sind für die Kommunikation mit der virtuellen Testhardware verantwortlich (siehe Abschnitt virtuelle Hardware).

Die spezifischen Flipperfunktionen werden dann in der von GameEngine abgeleiteten Klasse implementiert. In unserem Fall, da wir den Gottlieb Torch Flipper nachbilden wollen, ist dies die Klasse Torch. In ihr wird geregelt, was genau wann passiert, also wie werden die Punkte gezählt, was passiert beim Treffen der Bumper, etc.

Die Klasse Minigame erweitert die GameEngine um die Möglichkeit, danach (oder auch während) des Flipperspiels ein Minispiel zu spielen. Gesteuert wird dieses mit den normalen Flipperarmtasten.

 

Kommunikationsprotokoll:

Das Protokoll für die Kommunikation über RS232 sieht folgendermaßen aus: Es werden immer 2 Byte gesendet, zuerst ein Kommando und dann ein Datenbyte. Das Kommando bestimmt was passiert ist, also z.B. "Bumper getroffen", "Rollover getroffen" etc. Das Datenbyte gibt dann an, welches der Aktoren vom Spielfeld getroffen wurde. Die Kommunikation erfolgt in beide Richtungen, so werden von der Software auch Informationen an des FPGA gesendet. Das Protokoll ist das gleiche, nur sind die Kommandos verschieden, z.B. "Lampe einschalten" oder "Lampe ausschalten".

 

Virtuelle Hardware:

Da das FPGA mit dem kommuniziert wird nicht immer zur Verfügungs stand und auch nicht von Beginn an fertig war, musste eine virtuelle Hardware entwickelt werden, um die Funktionalität der GameEngine zu testen. Dazu wurde ein eigenständiges Programm mit Python entwickelt, welches dann entweder über named pipes oder über sockets mit der Pinballsoftware kommuniziert. Die grünen Quadrate stehen für einen Aktor auf dem Spielfeld. Klickt man auf einen der grünen Aktoren, so simuliert die Software einen Treffer des Aktors und sendet der Pinballsoftware das entsprechende Kommando. Dieses Kommando wird dann ausgewertet und kann eine Rückmeldung, z.b. das Einschalten einer Lampe zur Folge haben. Lampen werden durch einen gelben Kreis symbolisiert, wenn sie eingeschalten sind. Die Software kann entweder auf dem selben Computer laufen (pipe, socket) oder auf einem anderen Rechner (socket). 

 

Visuelle Darstellung:

 

Die Darstellung wurde mittels pygame realisiert. Im linken Teil des Bildschirm werden die Spieler, ihre Punktzahl und die noch verbleibenden Bälle angezeigt, sowie die eingeworfenen Credits. Der Rechte Teil ist für die Minispiele reserviert.

 

Minispiele:

Die Pinballsoftware wurde um Minispiele erweitert, in diesem Fall um ein einfaches Brickbreaker Spiel. Das Spiel startet, sobald ein Spieler keine Bälle mehr zu Verfügung hat. Zerstörte Blöcke gewähren dem Spieler zusätzlich zu seinen bereits erhaltenen Punkten Bonuspunkte. Die Steuerung funktioniert über die normalen Flipperarmtasten, die Flipperarme sind während dieser Zeit deaktiviert. Das Spiel läuft als eigenständige Software auf dem Rechner, um so jedes mögliche Minispiel einfach zum laufen zu bringen. Das Minispiel kommuniziert wiederum über eine named pipe mit der Flippersoftware. Übertragen werden z.B. getroffene Blöcke oder das Ende des Spiels.