PureBasic - Spiele für Fortgeschrittene

Udo Kessler 2003



Teil 3
Das Raumschiff muss auch schießen können

Datei: kurs3.pb

Nun stellt sich uns die Aufgabe, das Raumschiff schießen zu lassen, was für einen Shooter irgendwie notwendig erscheint.
Dazu soll noch ein Sound abgespielt werden...


..welcher mit LoadSound() Geladen und mit PlaySound() abgespielt wird.
Abgespielt werden kann z.B. jede beliebige *.wav Datei. Außerdem müssen wir die Schussgrafik laden (Blaster.bmp) und sie beim Druck auf die Feuertaste (linke STRG) nach rechts fliegen lassen.

Die Tastaturabfrage befindet sich im Sub steuerung.


HINWEIS: Da dieses Programm keine Geschwindigkeitsbegrenzung hat, kann es sein, dass es bei Dir zu schnell oder zu langsam abläuft. Das hängt u.a. von der eingestellten Bildschirm-Wiederholrate ab und Deiner Rechnergeschwindigkeit ab.


Weil mehr als 1 Schuss auf einmal angezeigt werden soll, müssen wir einen Weg finden, die ganzen Daten dieser Schüsse zu speichern, ohne ewig viele Variablen zu erstellen.
Arrays wären ebenfalls nicht geeignet, da man im voraus nicht weiß, wie viele Schüsse maximal auf einmal angezeigt werden.

Die ideale Lösung für dieses Problem sind LinkedLists mit Struktur-Erbe.
Die hier eingesetzte Liste erbt in unserem Fall eine Struktur, in der alle notwendigen Daten gespeichert werden.

? Eine Liste hat keine Maximale Anzahl an Elementen, so könnten wir theoretisch unendlich viele Schüsse gleichzeitig darstellen. Perfekt!

Die einzelnen Einträge unserer Erbe-Liste werden folgendermaßen angesprochen:
ListenName()\ListenVariable
In unserem fall wird z.B. der Listeneintrag x des Schusses so abgerufen oder beschrieben:
playershot()\x + playershot()\speedX
Damit wird im aktuellen Listenelement der Wert von x um den Wert von speedX erhöht, bzw. in unserem Fall verringert (da speedX negativ ist).

Ein neues ListenElement wird z.B. mit dem Befehl AddElement() erzeugt.
Gelöscht wird das aktuelle Element mit DeleteElement()

Um alle Listeneinträge und somit alle Schüsse abzuarbeiten benutzen wir die ForEach-Schleife.
Mit dem Befehl ForEach playershot() arbeiten wir jeden einzelnen Schuss ab, bewegen ihn z.B. nach rechts, oder falls er den Bildschirm verlassen hat, löschen wir ihn bzw. sein Listenelement. Dies alles geschieht im neuen Sub playershots.

Zu guter letzt benutzen wir noch Procedure, um den weiteren Umgang mit den Schüssen zu "automatisieren".

Das ist nicht all zu kompliziert, schau Dir einfach den Code genau an. Außerdem solltest Du für diesen Kurs sowieso im Umgang mit Prozeduren, LinkedLists, und Strukturen vertraut sein.

Puhh, das war ja schon einiges an Arbeit...
Mach ne Pause und dann gehts weiter mit Teil 4



Teil 2

Start

Teil 4