Lunar Lander

Vibe Coding einmal ausprobiert

Projekt  ·  Vibe Coding

Ein Spiel wie aus den 80ern – gebaut mit KI

LunarLander ist ein kleines Spiel im Stil der 80er-Jahre: Sie müssen ein Raumschiff sicher auf einer Landeplattform aufsetzen – mit begrenztem Treibstoff, wechselnder Gravitation und allerlei Hindernissen im Weg.

macOS · iOS · Web   |   Swift · JavaScript   |   Claude Code · Codex

So wird gespielt

01

Sanft landen

Bringen Sie das Raumschiff mit begrenztem Treibstoff heil auf die Landeplattform.

02

Punkte & Treibstoff

Vorbeifliegende Objekte bringen Punkte – und ein Treibstofffass füllt den Tank wieder ein wenig auf.

03

Ausweichen oder abwehren

Meteoriten, Autos, Lokomotiven und Spiralnebel kosten ein Leben. Pro Level gibt es fünf Schutzschild-Waffen.

04

Jedes Level anders

Von Level zu Level ändert sich die Gravitation – und irgendwann wird es auch noch windig.

01  ·  macOS

Die erste Version

Die erste Version des Spiels ist in Swift für macOS entstanden. Ich habe Informatik studiert und kenne einige Programmiersprachen. Ich war sogar mal ziemlich gut im Programmieren in C, C++, Perl und Java … aber das ist lange her.

Allerdings scheint es mit dem Programmieren ein wenig so zu sein wie mit dem Fahrradfahren: So richtig verlernt man es nicht, aber die Fahrräder sind eben moderner geworden. Nun also Swift. Für ein Hallo-Welt-Programm reichen meine Kenntnisse; darüber hinaus würde ich sie als … sagen wir … ambitioniert bezeichnen. Aber ein Computerspiel programmieren wollte ich schon immer.

Warum also nicht alles zusammen? Und mit Hilfe meines neuen Steckenpferdes – KI? Ich verband flugs die Apple-Entwicklungsumgebung Xcode mit Claude Code, und schon konnte es losgehen.

Zunächst erstellte ich die Spezifikation des – sehr einfachen – Spiels, indem ich detailliert den Spielablauf, die Tastensteuerung und weitere Details zusammenfasste. An iOS dachte ich zu diesem Zeitpunkt noch gar nicht. Ein wichtiges Element der Spezifikation war, dass ich den Code jederzeit verstehen können wollte. Auch gab es ein paar Architekturentscheidungen: So wollte ich konfigurierbare Parameter in einer eigenen Swift-Datei haben, um kleine Änderungen zentral vornehmen zu können.

Grafik- und Sound-Assets

Und um das Thema KI vollständig zu machen, wurden die Grafiken mit ChatGPT von OpenAI, der 80er-Jahre-16-Bit-Song mit Suno und die Effektsounds mit ElevenLabs erstellt. Ein wenig – manchmal auch ein wenig mehr – Nachbearbeitung war jeweils nötig und sollte nicht verschwiegen werden: bei den Grafiken mit Procreate, bei den Sounds mit Audacity.

Aus der Entwicklung der macOS-Version

Das verflixte GUI

Mit GUI- und Grafikprogrammierung unter macOS kenne ich mich ehrlich gesagt überhaupt nicht aus. Aber auch Claude Code hatte damit seine Schwierigkeiten. Er schien die Anforderungen zwar zu verstehen, aber es gab anfangs viele Probleme bei der Umsetzung: Im Spielfenster konnte man schlicht nichts erkennen außer Strich-Wirrwarr. Immerhin konnte man davon Screenshots machen, sie wieder an Claude übergeben und ihm erklären, was falsch war. Nach einigen Iterationen funktionierte es dann aber.

Es folgten immer weitere Verfeinerungen und Ideen, und der Coding-Agent baute alles brav ein. Habe ich nun Swift gelernt? Wenn ich ehrlich bin, habe ich mich meistens damit begnügt, dem Coding-Agenten einen neuen Auftrag zu geben und mich dann zu freuen, wenn er ihn implementiert hatte. Ich habe zwar ab und zu in die Quellen geschaut, um mich davon zu überzeugen, dass ich sie im Falle eines Falles zumindest noch ansatzweise verstehen könnte – mehr aber auch nicht.

02  ·  iOS

Die iOS-Version

Und dann war da auf einmal die Idee, das Ganze auf iOS zu portieren. Ich habe mir also ein paar Gedanken über die Gestensteuerung gemacht, diese formuliert und an Claude Code übergeben – und ihn machen lassen.

Das Ergebnis war beeindruckend: Der Coding-Agent hat den Code so umstrukturiert, dass sich daraus sowohl die macOS- als auch die iOS-Version bauen ließ. Es folgte noch ein Kampf zwischen mir und der Dokumentation des Apple App Stores, aber schließlich konnte ich die iOS-Version dort erfolgreich platzieren.

LunarLanderMobile im App Store

QR-Code scannen oder im App Store nach „LunarLanderMobile“ suchen – in einem Wort.

03  ·  Web

Die Portierung nach JavaScript

Eine weitere Aufgabe hatte ich aber noch: Ich wollte vom Coding-Agenten eine Beschreibung des Codes, die so genau ist, dass ein anderer Agent aufgrund dieser Beschreibung das Spiel nachbauen kann. Spicken im Quellcode sei erlaubt, aber er sollte sich an die Beschreibung halten.

Claude Code erzeugte daraufhin ein Dokument, das ich an Codex von OpenAI gab, mit dem Auftrag, daraus eine Web-Version des Spiels zu bauen. Und auch das funktionierte! Die Web-Version ist sogar so schlau, dass sie erkennt, wenn sie auf einem Gerät mit Touchscreen läuft, und dann die entsprechenden Bedienungs-Buttons einblendet. Ein paar kleinere „Glitches“ sind in der Version noch vorhanden, aber sie ist komplett spielbar – ohne dass ich selbst eine einzige Zeile Code angefasst hätte.

Fazit

Beeindruckend – mit Einschränkungen

Alles in allem war es sehr beeindruckend, was die Coding-Agenten geleistet haben. Wenn ich aber die aufgewendete Zeit betrachte, muss ich zwei Bereiche getrennt betrachten.

Ich glaube, dass bei einem so kleinen Projekt ein erfahrener macOS-/iOS-Entwickler genauso schnell, wenn nicht sogar etwas schneller gewesen wäre. Gerade am Anfang musste sehr viel Zeit investiert werden, um die Grafik zum Laufen zu bringen, und die Spielelogik ist wirklich nicht kompliziert.

Bei der Portierung sieht es schon anders aus: Es ist immer sehr aufwendig, Code zu verstehen, den andere geschrieben haben. Diesen dann noch mehr oder weniger detailgetreu in eine andere Programmiersprache – JavaScript – und ein völlig anderes Anzeigesystem – die Canvas-2D-API – zu übersetzen, ist schon ein anderes Kaliber. Hier ist die KI vermutlich schneller, aber das mögen erfahrene JavaScript-Profis anders sehen.

Kann jetzt jeder Software entwickeln?

Sagen wir so: Die Schwelle, ein lauffähiges Programm zu erstellen, ist mit KI sehr viel niedriger geworden.

Bei einem kleinen Spielprojekt kann man dabei relativ wenig falsch machen. Bei einer größeren Applikation aber sehr wohl: Wenn man Bedienung und Business-Logik sauber beschreibt, baut das Coding-System sie innerhalb gewisser Grenzen – etwa des verfügbaren Kontextfensters – erstaunlich zuverlässig.

Aber eine performante, skalierbare und ausfallsichere Architektur entsteht deshalb noch lange nicht. Gleiches gilt für Sicherheit und Datenschutz. Ein Coding-Agent kann solche Aspekte zwar berücksichtigen und entsprechende Lösungen vorschlagen – aber nur dann, wenn man es ihm aufträgt, wenn also die Anforderungen bekannt sind. Und dann sollte auch jemand beurteilen können, ob die vorgeschlagene Lösung tatsächlich taugt.

All das sind Dinge, die ein erfahrener Software-Architekt oder -Entwickler kennt und bereits bei Spezifikation und Architektur berücksichtigen würde.

Ein unbedarfter Vibe-Coder weiß möglicherweise nicht einmal, welche Fragen er stellen müsste. Und das kann später zu ziemlich großen Komplikationen führen …

Lust auf eine Runde?

Das Spiel läuft direkt im Browser – auf Touchscreens mit eingeblendeten Steuer-Buttons. Die Quellcodes finden Sie zusammen mit allen Mediendateien auf GitHub.