>>Vorab, erstellen wird mit zwei l's geschrieben<<
Hallo zusammen,
nach meiner Frage nach einem Tut, hab ich mir mal das Video von Gernot angesehen.
Habe dann quasi alles nach gearbeitet und dabei ist der folgende Code rausgekommen.
Bitte mal kontrollieren und ich wäre dankbar wenn mir jemand noch die FOREACH Abfrage erläutern könnte.
// --------------------------------- //
// Project: letzter versuch
// Start: Friday, February 15, 2008
// IDE Version: 5.172
GLOBAL playery = 400
GLOBAL playerx = 200
//---------------------------------------------------------------------------------------
LOADSPRITE "../thomas/raumschiff.png", 0
LOADSPRITE "../thomas/asteroid.png", 2
LOADSPRITE "../thomas/laser.png", 1
//--------------------------------------------------------------------------------------
TYPE SCHUSS //SCHUSS mit feld >>x<< und Feld >>y<< vormerken
x
y
ENDTYPE
//---------------------------------------------------------------------------------------
LOCAL schuesse[] AS SCHUSS //schuesse[] als variable(veränderbar) AS(als) SCHUSS
//---------------------------------------------------------------------------------------
WHILE TRUE //wenn wahr dann......
//---------------------------------------------------------------------------------------
IF KEY(203) THEN playerx =playerx -2 // Bewegung des Spieler Raumschiffes
IF KEY(205) THEN playerx =playerx +2 //Tasten druck wird geprüft und wenn ja(while true) dann minus oder plus nach links oder rechts
//---------------------------------------------------------------------------------------
playerx = MAX(MIN(playerx,600),16) //Begrenzung des Spielers auf die x-Achse des Spielfeldes zwischen 16
//und 600 (16 = 16 pixel vom linken Rand weg und 600 = rechter Rand)
//---------------------------------------------------------------------------------------
LOCAL schuss AS SCHUSS //nach dem Abschuss wird der schuss als Neuer SCHUSS der widerum als variable schuesse[]
//,(wir erinnern uns,SCHUSS wurde als TYPE SCHUSS hinterlegt,vor der Schleife)
//---------------------------------------------------------------------------------------
IF KEY(57) AND warten = GETTIMERALL() <<Pause bis zum nächsten Schuss
schuss.y=400 //Wenn Space(Leertaste) gedrückt dann den schuss.y <-auf der y-Achse malen hier 400
schuss.x = playerx+10 //hier wird der schuss auf der x-Achse gemalt anhand der Raumschiff Position +10 nach rechts
//damit er in der Mitte der Grafik erscheint
DIMPUSH schuesse[], schuss //fügt ein neues Feld(in unserem Fall einen Schuss ein) hier steht schuss als Wert der eingetragen wird in ->
//schuesse[] ( schuesse[] wurden ja "LOCAL" als "SCHUSS" bezeichnet)
//Also zum Verständniss >>schuss<< wird in die Variable schuesse[] "+einen schuss"eingetragen, die widerum in
//den Type SCHUSS hinterlegt wird.
warten = GETTIMERALL()+200
ENDIF
//---------------------------------------------------------------------------------------
FOREACH laser IN schuesse[] //Das verstehe ich noch nicht so ganz, >>Foreach<< heißt soviel wie >> "Für jeden" <<
//Hier wird irgendwie aus dem Schuss eine neue Variable namens laser
//die in schuesse[], die widerum in den Type SCHUSS erstellt werden, denke ich.
DEC laser.y, 2 // hier wird der laser.y, also die y-achse pro durchlauf um 2 verringert (DEC = verringern),das heißt der laser geht 2 Felder auf y-achse hoch
// wir erinnern uns (INC = erhöhen) der Variable Beispiel a = 5 wird bei jedem durchlauf um wert x veringert (INC a,(1 =x)
IF laser.y < 0 THEN DELETE laser //wenn der laser kleiner 0 auf der y-achse ist, bitte löschen
DRAWSPRITE 1,laser.x,laser.y //Naja und hier zeichnen wir den laser(schuss) auf den Bildschirm
NEXT
//---------------------------------------------------------------------------------------
DRAWSPRITE 0,playerx,playery
SHOWSCREEN
WEND
Damit nicht durchgehend geschossen wird habe ich noch eine Pause mit warten = GETTIMERALL() eingebaut.
Hier zur besseren Übersicht auch noch eine PDF-Datei
spaceshooter teil 1 tut.pdf - 0.04MBHier die Grafiken:
grafiken.rar - 0.00MBGruß Jasper