Starflight
Posted: Tue May 31, 2005 5:27 am
Code updated For 5.20+
Everybody haves the starwars fever.
Myself, too
It not perfectly. Its just an example how to do it.
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