Everybody haves the starwars fever.
Myself, too

It not perfectly. Its just an example how to do it.
Code: Select all
;Starflight
;2005 by Hroudtwolf
;PureBasic-Lounge.de
;
;
;Moving:
;left,right,up and down
;
;Speed
;increase = +
;decrease = -
Declare InitStarFlight (max.l,width.l,height.l)
Declare DisplayStarFlight (x.l,y.l,speed.l,flag.l)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Fehler", "Kann DirectX oder höher nicht initialisieren.", 0)
End
EndIf
InitStarFlight (100,800,600)
If OpenScreen(800, 600, 16, "Starflight")
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
DisplayStarFlight (horz.l,vert.l,speed.l,1)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left):horz.l=horz.l-2:EndIf
If KeyboardPushed(#PB_Key_Up):vert.l=vert.l-2:EndIf
If KeyboardPushed(#PB_Key_Right):horz.l=horz.l+2:EndIf
If KeyboardPushed(#PB_Key_Down):vert.l=vert.l+2:EndIf
If KeyboardPushed(#PB_Key_Add) And speed.l<200:speed.l=speed.l+1:EndIf
If KeyboardPushed(#PB_Key_Subtract) And speed.l>0:speed.l=speed.l-1:EndIf
Delay (10)
Until x > 500 Or KeyboardPushed(#PB_Key_Escape)
CloseScreen()
EndIf
End
Procedure InitStarFlight (max.l,width.l,height.l)
Global width199.l,height199.l,aktionszeit.l,aktion.l
width199.l=width.l
height199.l=height.l
Structure sterndaten
hrichtung.l
vrichtung.l
geschwindigkeitx.l
geschwindigkeity.l
x.l
y.l
z.l
EndStructure
Global NewList sternenflucht.sterndaten()
For x=1 To max.l
AddElement (sternenflucht())
sternenflucht()\x= width199.l/2-(Random(20)-1)
sternenflucht()\y=height199.l/2-(Random(20)-10)
sternenflucht()\z=50
sternenflucht()\geschwindigkeitx=1+Random(5)
sternenflucht()\geschwindigkeity=1+Random(5)
sternenflucht()\hrichtung=1+Random(1)
sternenflucht()\vrichtung=1+Random(1)
Next x
x=0:y=0
For z=1 To 500
ResetList (sternenflucht())
While NextElement(sternenflucht())
If sternenflucht()\hrichtung=1:sternenflucht()\x=sternenflucht()\x-sternenflucht()\geschwindigkeitx:EndIf
If sternenflucht()\hrichtung=2:sternenflucht()\x=sternenflucht()\x+sternenflucht()\geschwindigkeitx:EndIf
If sternenflucht()\vrichtung=1:sternenflucht()\y=sternenflucht()\y-sternenflucht()\geschwindigkeity:EndIf
If sternenflucht()\vrichtung=2:sternenflucht()\y=sternenflucht()\y+sternenflucht()\geschwindigkeity:EndIf
If sternenflucht()\x<0 Or sternenflucht()\x>width199.l-1 Or sternenflucht()\y<0 Or sternenflucht()\y>height199.l-1
sternenflucht()\x=(width199.l/2)+x
sternenflucht()\y=(height199.l/2)+y
sternenflucht()\geschwindigkeitx=1+Random(5)
sternenflucht()\geschwindigkeity=1+Random(5)
sternenflucht()\hrichtung=1+Random(1)
sternenflucht()\vrichtung=1+Random(1)
sternenflucht()\z=100
If sternenflucht()\x <0:sternenflucht()\x=0:EndIf
If sternenflucht()\y <0:sternenflucht()\y=0:EndIf
If sternenflucht()\x >(width199.l)-1:sternenflucht()\x=width199.l-1:EndIf
If sternenflucht()\y >(height199.l)-1:sternenflucht()\y=height199.l-1:EndIf
sternenflucht()\z=sternenflucht()\z+3
If sternenflucht()\z>255:sternenflucht()\z=255:EndIf
EndIf
farbe.l=sternenflucht()\z
Wend
Next z
EndProcedure
Procedure DisplayStarFlight (x.l,y.l,speed.l,flag.l)
If aktion.l=0:aktionszeit.l=GetTickCount_()+(180-speed.l):aktion.l=1:EndIf
If aktion.l=1 And GetTickCount_()>aktionszeit.l:aktion.l=2:EndIf
If speed.l>180
aktion.l=2
EndIf
If StartDrawing (ScreenOutput ())
ResetList (sternenflucht())
While NextElement(sternenflucht())
If aktion.l=2 And speed.l>0
If sternenflucht()\hrichtung=1:sternenflucht()\x=sternenflucht()\x-sternenflucht()\geschwindigkeitx:EndIf
If sternenflucht()\hrichtung=2:sternenflucht()\x=sternenflucht()\x+sternenflucht()\geschwindigkeitx:EndIf
If sternenflucht()\vrichtung=1:sternenflucht()\y=sternenflucht()\y-sternenflucht()\geschwindigkeity:EndIf
If sternenflucht()\vrichtung=2:sternenflucht()\y=sternenflucht()\y+sternenflucht()\geschwindigkeity:EndIf
If sternenflucht()\x<0 Or sternenflucht()\x>width199.l-1 Or sternenflucht()\y<0 Or sternenflucht()\y>height199.l-1
sternenflucht()\x=(width199.l/2)+x.l
sternenflucht()\y=(height199.l/2)+y.l
sternenflucht()\geschwindigkeitx=1+Random(5)
sternenflucht()\geschwindigkeity=1+Random(5)
sternenflucht()\hrichtung=1+Random(1)
sternenflucht()\vrichtung=1+Random(1)
sternenflucht()\z=100
EndIf
If sternenflucht()\x <0:sternenflucht()\x=0:EndIf
If sternenflucht()\y <0:sternenflucht()\y=0:EndIf
If sternenflucht()\x >(width199.l)-1:sternenflucht()\x=width199.l-1:EndIf
If sternenflucht()\y >(height199.l)-1:sternenflucht()\y=height199.l-1:EndIf
sternenflucht()\z=sternenflucht()\z+3
If sternenflucht()\z>255:sternenflucht()\z=255:EndIf
EndIf
farbe.l=sternenflucht()\z
If flag.l=0
Plot (sternenflucht()\x,sternenflucht()\y,RGB(farbe.l,farbe.l,farbe.l))
Else
Circle (sternenflucht()\x,sternenflucht()\y,flag.l,RGB(farbe.l,farbe.l,farbe.l))
EndIf
Wend
StopDrawing ()
If aktion.l=2:aktion.l=0:EndIf
EndIf
EndProcedure