| Here's something I posted a couple of years ago  ..... 
 
 
Graphics3D 640,480,16,1
Const Upkey = 200
Const DownKey = 208
Const LeftKey = 203
Const Rightkey = 205
Global Camera = CreateCamera()
PositionEntity Camera,0,0,-150
Type TypePlayer
	Field Model
	Field SpeedX#
	Field SpeedY#
	Field TurnSpeed#
	Field TurnDrag#
	Field TurnAcceleration#
	Field MoveDrag#
	Field MoveAcceleration#
	Field MoveDeceleration#
End Type
Type Frame 
	Field SpeedFactor#
End Type
Global FL.Frame = New Frame
FL\Speedfactor = 1	;60fps
  
Dim Player.TypePlayer(10)
;main program
LoadPlayer()
While Not KeyDown(1)
	DoPlayer()
	RenderWorld()
	
	Flip
Wend
;===============================================
;===============================================
;===============================================
Function LoadPlayer()
	For i = 1 To 10
		Player(i) = New TypePlayer
		Player(i)\SpeedX# = 0
		Player(i)\SpeedY# = 0
		Player(i)\TurnSpeed# = 0
		Player(i)\TurnAcceleration# = 0.03
		Player(i)\TurnDrag# = .99
		Player(i)\MoveAcceleration# = 0.05
		Player(i)\MoveDeceleration# = 0.05
		Player(i)\MoveDrag = .99
		
		;MaxSpeed = .03 / ( 1.0 -.99 ) = 3
		;MaxTurnSpeed = .05 / ( 1.0 - .99 ) = 5
		
		Player(i)\Model = CreateCone()
		ScaleEntity(Player(i)\Model, 10, 10,10)
		HideEntity(Player(i)\Model)
	Next
 	ShowEntity(Player(1)\model)
	
End Function
;===============================================
;===============================================
;===============================================
Function DoPlayer()
	For i = 1 To 10
		DoPlayerMovement( Player( i ) )
	Next
End Function
;===============================================
;===============================================
;===============================================
Function DoPlayerMovement( p.TypePlayer )
	;turning
	Turn# = KeyDown (LeftKey) - KeyDown(RightKey)
	p\TurnSpeed# = p\TurnSpeed#  *p\TurnDrag + Turn * p\TurnAcceleration * FL\SpeedFactor
	TurnEntity p\Model , 0,0, p\TurnSpeed * FL\SpeedFactor
	;moving
	Direction# = KeyDown(UpKey) - KeyDown(DownKey)
	TFormNormal 0,1,0,  p\Model, 0
	Thrust# = ( Direction = 1 ) * p\MoveAcceleration - ( Direction = -1 ) * p\MoveDeceleration 
	p\SpeedX = p\SpeedX * p\MoveDrag + Thrust * FL\SpeedFactor * TFormedX() 
	p\SpeedY = p\SpeedY * p\MoveDrag + Thrust * FL\SpeedFactor * TFormedY()
	TranslateEntity p\Model, p\SpeedX , p\SpeedY , 0
End Function
 
 
 |