Graphics 640,480,32,2 SetBuffer BackBuffer() SeedRnd MilliSecs() Const shipoof#=.01 Global turn#=0,rot#=0 Global pov# Global cx#=320 Global cy# Global r=570 Type shooter Field an# Field tick End Type Type bob Field an#,alt# Field van#,valt# End Type Type fizz Field an# Field life,length#,shrink# Field turn#,oof# End Type Type ship Field an#,alt# Field van#,valt# Field talt# End Type Type pip Field an#,alt#,life End Type Type herb Field an#,length# End Type ;Function anglise#(h#) ;cy=320+3*h/2 ;cx=320 ;r=cy+h ;Oval cx-r,480+cy-r,r*2,r*2,0 ; theta#=ATan(320.0/(320+3*h/2)) ; Return theta ;End Function Function inview(an#) an#=Abs(turn-an) If an>180 Then an=360-an If an>0 And anAbs(dx) m#=dx/dy If Sgn(m)<0 Then m=-m x#=x1 y#=y1 d#=Sgn(x2-x1)*m For c=1 To Abs(y2-y1) WritePixel x,y,rgb x=x+d y=y+Sgn(y2-y1) Next Else m#=dy/dx If Sgn(m)<0 Then m=-m y#=y1 x#=x1 d#=Sgn(y2-y1)*m For c=1 To Abs(x2-x1) WritePixel x,y,rgb y=y+d x=x+Sgn(x2-x1) Next EndIf End Function For c=1 To 10 s.shooter=New shooter s\an=Rnd(360) s\tick=Rand(10,100) Next For c=1 To 5 sh.ship=New ship sh\an=Rand(360) sh\talt=Rand(40,200) sh\alt=sh\talt+Rnd(-10,10) sh\van=Rnd(-1,1) Next For c=1 To 10 h.herb=New herb h\an=Rand(360) h\length=Rnd(2,10) Next dayan#=0 wobblean#=0 wobble#=0 While Not KeyHit(1) rot=rot+(MouseX()-320)/100.0 turn=rot Mod 360 If turn<0 Then turn=360+turn r=570+rot/3.0 If r<5 Then r=5 If r>320 pov=ASin(320.0/r) Else pov=90 cy=480 EndIf cy=480+r*Cos(pov) Text 0,30,pov wobblean=wobblean+.3 For s.shooter=Each shooter If s\tick=0 b.bob=New bob b\an=s\an an#=Rnd(-45,45) p#=Rnd(10,20) b\van=p*Sin(an)/5 b\valt=p*Cos(an) s\tick=Rand(20,100) Else s\tick=s\tick-1 EndIf If inview(s\an) an=s\an-turn Rect cx+r*Sin(an)-3,cy-r*Cos(an),6,6 EndIf Next For b.bob=Each bob oldan#=b\an b\an=(b\an+b\van) Mod 360 If b\an<0 Then b\an=360+b\an b\alt=b\alt+b\valt b\valt=b\valt-1 If b\alt<0 For c=1 To Rand(5) f.fizz=New fizz f\an=b\an f\oof=Rnd(20,40) f\turn=Rnd(-30,30) f\life=Rand(20,50) f\shrink=0.0001 Next Delete b ElseIf inview(b\an) an=b\an-turn oldan=oldan-turn Line cx+(r+b\alt)*Sin(oldan),cy-(r+b\alt)*Cos(oldan),cx+(r+b\alt)*Sin(an),cy-(r+b\alt)*Cos(an) EndIf Next LockBuffer() For f.fizz=Each fizz f\life=f\life-1 If f\life>1 f\life=f\life-1 f\length=f\length+.8 Else If f\life<-100 f\shrink=f\shrink*1.015 f\oof=f\oof-f\shrink f\turn=f\turn*(1+f\shrink) EndIf EndIf If inview(f\an) an=f\an-turn x#=cx+r*Sin(an) y#=cy-r*Cos(an) an=an+5*Sin(wobblean-f\an) oof#=f\oof For c=1 To Int(f\length) oldx=x oldy=y oof=oof*.9 x=x+oof*Sin(an) y=y-oof*Cos(an) an=an+f\turn rgb=255*c/(f\length+1) rgb=(rgb Shl 8) Or (rgb Shl 16) drawLine(oldx,oldy,x,y,rgb) ;Line oldx,oldy,x,y Next EndIf If f\life<-400 Delete f EndIf Next For pip.pip=Each pip pip\an=pip\an+Rnd(-.5,.5) pip\alt=pip\alt+Rnd(-2,2) If inview(pip\an) an#=pip\an-turn rgb=Rand(100,255) rgb=rgb Or (rgb Shl 8) Or (rgb Shl 16) WritePixel cx+(r+pip\alt)*Sin(an),cy-(r+pip\alt)*Cos(an),rgb EndIf pip\life=pip\life-1 If pip\life=0 Then Delete pip Next For h.herb=Each herb If inview(h\an) an#=h\an-turn s1#=Sin(an) c1#=Cos(an) s2#=Sin(an+1) c2#=Cos(an+1) rgb=255 Or (255 Shl 8) Or (255 Shl 16) drawline(cx+r*s1,cy-r*c1,cx+(r+h\length*5)*s1,cy-(r+h\length*5)*c1,rgb) drawline(cx+r*s2,cy-r*c2,cx+(r+h\length*5)*s2,cy-(r+h\length*5)*c2,rgb) drawline(cx+(r+h\length*5)*s1,cy-(r+h\length*5)*c1,cx+(r+h\length*5)*s2,cy-(r+h\length*5)*c2,rgb) EndIf Next UnlockBuffer() For sh.ship=Each ship sh\an=(sh\an+sh\van) Mod 360 If sh\an<0 Then sh\an=360+sh\an sh\alt=sh\alt+sh\valt sh\valt=sh\valt+(sh\talt-sh\alt)*shipoof-.05 pip.pip=New pip pip\alt=sh\alt pip\an=sh\an pip\life=Rand(15,30) If inview(sh\an) an#=sh\an-turn x#=cx+(r+sh\alt)*Sin(an) y#=cy-(r+sh\alt)*Cos(an) Oval x-5,y-5,10,10,0 EndIf Next Oval cx-r,cy-r,r*2,r*2,0 Text 0,0,pov Text 0,15,(MouseX()-320) Mod 100 Flip dayan=dayan+.1 day#=Sin(dayan-turn)*.5+.5 ClsColor 0,0,255*day Cls Wend