Heute möchte ich euch mein jüngsten MOC vorstellen: Der PortaBrick Arcade. Der ist eine vollfunktionsfähige mobile Arcade-Spielkonsole, die vollständig aus LEGO® gebaut wurde. Der PortaBrick Arcade besteht aus 432 Bauteilen und wiegt inklusive Akku rund 520 Gramm. Die Software basiert auf dem Pybricks-Projekt.
Ganz im Gegensatz zu allen anderen derzeit auf dem Markt erhältlichen Spielkonsolen aus den dänischen Bricks, ist der PortaBrick Arcade zu 100% funktionsfähig. Das Ganze ist aus einem Hochschul-Projekt hervorgegangen und sollte eigentlich nur ein kleiner Demonstrator zur Treiber-Entwicklung und als Werkzeug zum Auffrischen meiner Python-Kenntnisse werden. Aber wie es manchmal ist, kam es anders. So machte es mir unglaublich viel Spaß, Spiele für den Demonstrator zu schreiben. Daher stand schnell fest, dass ich noch ein ansehnliches Gehäuse um das nackte Grundgerüst baue. Und mit dieser dann kompletten Spielkonsole spielten erste "Probanden", waren durchaus begeistert und so kam es, dass ich alle ursprünglichen Pläne über Bord warf und mich ganz auf die Spielkonsole konzentrierte. Herausgekommen ist nun also der PortaBrick Arcade.
Die Konsole habe ich in Python/MicroPython erstellt. Als Software musste ich auf das Quell-offene Framework Pybricks zurückgreifen, da die LEGO Software erst seit kurzem wieder die Programmierung in Python unterstützt. Wenn alles klappt, werde ich den Programmcode auf die LEGO-Plattform (LEGO Spike App) portieren (irgendwann).
Herzstück des PortaBrick Arcade ist das Spike Prime Hub (baugleich zum Mindstorms Hub aus dem Set 51515). Die Spielkonsole hat zwei Displays: Unten ein monochromes mit einer Auflösung von 5x5 Pixel. Das obere Display kann Farben darstellen und löst mit 6x6 Pixel auf. Dieses obere Display ist auch eine der Besonderheiten des MOCs. Es ist aus vier Einzelmodulen der Spike ColorLightMatrix zusammengesetzt. Dafür musste ich einen eigenen Treiber schreiben, um alle vier Displays als eines ansteuern zu können.
Als das erste Spiel lief, stellte sich schnell heraus, dass das Ganze zwar nett, aber schlecht nutzbar ist. Beim Spielen zeigte sich, dass die Eingaben über die beiden Buttons nur schlecht erkannt wurden. Schuld daran ist der Ablauf des Programms. Alle Anweisungen werden nacheinander abgearbeitet. Und damit ein Mensch überhauüt etwas erkennen und spielen kann, arbeitete ich mit einer kurzen Pause im Programmablauf. Problem: Während der Pause und während der Anweisungen, die nichts mit dem Input zu tun haben, wird kein Input angenommen. Ich brauchte also so etwas wie eine nebenläufige Programmierung beziehungsweise eine Möglichkeit, Anweisungen parallel abzuarbeiten (das sogenannte Multi Threading). Allerdings unterstützt Micropython das nicht ab Haus und das verwendete Framework Pybricks gar nicht. Die Lösung fand ich im Konzept sogenannter Generatoren. Wer mehr darüber lesen mag, kann in meinem Blog vorbeischauen.
Genug der Technik, zu den Inhalten: Aktuell laufen auf der Spielkonsole zwei Spiele. Zum Einen der Nokia-Klassiker Snake, zum Anderen Pong, eines der Arcade-Urgesteine überhaupt. Beides sind aktuell Solo-Player-Spiele. Falls es irgendwann mal eine zweite solche Konsole geben sollte (wer erbarmt sich, die zweite zu bauen???), dann kann Pong auf Multiplayer umgestellt werden. Zwei Spieler, doppelter Spielspaß!
Ebenfalls Teil des Projekts war ein "Pixel Art Painter", eine kleine Anwendung, mit der man Pixelbilder für den PortaBrick Arcade malen und dann in den Programmcode übertragen kann. Der Quellcode des gesamten Projekts steht allen Interessierten auf Github zur Verfügung.
Wer Fragen zum Projekt hat, einfach gerne fragen! Ansonsten freue ich mich auf eure Feedback.
P.S. Wem das Projekt gefällt, der darf mich gern auf LEGO Ideas unterstützen. Dort habe ich den PortaBrick Arcade als Projekt eingestellt und drücke die Daumen. Allen, die mich unterstützen und denen, die mich schon direkt nach dem Start unterstützt haben, ganz ganz herzlichen Dank!
Ganz im Gegensatz zu allen anderen derzeit auf dem Markt erhältlichen Spielkonsolen aus den dänischen Bricks, ist der PortaBrick Arcade zu 100% funktionsfähig. Das Ganze ist aus einem Hochschul-Projekt hervorgegangen und sollte eigentlich nur ein kleiner Demonstrator zur Treiber-Entwicklung und als Werkzeug zum Auffrischen meiner Python-Kenntnisse werden. Aber wie es manchmal ist, kam es anders. So machte es mir unglaublich viel Spaß, Spiele für den Demonstrator zu schreiben. Daher stand schnell fest, dass ich noch ein ansehnliches Gehäuse um das nackte Grundgerüst baue. Und mit dieser dann kompletten Spielkonsole spielten erste "Probanden", waren durchaus begeistert und so kam es, dass ich alle ursprünglichen Pläne über Bord warf und mich ganz auf die Spielkonsole konzentrierte. Herausgekommen ist nun also der PortaBrick Arcade.
Die Konsole habe ich in Python/MicroPython erstellt. Als Software musste ich auf das Quell-offene Framework Pybricks zurückgreifen, da die LEGO Software erst seit kurzem wieder die Programmierung in Python unterstützt. Wenn alles klappt, werde ich den Programmcode auf die LEGO-Plattform (LEGO Spike App) portieren (irgendwann).
Herzstück des PortaBrick Arcade ist das Spike Prime Hub (baugleich zum Mindstorms Hub aus dem Set 51515). Die Spielkonsole hat zwei Displays: Unten ein monochromes mit einer Auflösung von 5x5 Pixel. Das obere Display kann Farben darstellen und löst mit 6x6 Pixel auf. Dieses obere Display ist auch eine der Besonderheiten des MOCs. Es ist aus vier Einzelmodulen der Spike ColorLightMatrix zusammengesetzt. Dafür musste ich einen eigenen Treiber schreiben, um alle vier Displays als eines ansteuern zu können.
Als das erste Spiel lief, stellte sich schnell heraus, dass das Ganze zwar nett, aber schlecht nutzbar ist. Beim Spielen zeigte sich, dass die Eingaben über die beiden Buttons nur schlecht erkannt wurden. Schuld daran ist der Ablauf des Programms. Alle Anweisungen werden nacheinander abgearbeitet. Und damit ein Mensch überhauüt etwas erkennen und spielen kann, arbeitete ich mit einer kurzen Pause im Programmablauf. Problem: Während der Pause und während der Anweisungen, die nichts mit dem Input zu tun haben, wird kein Input angenommen. Ich brauchte also so etwas wie eine nebenläufige Programmierung beziehungsweise eine Möglichkeit, Anweisungen parallel abzuarbeiten (das sogenannte Multi Threading). Allerdings unterstützt Micropython das nicht ab Haus und das verwendete Framework Pybricks gar nicht. Die Lösung fand ich im Konzept sogenannter Generatoren. Wer mehr darüber lesen mag, kann in meinem Blog vorbeischauen.
Genug der Technik, zu den Inhalten: Aktuell laufen auf der Spielkonsole zwei Spiele. Zum Einen der Nokia-Klassiker Snake, zum Anderen Pong, eines der Arcade-Urgesteine überhaupt. Beides sind aktuell Solo-Player-Spiele. Falls es irgendwann mal eine zweite solche Konsole geben sollte (wer erbarmt sich, die zweite zu bauen???), dann kann Pong auf Multiplayer umgestellt werden. Zwei Spieler, doppelter Spielspaß!
Ebenfalls Teil des Projekts war ein "Pixel Art Painter", eine kleine Anwendung, mit der man Pixelbilder für den PortaBrick Arcade malen und dann in den Programmcode übertragen kann. Der Quellcode des gesamten Projekts steht allen Interessierten auf Github zur Verfügung.
Wer Fragen zum Projekt hat, einfach gerne fragen! Ansonsten freue ich mich auf eure Feedback.
P.S. Wem das Projekt gefällt, der darf mich gern auf LEGO Ideas unterstützen. Dort habe ich den PortaBrick Arcade als Projekt eingestellt und drücke die Daumen. Allen, die mich unterstützen und denen, die mich schon direkt nach dem Start unterstützt haben, ganz ganz herzlichen Dank!