Mehrere Probleme in einem Spiel! Schleife, etc

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ReLeNtLeSS

Betreff: Mehrere Probleme in einem Spiel! Schleife, etc

BeitragMo, Okt 22, 2007 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 1280,1024,32

SetBuffer BackBuffer()

;LoadImage;Loadsound

Global auto=LoadImage("auto.bmp")
Global autoruck=LoadImage("autoruck1.bmp")
Global crash=LoadImage("crash.bmp")
Global baum=LoadImage("baum.bmp")
Global crash2=LoadImage("crash2.bmp")

MaskImage auto,255,0,255
MaskImage autoruck,255,0,255
MaskImage crash,255,0,255
MaskImage baum,255,0,255
MaskImage crash2,255,0,255

;Benötigte festgelegte Zustaende und Vars

font$=LoadFont("Arial",40,True,False,False)
SetFont font$

Global y1=100
Global y11=400
Global y21=700

Global autox=750
Global autoy=950

Global counter=0
Global points=0
Global counter_spielzeit=0
Global punkte_timer=0

Global aut_timer=0

Global by1=-20
Global by2=-180
Global by3=-350
Global by4=0
Global by5=-250
Global by6=-450

Global crashcount=0

Global displaytext=1

;Types

Type auto
 Field car_x
 Field car_y
End Type

;Hautpschleife

time1=MilliSecs()

Repeat

landscape()
auto()
create_autos()
autos_bewegen()
kollisionen()

If displaytext=1 Then
Color(255,0,0)
Text 0,0,"Aktuelle Punktzahl: "+points
Text 0,30,"Aktuelle Spielzeit: "+time4+" Secs"
Text 0,60,"Bisherige Crashes: "+crashcount
Color(255,255,255)
EndIf

time2=MilliSecs()
time3=time2-time1
time4=time3/600

Flip
Cls
Until KeyHit(1)

;Functions

Function menu()
End Function

;__________________

Function landscape()

Color(162,156,156)
Rect 401,0,500,1024
Color(0,255,0)
Rect 0,0,400,1024
Rect 901,0,400,1024
Color(255,255,255)

Rect 650,y1,3,100,1
Rect 650,y11,3,100,1
Rect 650,y21,3,100,1

Rect 400,0,1,1024
Rect 900,0,1,1024

DrawImage(baum,60,by1)
DrawImage(baum,230,by2)
DrawImage(baum,310,by3)

DrawImage(baum,900,by4)
DrawImage(baum,1100,by5)
DrawImage(baum,1200,by6)

by1=by1+2
by2=by2+2
by3=by3+2
by4=by4+2
by5=by5+2
by6=by6+2

y1=y1+2
y11=y11+2
y21=y21+2

If by1=1024 Then by1=-20
If by2=1024 Then by2=-180
If by3=1024 Then by3=-350
If by4=1024 Then by4=0
If by5=1024 Then by5=-250
If by6=1024 Then by6=-450

If y1=1024 Then y1=0
If y11=1024 Then y11=0
If y21=1024 Then y21=0

End Function

;________________

Function auto()

DrawImage auto,autox,autoy

If KeyDown(205)=1 Then autox=autox+4
If KeyDown(203)=1 Then autox=autox-4
If KeyDown(200)=1 Then autoy=autoy-4
If KeyDown(208)=1 Then autoy=autoy+2

If autox<402 Then autox=402
If autox>850 Then autox=850
If autoy<0 Then autoy=0
If autoy>926 Then autoy=926

End Function

;______________________

Function create_autos()

     counter=counter+1 
     If counter>=30 Then
     counter=0

   
     info.auto = New auto
     info\car_x = Rnd(402,850)
     info\car_y = -20
     DrawImage autoruck,info\car_x,info\car_y

     points=points+10

    End If

End Function

;__________________

Function kollisionen()


 For info.auto = Each auto
    If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then       
    DrawImage crash,450,450 crashcount=crashcount+1
    points=points-10
 EndIf
 If crashcount>=3 Then
    displaytext=0
    Cls
    DrawImage crash2,0,0
    Text 345,500,"Youve totally Crashed! Save Highscore? (y/n)?
    WaitKey()

    If KeyDown(44) Then
    highscorefile$=WriteFile("Your_Highscore.txt")
    CloseFile highscorefile$
    stream$=OpenFile("Your_Highscore.txt")
    WriteLine stream$,"Points: "+points+" Zeit: "+time4
    End
    EndIf

    If KeyDown(49) Then
    menu=1
    EndIf
   
 EndIf
    Next


End Function

;------------------------

Function autos_bewegen()

For info.auto = Each auto

info\car_y=info\car_y+6

DrawImage autoruck,info\car_x,info\car_y

Next

End Function

;-----------------------

;__________________________


So meine Probleme sind folgende:

1. Er zeigt mir bei der Highscore Spielzeit nur "0" an
2. Wie schaff ich es das der nich kontinurirlich überprüft ob es ein crash is sondern das er wirklich nur einen punkt abzieht?

Vielen Dank für Hilfe Very Happy

Meoqan

BeitragMo, Okt 22, 2007 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!
so wie ich das sehe soltest du nicht alles in Functionen packen wenn dann mit gosub.
und einen einfachen klapp schalter bekommst du so:

Code: [AUSKLAPPEN]


If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then
if points_check=0 then
points_check=1
points=points-10
endif

....
else
points_check=0
endif

ReLeNtLeSS

BeitragMo, Okt 22, 2007 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
danke teste ich mal! Very Happy


/edit: sorry, aber das löst nich mein problem...
  • Zuletzt bearbeitet von ReLeNtLeSS am Mo, Okt 22, 2007 22:04, insgesamt einmal bearbeitet
 

HyDr0x

BeitragMo, Okt 22, 2007 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Meoqan hat Folgendes geschrieben:
hi!
so wie ich das sehe soltest du nicht alles in Functionen packen wenn dann mit gosub.


Das ist wohl das dümmste was ich je gehört habe wenn ich das mal so sagen darf. Rolling Eyes

Edit: vermutung war wie vermutet falsch ^^.

Aber eigentlich sollte der Timer doch funtzen. habs bei mir versucht und es ging ...

ReLeNtLeSS

BeitragMo, Okt 22, 2007 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
HyDr0x hat Folgendes geschrieben:
Meoqan hat Folgendes geschrieben:
hi!
so wie ich das sehe soltest du nicht alles in Functionen packen wenn dann mit gosub.


Das ist wohl das dümmste was ich je gehört habe wenn ich das mal so sagen darf. Rolling Eyes

Edit: vermutung war wie vermutet falsch ^^.

Aber eigentlich sollte der Timer doch funtzen. habs bei mir versucht und es ging ...



Worauf beziehst du das? Ich hab das Problem, das er bei einem Crash nur EINMAL plus eins machen soll, aber er macht es so lang wie die bilder sich schneiden...
 

HyDr0x

Betreff: Re: Mehrere Probleme in einem Spiel! Schleife, etc

BeitragMo, Okt 22, 2007 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

So meine Probleme sind folgende:

1. Er zeigt mir bei der Highscore Spielzeit nur "0" an


Da drauf beziehe ich mich, dachte du hast probs mit der Spielzeit anzeige ...

ReLeNtLeSS

BeitragMo, Okt 22, 2007 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
die habich gelöst, ich hatte time4 nicht global... es geht also nur noch um das crash problem,

trotzdem danke^^

Meoqan

BeitragMo, Okt 22, 2007 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
juhu ich bin dumm *freu*... dann werd ich mich gleich mal mit diesem thema auseinander setzen!

...5min später...

also:

so finde ich die function am sinvollsten:
Code: [AUSKLAPPEN]

ergebnis=Rechnen(15,3)
END
FUNCTION Rechnen(Zahl1,Zahl2)
   RETURN Zahl1*Zahl2
END FUNCTION


für einen bereich der keinen wert zurück liefert nehme ich gosub was nen kleinen ticken schneller ist...
naja ist hose wie jacke... =) nur wenn man global vergisst gibts nen problem

ReLeNtLeSS

BeitragMo, Okt 22, 2007 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
logo xD

habich ja auch korrigiert...

Meoqan

BeitragMo, Okt 22, 2007 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
so ich hab jetzt dein programm etwas verändert und probiert und probiert und probiert aber ich bekomme kein crash hin... ganze 5 min war meine längste spielzeit...

zu den änderungen:

wenn dein gegnerisches auto auserhalb vom bildschirm ist soltest du es nicht weiter fahren lassen sondern mit DELETE löschen.
die type habe ich einen wert hinzgefügt jetzt funktioniert die kollision richtig
dem image vom auto habe ich einen anderen namen gegeben dasonst die type nicht funkt
(ich hoffe es war so vorgesehen) hab ich das bild cash über das auto gelegt ansonsten mach das rückgänig

versuch mal den debug modus dann weisst du genau wo der fehler liegt.

Code: [AUSKLAPPEN]


Graphics 1280,1024,32

SetBuffer BackBuffer()

;LoadImage;Loadsound

Global i_auto=LoadImage("auto.bmp")
Global autoruck=LoadImage("autoruck1.bmp")
Global crash=LoadImage("crash.bmp")
Global baum=LoadImage("baum.bmp")
Global crash2=LoadImage("crash2.bmp")

MaskImage i_auto,255,0,255
MaskImage autoruck,255,0,255
MaskImage crash,255,0,255
MaskImage baum,255,0,255
MaskImage crash2,255,0,255

;Benötigte festgelegte Zustaende und Vars

font$=LoadFont("Arial",40,True,False,False)
SetFont font$

Global y1=100
Global y11=400
Global y21=700

Global autox=750
Global autoy=950

Global counter=0
Global points=0
Global counter_spielzeit=0
Global punkte_timer=0

Global aut_timer=0

Global by1=-20
Global by2=-180
Global by3=-350
Global by4=0
Global by5=-250
Global by6=-450

Global crashcount=0

Global displaytext=1


;Types

Type auto
   Field car_x
   Field car_y
   Field points_check
End Type

Global auto.auto

;Hautpschleife

time1=MilliSecs()

Repeat
   
   Gosub landscape
   Gosub goauto
   Gosub create_autos
   Gosub autos_bewegen
   Gosub kollisionen
   
   If displaytext=1 Then
      Color(255,0,0)
      Text 0,0,"Aktuelle Punktzahl: "+points
      Text 0,30,"Aktuelle Spielzeit: "+time4+" Secs"
      Text 0,60,"Bisherige Crashes: "+crashcount
      Color(255,255,255)
   EndIf
   
   time2=MilliSecs()
   time3=time2-time1
   time4=time3/600
   
   Flip
   Cls
Until KeyHit(1)

;gosubs ;P



;__________________

.landscape
   
   Color(162,156,156)
   Rect 401,0,500,1024
   Color(0,255,0)
   Rect 0,0,400,1024
   Rect 901,0,400,1024
   Color(255,255,255)
   
   Rect 650,y1,3,100,1
   Rect 650,y11,3,100,1
   Rect 650,y21,3,100,1
   
   Rect 400,0,1,1024
   Rect 900,0,1,1024
   
   DrawImage(baum,60,by1)
   DrawImage(baum,230,by2)
   DrawImage(baum,310,by3)
   
   DrawImage(baum,900,by4)
   DrawImage(baum,1100,by5)
   DrawImage(baum,1200,by6)
   
   by1=by1+2
   by2=by2+2
   by3=by3+2
   by4=by4+2
   by5=by5+2
   by6=by6+2
   
   y1=y1+2
   y11=y11+2
   y21=y21+2
   
   If by1=1024 Then by1=-20
   If by2=1024 Then by2=-180
   If by3=1024 Then by3=-350
   If by4=1024 Then by4=0
   If by5=1024 Then by5=-250
   If by6=1024 Then by6=-450
   
   If y1=1024 Then y1=0
   If y11=1024 Then y11=0
   If y21=1024 Then y21=0
   
   Return

;________________

   .goauto
   
   DrawImage i_auto,autox,autoy
   
   If KeyDown(205)=1 Then autox=autox+4
   If KeyDown(203)=1 Then autox=autox-4
   If KeyDown(200)=1 Then autoy=autoy-4
   If KeyDown(208)=1 Then autoy=autoy+2
   
   If autox<402 Then autox=402
   If autox>850 Then autox=850
   If autoy<0 Then autoy=0
   If autoy>926 Then autoy=926
   
   Return

;______________________
   .create_autos
   
   counter=counter+1
   If counter>=30 Then
      counter=0
      
      
      auto = New auto
      auto\car_x = Rnd(402,850)
      auto\car_y = -20
      DrawImage autoruck,auto\car_x,auto\car_y
      
      points=points+10
      
    End If
   
   Return

;__________________

   .kollisionen
   
   
   For auto.auto = Each auto
      If ImagesCollide(i_auto,autox,autoy,0,autoruck,auto\car_x,auto\car_y ,0) Then       
         DrawImage crash,autox,autoy
         
         If auto\points_check=0
            auto\points_check=1
            crashcount=crashcount+1
            points=points-10
         EndIf
      Else
         auto\points_check=0
      EndIf
      
      
      If crashcount>=3 Then
         displaytext=0
         Cls
         DrawImage crash2,0,0
         Text 345,500,"Youve totally Crashed! Save Highscore? (y/n)?
         WaitKey()
         
         If KeyDown(44) Then
            highscorefile$=WriteFile("Your_Highscore.txt")
            CloseFile highscorefile$
            stream$=OpenFile("Your_Highscore.txt")
            WriteLine stream$,"Points: "+points+" Zeit: "+time4
            End
         EndIf
         
         If KeyDown(49) Then
            menu=1
         EndIf
         
      EndIf
    Next
   
   Return
   

;------------------------

   .autos_bewegen
   
   For auto.auto = Each auto
      
      auto\car_y=auto\car_y+6
      
      DrawImage autoruck,auto\car_x,auto\car_y
      If auto\car_y>1024 Then Delete auto
   Next
   
   Return

;-----------------------

;__________________________ 
meine codes sind die essenz des bössen. nicht du veränderst meine codes sondern meine codes verändern dich!

ReLeNtLeSS

BeitragDi, Okt 23, 2007 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
GoSub?

Funktionen sind ja wohl mal viel besser oO

Aber trtzdem danke für deine Mühe, ich guck was ich daraus entnehmen kann...


/Edit: Probleme gelöst!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group