Hilfe bei Vertikal-Autorennspiel

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

@remi_meier
Wenns deiner ist kannst du mir sicher noch bei nem anderen Threaed helfen.

http://www.purebasic.fr/german/viewtopi ... highlight=

Würd mich freuen
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Dir wurde bereits geholfen :mrgreen:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

so, die letzten stunden hab ich mal ein bissel rumgedaddelt...
ich weiß nicht, ob das irgendetwas zur frage hilft,
aber es hat mich gereizt, ne kleinigkeit zum thema zu stricken...

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenWindow(0,0,0,500,300,"Buggy Buster", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,500,300,0,0,0)
Dim Land.b(10000)
;{********************
; *** Create Level ***
Hi    = 7500
Dir   = 0
Turn  = 0
count = 0
While count < 10000
  Land(count) = 20 + Hi / 100
  Turn = (Random(25000)-Hi-5000)/666
  Dir + Turn
  If Dir >  100 : Dir =  100 : EndIf
  If Dir < -100 : Dir = -100 : EndIf
  Hi + Dir 
  If Hi > 15000 : Hi = 15000 : EndIf
  If Hi <     0 : Hi =     0 : EndIf
  count + 1
Wend
Land(count) = 20 + Hi / 100
;}********************
RelPos = 100
Pos = RelPos
FPos = Pos*10
Repeat
  event = WaitWindowEvent(10)
  ExamineKeyboard()
  ClearScreen($FFC080)
  If KeyboardPushed(#PB_Key_Right)
    Move +2
    If Move > 30 : Move = 30 : EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    Move -2
    If Move < -10 : Move = -10 : EndIf
  EndIf
  If Move > 0 : Move -1 : EndIf
  If Move < 0 : Move +1 : EndIf
  FPos + Move
  If FPos > 10*(10000 - 500 + RelPos)
    FPos = 10*(10000 - 500 + RelPos)
    Finish = 1
  EndIf
  If FPos < 10*RelPos
    FPos = 10*RelPos
  EndIf
  Pos = FPos / 10
  StartDrawing(ScreenOutput())
  ; Draw Level
    For n=-RelPos To 499-RelPos
      Hi = Land(Pos+n) & $FF
      Line(RelPos+n,299,0,-Hi,$0080C0)
      Line(RelPos+n,299-Hi,0,1,$000000)
      If Pos+n = 10000 - 500 + RelPos
        Line(RelPos+n,299-Hi,0,-30,$0000FF)
        Box(RelPos+n,269-Hi,10,10,$0000FF)
      EndIf
    Next
  ; Draw Car
    X1 = RelPos-6
    Y1 = 295-(Land(Pos-6)&$FF)
    X2 = RelPos+6
    Y2 = 295-(Land(Pos+6)&$FF)
    DY = Y2 - Y1
    X3 = X1 + DY / 2
    Y3 = Y1 - 6
    X4 = X2 + DY / 2
    Y4 = Y2 - 6
    LineXY(X1,Y1,X2,Y2,$202000)
    LineXY(X1,Y1,X3,Y3,$202000)
    LineXY(X2,Y2,X4,Y4,$202000)
    LineXY(X3,Y3,X4,Y4,$202000)
    Circle(X1,Y1,4,$603000)
    Circle(X2,Y2,4,$603000)
    Select (Pos & 6 >> 1)
     Case 0
       Line(X1    , Y1 - 3, 0, 6, $FFC000)
       Line(X2    , Y2 - 3, 0, 6, $FFC000)
     Case 1
       Line(X1 - 2, Y1 + 2, 4,-4, $FFC000)
       Line(X2 - 2, Y2 + 2, 4,-4, $FFC000)
     Case 2
       Line(X1 - 3, Y1    , 6, 0, $FFC000)
       Line(X2 - 3, Y2    , 6, 0, $FFC000)
     Case 3
       Line(X1 - 2, Y1 - 2, 4, 4, $FFC000)
       Line(X2 - 2, Y2 - 2, 4, 4, $FFC000)
    EndSelect
  ; Draw Speedo
    angle.f = (10+Move) * #PI / 40
    Circle(400,294,29,$000000)
    Circle(400,294,27,$2040FF)
    Box(371,296,58,2,$000000)
    Box(370,298,60,3,$0080C0)
    Line(400,294,-25*Cos(angle),-25*Sin(angle),$000000)
    DrawText(10,270,"Way: " + Right("0000"+Str(Pos-RelPos),4) + " m",$000000,$0080C0)
    If Finish
      DrawText(180,50,"## F I N I S H ##",$000000,$FFC080)
    EndIf
  StopDrawing()
  FlipBuffers()
  If event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    EXIT = 1
  EndIf
Until EXIT = 1
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Kaeru: :allright:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Fett :shock:
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Hehe, cool!
Erinnert mich stark an meine Lemmige :mrgreen:
http://www.purebasic.fr/german/viewtopi ... 6970#66970
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Ich hoffe is is ok das ich mal was getestet habe. Hier nun verliert er geschwindigkeit bei steilen Anstiegen und gewinnt geschwindigkeit bei steilen abfahrten. sozusagen a bisl gravitation.

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenWindow(0,0,0,500,300,"Buggy Buster", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,500,300,0,0,0)
Dim Land.b(10000)
;{********************
; *** Create Level ***
Hi    = 7500
Dir   = 0
Turn  = 0
count = 0
While count < 10000
  Land(count) = 20 + Hi / 100
  Turn = (Random(25000)-Hi-5000)/666
  Dir + Turn
  If Dir >  100 : Dir =  100 : EndIf
  If Dir < -100 : Dir = -100 : EndIf
  Hi + Dir
  If Hi > 15000 : Hi = 15000 : EndIf
  If Hi <     0 : Hi =     0 : EndIf
  count + 1
Wend
Land(count) = 20 + Hi / 100
;}********************
RelPos = 100
Pos = RelPos
FPos = Pos*10
Repeat
  event = WaitWindowEvent(10)
  ExamineKeyboard()
  ClearScreen($FFC080)
  
  If KeyboardPushed(#PB_Key_Right) And Move < 30
    Move +2
  ElseIf KeyboardPushed(#PB_Key_Left) And Move > -10
    Move -2
  ElseIf Pos-RelPos > 0
    If Move > 0 : Move -1 : EndIf
    If Move < 0 : Move +1 : EndIf
    
    If Y1 - Y2 <= -3
      Move+ 2
    ElseIf Y1 - Y2 >= 3
      Move-2
    EndIf
  EndIf

  FPos + Move

  If FPos > 10*(10000 - 500 + RelPos)
    FPos = 10*(10000 - 500 + RelPos)
    Finish = 1
  EndIf
  If FPos < 10*RelPos
    FPos = 10*RelPos
  EndIf
  Pos = FPos / 10

  
  
  StartDrawing(ScreenOutput())
  ; Draw Level
    For n=-RelPos To 499-RelPos
      Hi = Land(Pos+n) & $FF
      Line(RelPos+n,299,0,-Hi,$0080C0)
      Line(RelPos+n,299-Hi,0,1,$000000)
      If Pos+n = 10000 - 500 + RelPos
        Line(RelPos+n,299-Hi,0,-30,$0000FF)
        Box(RelPos+n,269-Hi,10,10,$0000FF)
      EndIf
    Next
  ; Draw Car
    X1 = RelPos-6
    Y1 = 295-(Land(Pos-6)&$FF)
    X2 = RelPos+6
    Y2 = 295-(Land(Pos+6)&$FF)
    DY = Y2 - Y1
    X3 = X1 + DY / 2
    Y3 = Y1 - 6
    X4 = X2 + DY / 2
    Y4 = Y2 - 6
    
  
    
    LineXY(X1,Y1,X2,Y2,$202000)
    LineXY(X1,Y1,X3,Y3,$202000)
    LineXY(X2,Y2,X4,Y4,$202000)
    LineXY(X3,Y3,X4,Y4,$202000)
    Circle(X1,Y1,4,$603000)
    Circle(X2,Y2,4,$603000)
    Select (Pos & 6 >> 1)
     Case 0
       Line(X1    , Y1 - 3, 0, 6, $FFC000)
       Line(X2    , Y2 - 3, 0, 6, $FFC000)
     Case 1
       Line(X1 - 2, Y1 + 2, 4,-4, $FFC000)
       Line(X2 - 2, Y2 + 2, 4,-4, $FFC000)
     Case 2
       Line(X1 - 3, Y1    , 6, 0, $FFC000)
       Line(X2 - 3, Y2    , 6, 0, $FFC000)
     Case 3
       Line(X1 - 2, Y1 - 2, 4, 4, $FFC000)
       Line(X2 - 2, Y2 - 2, 4, 4, $FFC000)
    EndSelect
  ; Draw Speedo
    angle.f = (10+Move) * #PI / 40
    Circle(400,294,29,$000000)
    Circle(400,294,27,$2040FF)
    Box(371,296,58,2,$000000)
    Box(370,298,60,3,$0080C0)
    Line(400,294,-25*Cos(angle),-25*Sin(angle),$000000)
    DrawText(10,270,"Way: " + Right("0000"+Str(Pos-RelPos),4) + " m",$000000,$0080C0)
    DrawText(10,250,"Move: "+Str(Move),$000000,$0080C0)
    DrawText(10,230,"YDiv: "+Str(Y1-Y2),$000000,$0080C0)
    If Finish
      DrawText(180,50,"## F I N I S H ##",$000000,$FFC080)
    EndIf
  StopDrawing()
  FlipBuffers()
  If event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    EXIT = 1
  EndIf
Until EXIT = 1
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ich hoffe is is ok das ich mal was getestet habe.
aber klar doch. :D :allright:

klasse idee.
ein bischen "quick&dirty" eingefügt, aber klasse ansatz.
ich werd das mit einbaun, wenn's recht ist. :mrgreen:

PS:
quick&dirty, aber effektiv. :allright:
ich bastel jetzt echt ein wenig länger rum, das so einzubaun, bis es mir gefällt. :|
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Jo, als nächster Schritt wäre dann das Schanzen dran ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du meinst jumpen und so?

...eigentlich wollte ich schon auf der letzten version ein ballergame aufsetzen... :mrgreen:
...und jetzt häng ich dran, die beschleunigung durch die schräge effektiv einzubaun...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten