2D Racer

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Snaq

Betreff: 2D Racer

BeitragMo, Mai 29, 2006 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

ich wollte einen kleinen 2D racer schreiben mit dem Vorbild von dem Racer was man auf Billigkonsolen in Polen spielen kann.

hier die Bilder dazu:
http://nwsnaq.nw.funpic.de/gfx/spieler.bmp
http://nwsnaq.nw.funpic.de/gfx/gegner.bmp
http://nwsnaq.nw.funpic.de/gfx/strecke.bmp

hier der Code:
Code: [AUSKLAPPEN]

Graphics 300,600,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()
timer = CreateTimer(100)
AppTitle "Racer by Snaq"

; Variablenvereinbarung
Global spieler_speed
Global spieler_leben
Global spieler_x
Global spieler_y
Global punkte

spieler_leben = 5
spieler_speed = 0
spieler_x     = 1
spieler_y     = 300
punkte        = 0   

; Bilder laden
spieler_gfx        = LoadImage("gfx/spieler.bmp")
gegner_gfx      = LoadImage("gfx/gegner.bmp")
strecke_gfx       = LoadImage("gfx/strecke.bmp")

; Bilder ausschneiden
MaskImage spieler_gfx,255,0,255
MaskImage gegner_gfx,255,0,255

; Hintergrundfarbe auf Scharz setzen
ClsColor 0,0,0

; Schriftfarbe auf Rot stellen
Color 255,0,0

; Type für Fahrzeuge erstellen
Type fahrzeug
        Field x
      Field y
        Field speed
End Type

; neue Fahrzeuge erstellen
fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 0
fahrzeug\speed        = spieler_speed

fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 200
fahrzeug\speed        = spieler_speed

fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 400
fahrzeug\speed        = spieler_speed

; Hauptschleife
Repeat
Cls

; Strecke malen
DrawImage strecke_gfx,0,0

; Fahrzeuge bewegen, auf Kollisionen prüfen, Punkte berechnen und neue Fahrzeuge erstellen
For fahrzeug.fahrzeug = Each fahrzeug
fahrzeug\y = fahrzeug\y + 1 + spieler_speed
If fahrzeug\x = spieler_x And (ImagesCollide(spieler_gfx,spieler_x,spieler_y,0,gegner_gfx,fahrzeug\x,fahrzeug\y,0)) Then verloren()
If fahrzeug\y > 600 Then
Delete fahrzeug.fahrzeug
punkte = punkte + 100
fahrzeugerstellen()
Else
DrawImage gegner_gfx,(018+(fahrzeug\x*55)),fahrzeug\y
EndIf
Next

; Spieler malen
DrawImage spieler_gfx,(018+(spieler_x*55)),spieler_y

; Spielerfahrzeug steuern und aufpassen das es nicht ausserhalb des Bildschirmes gerät
If KeyHit(205) Then spieler_x = spieler_x + 1
If KeyHit(203) Then spieler_x = spieler_x - 1
If KeyDown(208) Then spieler_y = spieler_y + 2
If KeyDown(200) Then spieler_y = spieler_y - 2
If spieler_x < 0 Then spieler_x = 0
If spieler_x > 2 Then spieler_x = 2
If spieler_y < 000 Then spieler_y = 000
If spieler_y > 529 Then spieler_y = 529
; Spielerspeed berechnen
spieler_speed = punkte/2000

; Punkte und Speed anzeigen
Text 205,010,"Punkte:"
Text 205,030,punkte
Text 205,060,"Speed:"
Text 205,080,spieler_speed

WaitTimer timer
Flip 0
Until KeyHit(1)

; Funktion um neue Fahrzeuge zu erstellen
Function fahrzeugerstellen()
fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 0
fahrzeug\speed        = spieler_speed
End Function

; Funktion um neue Fahrzeuge zu erstellen
Function fortfahren()
fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 0
fahrzeug\speed        = spieler_speed

fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 200
fahrzeug\speed        = spieler_speed

fahrzeug.fahrzeug  = New fahrzeug
fahrzeug\x       = Rand(0,2)
fahrzeug\y       = 400
fahrzeug\speed        = spieler_speed
End Function

; Funktion verloren
Function verloren()
Cls
spieler_leben = spieler_leben - 1
Text 150,200,"verbleibende Leben: "+spieler_leben,1,1
Text 150,220,"Weiter mit Enter",1,1
Flip
Repeat
Until KeyHit(28)
For fahrzeug.fahrzeug = Each fahrzeug
Delete fahrzeug.fahrzeug
Next
fortfahren()
Return
End Function


nun mein Problem:
Wenn eine Collision passiert wird die funktion verloren() ausgelöst, es wird ein leben abgezogen und dann sollen die ganzen Fahrzeuge gelöscht werden und mithilfe der Funktion fortfahren() 3 neue Fahrzeuge erstellt werden.

Allerdings kann ich die vorhanden Fahrzeuge nicht löschen weil dann ein Problem in der Zeile kommt:
Code: [AUSKLAPPEN]
If fahrzeug\y > 600 Then

mit dem Problem "Object does not exist"



Könnt ihr mir da irgendwie helfen?

~Editiert~
Bitte keine BMP Bilder direkt ins Forum einbinden. Gleich garnicht 300 KB Bitmaps! MfG D2006

Goodjee

BeitragMo, Mai 29, 2006 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
setz einfach hinter das löschen ein :exit
also hinter die funktion verloren...das verhindert, das nochmal auf das gelöschte object zugegriffen wird...erst wieder im nächsten schleifendurchgang auf alle noch existierenden
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Snaq

BeitragMo, Mai 29, 2006 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
okay habe ich gemacht.
Das sieht jetzt so aus

Code: [AUSKLAPPEN]

; Funktion verloren
Function verloren()
Cls
spieler_leben = spieler_leben - 1
Text 150,200,"verbleibende Leben: "+spieler_leben,1,1
Text 150,220,"Weiter mit Enter",1,1
Flip
Repeat
Until KeyHit(28)
For fahrzeug.fahrzeug = Each fahrzeug
Delete fahrzeug.fahrzeug
Next
fortfahren()
Return
End Function
Exit


allerdings kommt jetzt das Problem
"break must appear inside a loop"

ich habe schon mal in der nolinehilfe nachgeschaut aber da gibt es kein Begriff break deshalb frage ich mich was ich machen muss.

Kann mir da jemand weiter helfen?

Goodjee

BeitragMo, Mai 29, 2006 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If fahrzeug\x = spieler_x And (ImagesCollide(spieler_gfx,spieler_x,spieler_y,0,gegner_gfx,fahrzeug\x,fahrzeug\y,0)) Then verloren():Exit


ersetzt mal deine zeile mit meiner....schon gehts
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Snaq

BeitragMo, Mai 29, 2006 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
danke schön für deine hilfe, hast mir sehr geholfen und es läuft endlich dank dir

BIG THX

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group