BlitzMax: Spieleentwicklung
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