Graphics 800,600,16,2
Const ESC = 1,Hoch= 200,Runter=208,Links = 203,Rechts=205 , Space = 57
Const Gas#= 0.06, Traegheit#=0.02, Speedmax=3
Const Lenkspeed = 1
Const Grafk_rotate = 5; hier nur durch 360 teilbares ; 1,2,3,4,5,6,8,9,10,12,15,18,usw.
Const debugmode =1
Anzahlblder_Auto = 360/Grafk_rotate
Dim Auto (Anzahlblder_Auto );AutoGrafik_berechnen max 360 Einzelbilder <
;############################################################################################
; Hier wird das Auto gezeichnet und als image gespeichert
Auto(0) = CreateImage (40,20) ; also nur die erstellen die wirklich gebraucht werden!
Color 128,128,128:Rect 0,0,40,20,1 : Color 255,255,128:Oval 33,3,5,5 :Oval 33,12,5,5
GrabImage Auto(0),0,0
; da die meisten ja ein eigenes Bild nehmen wollen welchen als Image auf der Platte ist
; dann die 3 Zeilen entfernen und durch diese eine ersetzten
;Auto(0) = LoadImage ("AutoBild.bmp") ; das Auto sollte nach rechts farhen <<<<<<<<<<<<<<<<
;falls das Auto in eine andere Richting zeigt dreht das Bild mit
;RotateImage Auto(0),90 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;drehen
;############################################################################################
;Hier werden die benötigten Bilder gedreht
For z = 0 To Anzahlblder_Auto
Auto(z) = CopyImage (Auto(0))
RotateImage Auto(z),z* Grafk_rotate
HandleImage Auto(0),10,10 ; je nach Grösse des Bildes anpassen
Next
;AutoGrafik_berechnen max 360 Einzelbilder ......fertig
;startposition
positionX# = 400 : positionY# = 300
SetBuffer BackBuffer()
While Not KeyDown(ESC);#######################################
; tasten abfrage
Grad#=((Grad+(KeyDown(Rechts)-KeyDown(Links))*Lenkspeed* speed#)+360)Mod 360
Speed# = Speed# +(KeyDown( Hoch) - KeyDown(Runter))*Gas#
If (KeyDown(Hoch)+KeyDown(Runter)) = 0 Then
If Speed# > 0 Then Speed# = Speed# - Traegheit# ;langsam werden
If Speed# < 0 Then Speed# = Speed# + Traegheit# ;langsam werden
If Speed# < Traegheit# And Speed# > (Traegheit#*-1) Then Speed# = 0; völliger Stillstand
End If
If speed# > Speedmax Then speed# = Speedmax
If speed# < (Speedmax*-1) Then speed# = (Speedmax*-1)
;Position ändern Auto
positionX# = positionX# + Cos(Grad) * speed#
positionY# = positionY# + Sin(Grad) * speed#
PositionY# = (PositionY#+GraphicsHeight ()) Mod GraphicsHeight()
PositionX# = (PositionX#+GraphicsWidth ()) Mod GraphicsWidth ()
; berechnung welches Bild angezeigt wird
; Beispiel Grafk_rotate = 5 bedeutet das nur 1 Bild für 5 Gradstufen angezeigt wird
Autograd = (grad+Grafk_rotate/2)/Grafk_rotate
DrawImage Auto(Autograd ),Int(positionX#),Int(positionY#)
;####################################################
Gosub Debug
; speedbremse
While MilliSecs()< fx : Wend : fx = MilliSecs()+16 ;
Flip : Cls:
bwx= bwx +1:If MilliSecs() > oltZeit + 999 BW = bwx:bwx = 0: oltZeit= MilliSecs() ;FPS
Wend :End;#################################################
.Debug
Text 10,10 ,"FPS: " + BW:
Text 10,30 ,"Speed: " + Speed#
Text 10,50 ,"Lenkspeed: " + Lenkspeed
Text 10,70 ,"Grad: " + Grad
Text 10,90 ,"Grad des Bildes:" +Autograd*Grafk_rotate
Return
|