Skipper – Ein Spiel mit vielen Zufallselementen

21. November 2016

Im Übungsprojekt Skipper wenden wir wieder viele Dinge an, die wir in den letzten Tutorials gelernt haben. Der Fokus liegt heute darauf, mit möglichst vielen Zufälligkeiten ein dynamisches, aber dennoch faires Spiel zu erstellen.

Zu meinen ersten elektronischen Spielen zählten LCD-Spiele. Die meisten davon waren simple Geschicklichkeitsspiele, bei denen man zum Beispiel ein Fahrzeug über eine Strecke navigieren musste, während man mit einer konstanten Geschwindigkeit Autos überholen und dem Gegenverkehr ausweichen musste. Ein weiteres war ein Ruderboot, bei dem es die Aufgabe war, vom Himmel fallende Fallschirmspringer zu retten. Genau so ein Spiel machen wir im folgenden Tutorial.

Ganz unten befindet sich die Datei zum downloaden. Du hast somit die Möglichkeit, entweder das Tutorial nach zu basteln, oder Dir den Code direkt anzuschauen.

Das Spiel hat 5 Level und wird immer schwieriger. Diese 5 Level steuern wir über die globale Variable global.level.

Zufallszahlen

Das Thema hatten wir bereits in mehreren Artikeln. Im Artikel Glück: Der Teufel des Game-Designs schrieb ich, wie gut, aber auch wie schlecht Zufallselemente sein können. Das Tutorial Arbeiten mit Zufallszahlen zeigt die Grundlagen, wie man im GameMaker Zufallszahlen generiert. Tutorials wie Schaltjahr berechnen und Aktienkurs zeichnen zeigen konkrete Beispiele, wie Zufallszahlen helfen können.

Unser heutiges Ziel ist es, ein kleines Spiel zu bauen, bei dem wir möglichst viele sinnvolle Anwendungen für den Zufall finden.

Vorbereitung

Da wir ein komplettes, wenn auch kleines, Spiel machen, brauchen wir etwas mehr als sonst.

Sprites

  • spr_boot -> ein Ruderboot mit 128×64 Pixel
  • spr_jumper -> ein Fallschirmspringer mit 48×96 Pixel
  • spr_sonne -> eine Sonne mit 128×128 Pixel
  • spr_welle01 -> Wellen mit 32*32 Pixel
  • spr_wolke_01 -> eine Wolke mit 64×64 Pixel
  • spr_wolke_02 -> eine Wolke mit 128×32 Pixel
  • spr_wolke_03 -> eine Wolke mit 128×128 Pixel

Alle Sprites müssen unter Origin auf Center gestellt werden. Beim Ruderboot solltest Du darauf achten, dass die Maske nicht zu groß wird. Wenn das ganze Boot eine Maske ist, ist das Spiel zu einfach und das einsammeln der Fallschirmspringer wirkt recht komisch.

Sounds

  • snd_game_over
  • snd_fail
  • snd_jumperpickup
  • snd_nextlevel

Da wir ein sehr simples Spiel machen, können alle Effekte auf Mono gestellt werden. Eine Musik habe ich nicht im Beispiel, der Code ist aber vorhanden, nur auskommentiert.

Hintergrund

  • bg_streifen -> 32×32 Pixel Hintergrund, der im Raum gekachelt und animiert wird

Schriften

  • fnt_lives -> Schriftart für Leben und Punkteanzeige. Hier ist eine Retro-Schrift angebracht, habe mich aber beim Projekt für Arial 16 entschieden, da diese Schrift auf jedem Rechner vorhanden sein sollte
  • fnt_gameover -> auch hier wäre Retro besser, ist aber Arial 48. Damit wird am Ende das GameOver angezeigt

Raum

skipper01room_level in der Auflösung 800×600. Speed auf 60 stellen. Unter backgrounds wählen wir bg_streifen aus. Tile Horizontal und Vertikal werden angekreuzt. Die horizontale Geschwindigkeit lassen wir bei 0, vertikal stellen wir auf 1.

Objekte

Wir brauchen 6 Objekte:

  • obj_boot -> das ist der Spieler -> Depth: 0
  • obj_mechanik -> für die Spielmechanik -> Depth: -15
  • obj_jumper -> die Fallschirmspringer -> Depth: 0
  • obj_sonne -> Sonne -> Depth: 10
  • obj_welle_01 -> die Wellen -> Depth: -10
  • obj_wolke_01 -> das sind unsere Wolken -> Depth: 5

Du musst allen Objekten die entsprechenden Sprites zuweisen. Bei den Wolken nimmst Du die erste Wolke, der Rest wird über den Code gesteuert. Die Sortierwerte sind wichtig, damit die Wellen vor dem Boot sind und die Wolken hinter den Fallschirmspringern.

Jetzt platzierst Du die Wellen unten im Raum, das Ruderboot unten in der Mitte, oben rechts oder links die Sonne und noch das Objekt obj_mechanik irgendwo im Raum. Anschließend kannst Du den Raum schließen. Wir arbeiten jetzt nur noch mit den Objekten.

obj_jumper

Event Create

Auch wenn wir die Variable noch nicht definiert haben, fragen wir sie schon ab. Je nach Level gibt es eine andere Fallgeschwindigkeit der Springer. Die Geschwindigkeit wird mit einer switch ermittelt.

Event Step

obj_boot

Wir legen hier die Steuerung fest und sagen, was passiert, wenn der Fallschirmspringer das Boot berührt.

Event Create

Event Step

Event Collision with obj_jumper

Auch für die Punkte benutzen wir eine switch.

obj_wolke_01

Event Create

Hier haben wir gleich zwei Zufallselemente. Der Sprite wird ebenso zufällig bestimmt, wie die Geschwindigkeit der Wolke.

Event Step

Event Draw

Hier sieht man schön, wie man Wahrscheinlichkeiten beeinflussen kann. Wir haben im Create-Event eine Zahl zwischen 0 und 9 erzeugt. Liegt die Zahl zwischen 0 und 4, wird die erste Wolke angezeigt. Liegt sie zwischen 4 und 8, kommt Wolke 2. Wenn die Zahl zwischen 8 und 9 liegt, kommt die dritte Wolke.

obj_mechanik

Event Create

Wenn Du noch Probleme mit for-Schleifen hast, solltest Du Dir das entsprechende Tutorial anschauen.

Event Alarm0

Event Alarm1

Event Alarm2

Die Wolken werden auch zeitlich zufällig erzeugt.

Event Alarm3

Hier dient der Alarm nur als Code-Container.

Event Step

Wenn wir weniger als 1 leben haben, wird auf gameover geschaltet und der Sound in Alarm3 ertönt.

Event Draw

Hier zeichnen wir Punktestand, Leben oder, wenn das Spiel vorbei ist, den entsprechenden Bildschirm.

Event release Escape

Event release R-key

Fertig ist das kleine Spiel. Hier kannst Du Dir das ganze Projekt downloaden:

 

Hat Dir dieser Artikel gefallen? Dann würden wir uns sehr über Unterstützung freuen.

2
Hinterlasse einen Kommentar

avatar
1024
1 Kommentar Themen
1 Themen Antworten
0 Follower
 
Kommentar, auf das am meisten reagiert wurde
Beliebtestes Kommentar Thema
2 Kommentatoren
Bastian CalandoBrodi Letzte Kommentartoren
  Abonnieren  
neueste älteste meiste Bewertungen
Benachrichtige mich bei
Brodi
Gast
Brodi

Tolle Tutorials!
Aber deine Download-Links funktionieren alle bei mir nicht.