• 4Minuten
blank

In meiner kleinen Demo “NO RUST“, die ich in GameMaker Studio entwickelt habe, wird beim Abspann-Scroller ein Breakout-Spiel im Hintergrund gezeigt. Dabei spielt die KI alleine. In diesem Tutorial möchte ich zeigen, wie einfach man dies programmieren kann.

Was ist “Breakout”?

Breakout ist ein legendäres Arcade-Spiel, das von Atari entwickelt und erstmals im Mai 1976 veröffentlicht wurde. Es wurde von Nolan Bushnell und Steve Bristow entworfen, wobei die Idee von Bushnells Wunsch inspiriert war, ein Spiel zu schaffen, das einfacher als das damals beliebte Pong war.

Der Spieler steuert einen Paddle am unteren Bildschirmrand, um einen Ball nach oben zu lenken, um damit Steine am oberen Bildschirmrand zu zerstören. Das Ziel ist es, alle Steine mit dem Ball zu treffen, ohne dass der Ball den Boden erreicht. Der Schwierigkeitsgrad steigt mit jedem Level, da die Steine sich anders anordnen und zusätzliche Herausforderungen hinzukommen. Meine bescheidene Version kannst du am Ende dieser Demo sehen:

Breakout hat sich zu einem Kultspiel entwickelt, das auch heute noch zahlreiche Fans auf der ganzen Welt hat. Es hat einen zeitlosen Reiz aufgrund seiner Einfachheit und Suchtfaktor. Die minimalistische Ästhetik, das schnelle Gameplay und die Herausforderung, jeden Stein zu treffen, machen es zu einem zeitlosen Klassiker. Darüber hinaus war Breakout wegweisend für das Genre der Arcade– und Videospiel-Industrie und hat viele weitere Spiele beeinflusst.

Das hat also mein Opa gespielt – was soll ich damit?

Es ist eine kleine, aber interessante Programmieraufgabe. Du kannst es zu einem eigenen Spiel umbauen oder für Demos, Credits oder als Hintergrund deines Menüs nutzen.

Von Breakout gibt es heute noch zahlreiche Varianten, die sogar verkauft werden, wie etwa Alien Wall.

Das Konzept

Für das ganze Spiel brauchen wir lediglich ein Objekt und ein kleines Skript. Schläger und Bricks werden per draw_rectangle() gezeichnet, wir verzichten also komplett auf Sprites. Die Bricks stecken wir in ein ds_grid. Das ist eine GameMaker-Datenstruktur, die einem 2D-Array entspricht.

In der Breite haben wir 24 Bricks, in der Höhe 8 Zeilen. Das kannst du bequem anpassen, ebenso alle Farben und Positionen. Außerdem kannst du noch Punkte und Leben hinzufügen. Im Beispiel beginnt der Ball einfach wieder bei der Startposition, sobald er unten rausfällt. Da die KI perfekt spielt, sollte das aber nicht passieren, außer du änderst die Ballgeschwindigkeit und die des Schlägers so, dass der Schläger nicht hinterher kommt. Bei einer sehr hohen Geschwindigkeit kann es sogar passieren, dass der Ball im Schläger stecken bleibt.

Unser Objekt

Wie du das Objekt nennst, spielt eigentlich keine Rolle. Bei mir heißt es schlicht o_breakout. Hier brauchen wir lediglich die Events

  • Create
  • Step
  • Draw

Außerdem noch ein Skript mit dem Namen get_brick_color().

Event Create

Wie du sehen kannst, definieren wir am Anfang sehr viele Variablen. Hier kannst du bereits viele Veränderungen vornehmen. Die Höhe der Bricks beträgt 20 Pixel, die Breite ist abhängig von der Raumbreite. Am Ende erstellen wir noch unser ds_grid mit dem Namen bricks und füllen dies mit einer for-Schleife.

Event Step

Da ich alles in einem Objekt mache, musste ich auf die GameMaker-Funktionen für Kollision verzichten. Aber das ist eigentlich auch kein Problem. Im Step-Event steuern wir Ball, Schläger und regeln die Logik. Außerdem habe ich die Stellen gekennzeichnet, wo du Soundeffekte abspielen könntest.

Die Bricks werden im ds_grid nicht gelöscht, sondern lediglich auf false gestellt. Das ist diese Zeile: bricks[# i, j] = false;

Dadurch findet keine Kollision mehr statt und diese Bricks werden auch nicht mehr angezeigt.

Event Draw

Jede der acht Zeilen hat eine eigene Farbe. Die Bricks werden doppelt gezeichnet, weil wir einmal das Brick und dann noch einen schwarzen Rahmen zeichnen. Das kannst du natürlich beliebig anpassen. Die Farben der Zeilen werden im Skript get_brick_color(row) geregelt.

Skript get_brick_color()

Das ist sehr simpel. Je nach Zeilennummer gibt das Skript eine entsprechende Hex-Farbe zurück.

Das war es auch schon. Nun kannst du das Spiel nach deinen Vorlieben anpassen. Viel Spaß damit!

Weiterführende Links

Loading-Sequenz in GameMaker
Timing in GameMaker-Projekten
Projekt Snake
Projekt Tic-Tac-Toe – Teil 1
Shader-Programmierung 1: Grundlagen und Sprites

Autor

Abonnieren
Benachrichtige mich bei
guest

0 Comments
Inline Feedbacks
Alle Kommentare anzeigen