Hier ein Code, den ich mal gefunden hatte. (NICHT von mir)
Nicht vergessen ein Car-Sprite anzugeben!
Code: Alles auswählen
;Author: BalrogSoft
InitSprite()
InitSprite3D()
InitKeyboard()
Procedure.f min(a.f, d.f)
  If a < d
    ProcedureReturn a
  Else
    ProcedureReturn d
  EndIf
EndProcedure
Procedure.f max(a.f, d.f)
  If a > d
    ProcedureReturn a
  Else
    ProcedureReturn d
  EndIf
EndProcedure
Procedure.f sign(a.f)
  If a.f < 0
    ProcedureReturn -1.0
  Else
    ProcedureReturn 1.0
  EndIf
EndProcedure
Procedure.f adjust(v.f,threshold.f,maximum.f)
      vx.f = 0
      If (v <= threshold)
        vx=(v/threshold)*1.0
      Else
        vx = 1
      EndIf
      ProcedureReturn vx
EndProcedure
   
Quit.b = #False
accel.f = 0.2 ; acceleration due To gas (up arrow)
steer.f = 0.08 ; steering tightness
steer_normal.f = 0.08 ; Default Steering
steer_handbrake.f = 0.099 ; Incremental increases For handbrakeys
steer_threshold.f = 4 ; Speed where steering at its most manouvreable
MINspd.f = -5 ; max reverse speed
MAXspd.f = 22   ; max speed on straightaway
MAXskiddisplay.f = 2 ; Display skids on slides till this value reached
MAXturnSpd.f = 10 ; maximum speed While turning
MaxTurnSkid.f = 18 ; Maximum speed in turn before skidding
deccel.f = 0.92 ; decelleration due To brakes (down arrow)
handbrake.f = 0.93 ; decelleration due To brakes (down arrow)
handbrake_traction.f = 20 ; Amount of slide For handbrake higher is more
drift.f = 0.98 ; deceleration after letting off gas
speed.f = 0  ; duuuh!
surface.f = 3 ; Tar = 10 gravel = 1 ice = 0.5
traction.f = 5 ; the higher the more slippery init value
traction_max.f = 1 ; Max Traction
Dim vector.f(1) ; vector of the direction of the car
bounceBack.f = 0.6 ; percent of speed when bounced back from hitting an obstacle
angle.f
collide = false ; Used To make sure car doesnt get stuck in collision checks
   
   
If OpenWindow(0, 0, 0, 640, 480, "Car Physics", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
 
  LoadSprite(0, "car.bmp", #PB_Sprite_Texture)
  CreateSprite3D(0, 0)
 
  Repeat
   
    WEvent = WindowEvent()
   
    If WEvent = #PB_Event_CloseWindow
      Quit = #True   
    EndIf
   
    rotation = angle * 180 / #PI
   
    ExamineKeyboard()
    UP = KeyboardPushed(#PB_Key_Up) >> 7
    DOWN = KeyboardPushed(#PB_Key_Down) >> 7   
    HAND = KeyboardPushed(#PB_Key_LeftControl) >> 7
    LEFT = KeyboardPushed(#PB_Key_Left) >> 7
    RIGHT = KeyboardPushed(#PB_Key_Right) >> 7
   
    UD = UP - DOWN
    LR =  RIGHT - LEFT
   
    If LR
      angle + (LR*steer*adjust(Abs(speed),steer_threshold, MAXSpd))
    EndIf
   
   
    If UD = #False
        speed * drift
    ElseIf UD <> #False And HAND = #False
        speed = Min(Max(speed+UD*accel,MINspd),MAXspd)
    EndIf
   
    If (Abs(speed) < accel/2)
      speed = 0
    EndIf
 
    If HAND
       speed  * handbrake
   If (speed > MAXskiddisplay)
       steer = steer_handbrake
   EndIf
   traction = handbrake_traction/surface
    Else
   traction = Max(traction_max, Abs((speed-MAXturnSpd)/surface))
        steer = steer_normal
    EndIf
    If (speed < 0 )
      traction = 1.0
    EndIf
   
    xv.f = ((Cos(angle) * speed) - vector(0))/traction
    yv.f = ((Sin(angle) * speed) - vector(1))/traction
     
    vector(0) + xv.f
    vector(1) + yv.f
   
    track_x.f + vector(0)
    track_y.f + vector(1)
    StartDrawing(ScreenOutput())
    DrawText(0, 0, "Car x: " + StrF(x))
    DrawText(0, 20, "Car y: " + StrF(y))
    DrawText(0, 60, "speed: "+ StrF(speed))
    DrawText(0, 80, "angle: " + StrF(rotation))
    StopDrawing()
   
    Start3D()
    RotateSprite3D(0, rotation + 275, 0)
    DisplaySprite3D(0, track_x, track_y, 255)
    Stop3D()
   
    FlipBuffers()
    ClearScreen(0)
    Delay(30)
   
  Until Quit = #True
 
  CloseWindow(0)
EndIf 
Ich werde jetzt mal kurz den Autor hiervon suchen...
EDIT:
kommt von BalrogSoft:
http://www.purebasic.fr/english/viewtopic.php?t=25481