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