Challenge: 
Winner?: 
No
Code Snippet: 
sync on:sync rate 120

randomize timer()

draw sprites first
draw to front


global dim level(10100)
global dim enemies(10000,2)
global dim blocks(10000,2)
global dim tanks(10000,2)


global lives
global death
global score
global invinsable
global totalblock
global gas
global totaltank
global screeny#
global speed#
global basespeed


set image colorkey 255,0,255

ink rgb(0,100,0),rgb(0,100,0)
box 0,0,100,600
get image 10,0,0,100,600
cls



restore plane
image(1,4)

restore bullet
image(2,4)

restore heli
image(3,5)

restore block
image(4,15)

restore outline
image(5,2)

ink rgb(100,0,0),rgb(100,0,0)

box 0,0,100,12
get image 6,0,0,100,12
cls

box 0,0,50,50
get image 7,0,0,50,50
cls


do

   undim level()
   undim enemies()
   undim blocks()
   undim tanks()
   global dim level(10100)
   global dim enemies(10000,2)
   global dim blocks(10000,2)
   global dim tanks(10000,2)

   death=0
   score=0
   invinsable=255
   screeny#=0
   speed#=0
   basespeed=1
   totalblock=0
   totaltank=0
   gas=2000
   x=0
   y=0

   lives=3

   for i=1 to 10000
      a=rnd(30)

      if x=10

         if y mod 4=0
            level(i-rnd(9)-1)=4
         endif

         y=y+1
         x=0
         fue=0

         if rnd(10)=1 and y>6
            for j=0 to 2
               for k=0 to j
                  level(i-47+j*10-k)=3
                  level(i-46+j*10+k)=3
               next k
            next j

            for j=0 to 1
               for k=0 to j
                  level(i-7-j*10-k)=3
                  level(i-6-j*10+k)=3
               next k
            next j

         endif

      endif

      x=x+1

      select a
         case 1
            level(i)=1
            w=1
         endcase

      endselect

      if w=0 then level(i)=0
      w=0

   next i

   level(i+1)=-999





   sprite 1,400,450,1
   set sprite priority 1,1



   sprite 1000,0,0,10
   sprite 1001,700,0,10

   make_level()

   repeat

      flash=flash+1

      ink rgb(255,255,255),rgb(255,255,255)

      if flash<100
         center text screen width()/2,screen height()/2-100,"Press Space to Start"
      endif

      if flash>200 then flash=0

      sync

   until spacekey()=1

   repeat
      sync
   until screen fps()>0

   repeat
      if invinsable>0
         set sprite alpha 1,255-invinsable
         invinsable=invinsable-1
      endif


      text 0,0,str$(screen fps())


      a=a-1
      a=fire(a)

      move_tank()





      control_enemy()
      screeny#=screeny#-speed#

      move_blocks()

      fuel()
      display()
      move()


      sync

   until death=2



   for i=10 to enemies(0,0)+9
      if sprite exist(i)=1 then delete sprite i
   next i
   for i=1002 to totalblock+1001
      if sprite exist(i)=1 then delete sprite i
   next i
   for i=500 to totaltank+499
      if sprite exist(i)=1 then delete sprite i
    next i

loop

function fuel()

   if gas=0
      die()
   endif

   col=sprite collision(1,0)

   if col>500 and col<1000
      gas=2000
   endif

   center text screen width()/2,500,"Fuel"

   sprite 7,screen width()/2-51,550,5
   sprite 8,screen width()/2-49,550+2,6
   set sprite priority 7,1
   set sprite priority 8,1

   stretch sprite 8,gas/20,100

   gas=gas-1

endfunction

function display()

   ink rgb(255,255,255),rgb(255,255,255)

   text 150,10,"Lives: "+str$(lives)
   text 500,10,"Score: "+str$(score)

endfunction

function move()

   f#=screen fps()

   if upkey()=1
      if f#>0
         f#=120/f#
         speed#=(basespeed+1)*(f#)
      else
         speed#=(basespeed+1)
      endif
   else
      if f#>0
         f#=120/f#
         speed#=(basespeed)*(f#)
      else
         speed#=(basespeed)
      endif
   endif

   f#=screen fps()

   if rightkey()=1
      rotate sprite 1,90
      move sprite 1,ceil(240/f#)
      rotate sprite 1,0
   endif

   if leftkey()=1
      rotate sprite 1,-90
      move sprite 1,ceil(240/f#)
      rotate sprite 1,0
   endif

   col=sprite collision(1,0)

   if col>=1000 and invinsable=0
      die()
   endif

   basespeed=int(screeny#/-10000)+1
   if basespeed>3 then basespeed=3



endfunction

function fire(a)

   if spacekey()=1 and a=<0
      for i=2 to 6
         if sprite exist(i)=0 then spr=i
         a=screen fps()/2
      next i
      if spr>0 then sprite spr,sprite x(1)+sprite width(1)/2-2,450,2
   endif

   for i=2 to 6
      if sprite exist(i)
         f#=screen fps()
         f#=240/f#
         move sprite i,ceil(f#)
         if sprite y(i)<0 then delete sprite i
      endif
   next i


endfunction a


function control_enemy()

   f#=screen fps()

   for i=10 to enemies(0,0)+9


      if sprite exist(i)
         move sprite i,-speed#



         if sprite y(i)>300 and sprite y(i)<500
            rotate sprite i,90
            if sprite exist(1)
              if sprite x(1)>sprite x(i)
                 move sprite i,ceil(120/f#)

                 if sprite collision(i,0)>1000
                    move sprite i,-ceil(120/f#)
                 endif
              else
                 move sprite i,-ceil(120/f#)
                 if sprite collision(i,0)>1000
                    move sprite i,ceil(120/f#)
                 endif
              endif
            endif
            rotate sprite i,0
         endif

         col=sprite collision(i,0)

         if col=1 and invinsable=0
            delete sprite i
            enemies(i-9,1)=-5
            die()
         endif


         for j=2 to 6
            if sprite exist(j)=1 and sprite exist(i)=1
               if sprite collision(i,j)=1
                  delete sprite i
                  delete sprite j
                  enemies(i-9,1)=-5
                  score=score+100
               endif
            endif
         next j

         if enemies(i-9,2)>screeny#+600 and sprite exist(i)=1
            delete sprite i
            enemies(i-9,1)=-5
         endif

      else
         if enemies(i-9,1)>0 and enemies(i-9,2)>screeny# and enemies(i-9,2)<screeny#+600
            sprite i,enemies(i-9,1),enemies(i-9,2)-screeny#,3
         endif
      endif

   next i

endfunction

function die()

   gas=2000
   lives=lives-1
   invinsable=255
   sprite 1,400,450,1

   if lives=0
      selection=1
      repeat
         set text size 20
         center text screen width()/2,screen height()/2,"GAME OVER"
         set text size 10
         center text screen width()/2,screen height()/2+50,"Score: "+str$(score)
         center text screen width()/2,screen height()/2+75,"Play again?"

         if rightkey()=1 then selection=2
         if leftkey()=1 then selection=1

         if selection=1
            ink rgb(100,100,0),rgb(100,100,0)
            center text screen width()/2-50,screen height()/2+100,"Yes"
            ink rgb(255,255,255),rgb(255,255,255)
            center text screen width()/2+50,screen height()/2+100,"No"
         endif

         if selection=2
            ink rgb(255,255,255),rgb(255,255,255)
            center text screen width()/2-50,screen height()/2+100,"Yes"
            ink rgb(100,100,0),rgb(100,100,0)
            center text screen width()/2+50,screen height()/2+100,"No"
         endif

         sync

         ink rgb(255,255,255),rgb(255,255,255)

      until returnkey()=1



      if selection=2
         end
      else
         death=2
      endif


   endif

endfunction

function make_enemy(x,y)

   enemies(0,0)=enemies(0,0)+1
   enemies(enemies(0,0),1)=x
   enemies(enemies(0,0),2)=y

endfunction

function make_level()


   x=100

   repeat

      i=i+1
      a=level(i)

      x=x+60
      if x=>700
         x=100
         y=y-60
      endif

      if a=1
         make_enemy(x,y)
      endif

      if a=3
         make_block(x,y)
      endif

      if a=4
         make_fuel_tank(x,y)
      endif


   until a=-999

endfunction

function make_block(x,y)

   totalblock=totalblock+1
   blocks(totalblock,1)=x
   blocks(totalblock,2)=y

endfunction

function move_blocks()
   for i=1002 to 1002+totalblock-1
      if sprite exist(i)
         move sprite i,-speed#
         if blocks(i-1001,2)>screeny#+600
            delete sprite i
            blocks(i-1001,1)=-5
         endif
      else
         if blocks(i-1001,1)>0 and blocks(i-1001,2)>screeny# and blocks(i-1001,2)<screeny#+600
            sprite i,blocks(i-1001,1),blocks(i-1001,2)-screeny#,4
         endif
      endif

   next i
endfunction

function make_fuel_tank(x,y)

   totaltank=totaltank+1
   tanks(totaltank,1)=x
   tanks(totaltank,2)=y

endfunction

function move_tank()
   for i=500 to 500+totaltank-1
      if sprite exist(i)
         move sprite i,-speed#
         if tanks(i-499,2)>screeny#+600
            delete sprite i
            tanks(i-499,1)=-5
         endif
      else
         if tanks(i-499,1)>0 and tanks(i-499,2)>screeny# and tanks(i-499,2)<screeny#+600
            sprite i,tanks(i-499,1),tanks(i-499,2)-screeny#,7
         endif
      endif
   next i
endfunction

function image(num,size)

   dim colors(100,3)

   read a$
   a$=a$+"-"

   repeat
      i=i+1

      for j=1 to len(a$)

         c$=c$+b$
         b$=mid$(a$,j)

         if b$="-" or b$=" "
            k=k+1
            colors(i,k)=val(c$)
            c$=""
            b$=""
         endif

      next j

      k=0
      read a$
      a$=a$+"-"

   until a$="XXX-"


   x=0
   y=0

   repeat
      read a
      x=x+1

      if a>0 and a<100
         ink rgb(colors(a,1),colors(a,2),colors(a,3)),rgb(colors(a,1),colors(a,2),colors(a,3))
         box (x-1)*size,(y-1)*size,x*size,y*size
      endif

      if a=0
         ink rgb(255,0,255),rgb(255,0,255)
         box (x-1)*size,(y-1)*size,x*size,y*size
      endif

      if a=100
         y=y+1
         x=0
      endif

   until a=-999

   get image num,0,0,(x-1)*size,y*size

   cls

endfunction

plane:
data "255-255-0"
data "XXX"

data 0,0,0,0,1,0,0,0,0,100
data 0,0,0,0,1,0,0,0,0,100
data 0,0,0,1,1,1,0,0,0,100
data 0,0,1,1,1,1,1,0,0,100
data 0,1,1,0,1,0,1,1,0,100
data 1,1,0,0,1,0,0,1,1,100
data 0,0,0,0,1,0,0,0,0,100
data 0,0,0,1,1,1,0,0,0,100
data 0,0,1,1,0,1,1,0,0,-999

bullet:
data "255-255-0"
data "XXX"

data 1,100
data 1,100
data 1,100
data 1,100
data 1,100
data 1,100
data 1,100
data 1,100
data 1,-999

heli:
data "238 154 0","34-139-34"
data "XXX"

data 0,0,0,0,0,0,0,0,0,100
data 0,0,0,0,0,1,1,0,0,100
data 0,0,0,0,0,0,0,1,1,100
data 2,0,0,0,0,2,2,2,0,100
data 2,2,2,2,2,2,2,2,2,100
data 2,0,0,0,0,2,2,2,2,100
data 0,0,0,0,0,0,2,2,0,100
data 0,0,0,0,0,1,1,1,1,-999

block:
data "0 100 0"
data "XXX"

data 1,1,1,1,100
data 1,1,1,1,100
data 1,1,1,1,100
data 1,1,1,1,100
data 1,1,1,1,-999

outline:
data "0 0 0"
data "XXX"

data 100
data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,100
data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-999