Endless Runner mit KI erstellen, der fair bleibt
Ein Endless Runner bewegt dich von selbst voran, während du ausweichst, bis du scheiterst und es noch einmal versuchst, also besteht das ganze Spiel aus einem Knopf und einer Herausforderung, die immer weiter steigt. Bau deine Hindernisse als kleine handgemachte Blöcke, die das Spiel zufällig zusammenfügt, denn reiner Zufall erzeugt Sprünge, die niemand schafft.
Was ist an „endlos“ so schwer?
Du kannst nicht entwerfen, wo du nie hinkommst. In einem normalen Level setzt du jede Lücke von Hand. Hier muss das Spiel für immer faire Herausforderungen liefern, und zwar bei Geschwindigkeiten, die du beim Bauen nie ausprobiert hast.
Denk an ein Papierboot, das bei einem Unwetter eine Regenrinne hinunterschießt und über Zweige und Gullydeckel hüpft. Jetzt wird gerechnet. Sagen wir, ein Zweig taucht 600 Pixel vor dem Boot auf. Bei 300 Pixeln pro Sekunde hast du zwei volle Sekunden zum Reagieren. Bei 900 noch zwei Drittel einer Sekunde. Derselbe Zweig ist unbemerkt zu einem anderen Spiel geworden, und ab einem bestimmten Tempo geht es gar nicht mehr.
Das ist das Kernproblem. Tempo frisst Reaktionszeit, also müssen die Abstände mit dem Tempo wachsen, und das Tempo braucht eine Obergrenze.
Warum nicht einfach zufällige Hindernisse?
Weil dem Zufall egal ist, ob du überleben kannst. Früher oder später stellt er einen hohen Zweig direkt hinter einen niedrigen Gullydeckel, ohne Platz zum Landen. Man verliert, ohne etwas falsch gemacht zu haben, und hält das Spiel für unfair.
Bau also Blöcke: ein paar Sekunden Hindernisse, von Hand entworfen. Mach zehn oder zwanzig davon, sortier sie von sanft bis fies und lass das Spiel zufällig aus denen wählen, die zum aktuellen Tempo passen. Zufällige Reihenfolge, menschlicher Entwurf. Das bleibt lange frisch, und jeder Block lässt sich einzeln beurteilen.
Wie baust du es auf?
- Das Boot fährt von selbst, ein Knopf lässt es hüpfen. Eine variable Sprunghöhe gibt Antippen und Halten verschiedene Bedeutungen auf demselben Knopf.
- Fairness für die Finger: Coyote Time und Jump Buffering.
- Fünf Blöcke von Hand.
- Das zufällige Zusammenfügen.
- Tempo, das steigt und sich dann einpendelt.
- Punkte, beste Strecke und ein sofortiger Neustart.
- Neue Blocksätze, je weiter du kommst: Nieselregen, Platzregen, Sturzbach.
Ein stiller Rat für deine KI: Lass das Boot stehen und die Welt daran vorbeiziehen. Fährt das Boot wirklich zehn Minuten weit, wird seine Position eine riesige Zahl, und das kann sich als Zittern zeigen.
Warum versucht es niemand mehr?
Am langsamen Neustart. Dieses Genre lebt von „noch einmal“, und dieses Gefühl hält etwa eine Sekunde. Jedes Menü, jede Animation und jede Ladepause zwischen Scheitern und Weiterlaufen ist eine Gelegenheit, aufzuhören. Zwischen Scheitern und Bewegung sollte genau ein Tastendruck liegen.
War das Scheitern auch noch unfair, wird gar nicht mehr gedrückt. Bei jedem Hindernis, das jemanden erwischt, soll der Gedanke sein: „Da hätte ich früher springen müssen.“
Das sagst du deiner KI
Bau einen einfachen Endless Runner: Die Figur läuft von selbst, ein Knopf lässt sie hüpfen, Hindernisse kommen laufend, das Tempo steigt langsam, und ich starte sofort neu, wenn ich scheitere.
Fang mit einem Zustandsautomaten in einem Mermaid-Diagramm des Laufs an: laufen, hüpfen, landen, knapp vorbei, Treffer, Punktebildschirm, Neustart. Zähl die Tastendrücke vom Treffer bis zum Weiterlaufen. Ich will einen. Bau daraus.
Hindernisse kommen in kleinen handgemachten Blöcken, zufällig zusammengefügt. Die Welt zieht an einer Figur vorbei, die auf der Stelle bleibt.
Rechne für jeden Block aus, wie viel Zeit ich bei Höchsttempo zum Reagieren habe, und zeig die Rechnung. Lass dann eine simulierte Figur mit langsamer Reaktion laufen und nenn jeden Block und jedes Blockpaar, an dem sie immer scheitert. Hast du einen Block nicht durchgerechnet, sag, dass du nicht weißt, ob er schaffbar ist.
Oder spar dir das und schließ den MCP an: Dann findet deine KI das alles von selbst.MCP anschließen
So prüfst du es
- Zehnmal schnell scheitern. Zähl die Sekunden, die zwischen den Versuchen verloren gehen.
- Bei Höchsttempo spielen. Lass dir einen Schalter dafür bauen. Jeder Block sollte noch schaffbar sein.
- Nach der Schuld fragen. Sei nach jedem Scheitern ehrlich. Zu oft „das Spiel war schuld“ heißt: schlechter Block.
- Auf die Nahtstellen achten. Schau dorthin, wo zwei Blöcke aufeinandertreffen. Dort verstecken sich unfaire Paare.
- Zehn Minuten laufen lassen. Das Spiel sollte flüssig bleiben, ohne Zittern oder Abdriften.