oink
ach du lieber bisschen....
ok... wenn man noch sowas wie jumpen einbaut, dann könnte man auch zu schnellen sturz und so sachen mit einbaun, is klar...
aber dann wirds echt haarig, und dann isses ein komplett anderes "game"...
also, ich hab jetzt erstmal versucht, die schräge mit einfließen zu lassen,
um etwas "realistischeres"
(is ja fnord, ey) zu erreichen.
den faktor des beschleunigungssystems hab ich in ne konstante gepackt,
ebenso die pos und die neg grenze.
aber in der rechnung selber hab ich noch viel zu viele konstanten als literale drinstehen,
um da sauber dran schrauben zu können.
(außerdem hat der krempel einen level erreicht, wo es vielleicht doch einfacher wäre,
mit doubles statt mit fixkomma zu arbeiten.)
naja.... schauts euch einfach mal an und verreißt es, wenn euch danach ist,
ich hab für heute ersma jenuch...
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)
#PosFact = 50
#NegMov = 1
#PosMov = 2
Global Dim Land.b(10000)
Procedure CreateLevel()
; *** 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
EndProcedure
CreateLevel()
RelPos = 100
Pos = RelPos
FPos = Pos*10
Repeat
event = WaitWindowEvent(10)
ExamineKeyboard()
ClearScreen($FFC080)
X1 = RelPos-6
Y1 = 295-(Land(Pos-6)&$FF)
X2 = RelPos+6
Y2 = 295-(Land(Pos+6)&$FF)
DY = Y1 - Y2
If KeyboardPushed(#PB_Key_Right) : Move +(15-DY)/2 : EndIf
If KeyboardPushed(#PB_Key_Left) : Move -(15-DY)/2 : EndIf
If Move > -DY*2+1 : Move -1
ElseIf Move < -DY*2 : Move +1
EndIf
If Move > #PosMov * #PosFact : Move = #PosMov * #PosFact : EndIf
If Move < -#NegMov * #PosFact : Move = -#NegMov * #PosFact : EndIf
FPos + Move
If FPos > #PosFact * (10000 - 500 + RelPos)
FPos = #PosFact * (10000 - 500 + RelPos)
Finish = 1
EndIf
If FPos < #PosFact * RelPos
FPos = #PosFact * RelPos
EndIf
Pos = FPos / #PosFact
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
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
Mov.f = Move
angle.f = (#NegMov * #PosFact + Move ) * #PI / ((#NegMov + #PosMov) * #PosFact)
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,"DY: "+Str(DY),$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.