BlitzMax: Spieleentwicklung

Aus Wikibooks

Zurück zur Übersicht

Spieleentwicklung[Bearbeiten]

Konzept[Bearbeiten]

Am Anfang braucht man immer eine Idee. Diese ist nicht immer leicht zu finden und ist eigentlich der Kern des ganzen Spiels, denn selbst wenn ein Spiel perfekte Grafiken und Sounds hat, ohne eine gute Spielidee wird man nicht weit kommen.

Grundgerüst[Bearbeiten]

Einfach[Bearbeiten]

Wenn man sich von Anfang an einen guten Programmierstil angewöhnen will, braucht man erstmal den Strict-Modus, damit alles schön geordnet bleibt und alle Variablen an einer Stelle deklariert werden:

Strict

Noch besser ist der SuperStrict-Modus, bei dem jede Variable bei der Deklaration eine Typ-Angabe erforderlich ist.

SuperStrict

Anschließend müssen wir ein Fenster erstellen, am besten im Vollbildmodus:

  • Breite: 640 Pixel
  • Höhe: 480 Pixel
  • Farbtiefe: 16 Bit (entspricht 65536 Farben, bei Farbtiefe 0 wird der Fenstermodus aktiviert)
  • Hertz: 60 (Aktualisierungen in der Sekunde)
Graphics(640,480,16,60)

Jetzt brauchen wir eine Hauptschleife, die solange läuft, bis man die Taste Esc gedrückt hat:

While KeyHit(KEY_ESCAPE)=0
 Cls
 
 Flip
Wend

Fertig ist das erste kleine Grundgerüst:

Strict

Graphics(640,480,16,60)

While KeyHit(KEY_ESCAPE)=0
 Cls
 
 Flip
Wend

Erweitert[Bearbeiten]

Dieses Grundgerüst lässt sich natürlich beliebig erweitern. Zum Beispiel könnte man noch eine Funktion erstellen, die am Ende die ganzen Aufräumarbeiten erledigt. Eine Funktion wird beim Beenden des Programms abgearbeitet, wenn man sie vorher OnEnd mitgeteilt hat:

OnEnd MeineFunktion

In diesem Fall nennen wir unsere Funktion CleanUp.

OnEnd CleanUp

Hinweis: Man übergibt OnEnd nur den reinen Funktionsnamen, man muss keine Klammern setzen. CleanUp hat erstmal nicht viel zu tun, denn wir haben ja noch keine Variablen deklariert, deshalb wird sie erstmal nur den GarbageCollector aufrufen:

Function CleanUp()
 
 GCCollect()
 
End Function

Die neue Version des Grundgerüsts:

Strict

OnEnd CleanUp

Graphics(640,480,16,60)

While KeyHit(KEY_ESCAPE)=0
 Cls
 
 Flip
Wend

'Aufräumarbeiten
Function CleanUp()
 
 GCCollect()
 
End Function

Spieler[Bearbeiten]

Klasse TPlayer[Bearbeiten]

Jedes Spiel braucht einen Spieler, wie dieser aussieht, oder ob er überhaupt gezeichnet wird, entscheidet die Art des Spiels. Meistens verwendet man eine eigene Klasse für den Spieler, um später keine Probleme zu haben, wenn man sein Spiel Multiplayer-fähig machen will.

Type TPlayer
 Field x,y
 Method Move(mx,my)
  Self.x += mx 'Self.x = Self.x + mx
  Self.y += my 'Self.y = Self.y + my
 End Method
End Type

Es gibt sehr wenige Spieltypen, in denen der Spieler keine Koordinaten braucht. Ausserdem sollte eine Methode zur Bewegung vorhanden sein, damit man bei einer Änderung der Bewegungsabläufe nur die Methode ändern muss. Alle Funktionen, die den Spieler betreffen, sollten in dieser Klasse abgelegt sein.

Erweitert[Bearbeiten]

Folgendes Beispiel ist eine Klasse, die man z.B. für 2D-Rollenspiele (ohne ISO-Projektion) braucht:

Type TPlayer
 
 Field x,y
 Field img
 Field energie = 100
 
 Method Move(mx,my)
  Self.x = Self.x + mx
  Self.y = Self.y + my
 End Method
 
 Method Draw()
  DrawImage img, x, y, energie<10 'Wenn Energie<10, dann wird das 2. Frame angezeigt
 End Method
End Type

Gegner[Bearbeiten]

Objekte[Bearbeiten]

Design[Bearbeiten]

Details[Bearbeiten]