Here is my entry (and my first ever 20 liner!!):
`draw images
set display mode 640,480,32:set window on:set text font "courier new":set text size 20:color backdrop rgb(0,0,0):randomize timer():ink rgb(255,255,255),rgb(0,0,0):dot 7,1:line 6,2,9,2:line 6,3,9,3:line 2,4,13,4:box 1,5,14,9:get image 1,1,1,14,9,1:sprite 1,0,0,1:hide sprite 1:cls :size sprite 1,26,16:offset sprite 1,13,8:line 5,1,9,1:line 2,2,12,2:line 1,3,13,3:line 1,4,4,4:line 6,4,8,4:line 10,4,13,4:line 1,5,13,5:line 4,6,6,6:line 8,6,10,6:line 3,7,5,7:line 6,7,8,7:line 9,7,11,7:line 1,8,3,8:line 11,8,13,8:get image 2,1,1,13,9,1:sprite 2,0,0,2:hide sprite 2:cls :line 5,1,9,1:line 2,2,12,2:line 1,3,13,3:line 1,4,4,4:line 6,4,8,4:line 10,4,13,4:line 1,5,13,5:line 3,6,5,6:line 6,6,8,6:line 9,6,11,6:line 1,7,3,7:line 11,7,13,7:line 3,8,5,8:line 9,8,11,8:get image 3,1,1,13,9,1:sprite 3,0,0,3:hide sprite 3:cls :size sprite 2,24,16:offset sprite 2,12,8:size sprite 3,24,16:offset sprite 3,12,8:dot 3,1:dot 9,1:dot 1,2:dot 4,2:dot 8,2:dot 11,2:dot 1,3:line 3,3,10,3:dot 11,3:line 1,4,4,4:line 5,4,8,4:line 9,4,12,4:line 1,5,12,5:line 2,6,11,6:dot 3,7:dot 9,7:dot 2,8:dot 10,8:get image 4,1,1,12,9,1:sprite 4,0,0,4:hide sprite 4:cls :dot 3,1:dot 9,1:dot 4,2:dot 8,2:line 3,3,10,3:line 2,4,4,4:line 5,4,8,4:line 9,4,11,4:box 1,5,12,7:dot 1,7:dot 3,7:dot 9,7:dot 11,7:dot 1,8:dot 4,8:dot 8,8:dot 11,8:get image 5,1,1,12,9,1:sprite 5,0,0,5:hide sprite 5:cls :size sprite 4,22,16:offset sprite 4,11,8:size sprite 5,22,16:offset sprite 5,11,8:line 4,1,6,1:line 3,2,7,2:line 2,3,8,3:line 1,4,3,4:line 4,4,6,4:line 7,4,9,4:line 1,5,9,5:dot 3,6:dot 6,6:dot 2,7:dot 4,7:dot 5,7:dot 7,7:dot 1,8:dot 3,8:dot 6,8:dot 8,8:get image 6,1,1,9,9,1:sprite 6,0,0,6:hide sprite 6:cls :line 4,1,6,1:line 3,2,7,2:line 2,3,8,3:line 1,4,3,4:line 4,4,6,4:line 7,4,9,4:line 1,5,9,5:dot 2,6:dot 7,6:dot 1,7:dot 8,7:dot 2,8:dot 7,8:get image 7,1,1,9,9,1:sprite 7,0,0,7:hide sprite 7:cls :size sprite 6,16,16:offset sprite 6,8,8:size sprite 7,16,16:offset sprite 7,8,8
line 6,1,12,1:line 4,2,14,2:line 3,3,15,3:line 2,4,4,4:line 5,4,7,4:line 8,4,10,4:line 11,4,13,4:line 14,4,16,4:line 1,5,17,5:line 3,6,6,6:line 8,6,10,6:line 12,6,15,6:dot 4,7:dot 13,7:get image 8, 1,1,17,8, 1:cls :box 1,1,2,2:get image 9, 1,1,2,2, 1:box 1,1,2,2:box 2,2,3,3:get image 10, 1,1,3,3, 1:box 1,1,2,5:get image 11, 1,1,2,5, 1:sprite 11,0,0,11:hide sprite 11:cls :for x=1 to 16:dot rnd(8),rnd(8):next :get image 12, 1,1,9,9, 1:sprite 12,0,0,12:hide sprite 12:cls :size sprite 11,2,8:offset sprite 11,1,4:size sprite 12,16,16:offset sprite 12,8,8:clone sprite 11,13:hide sprite 13
`new game start point
start: gosub m_b:t=timer():pX#=390.0:Ed=1:sp#=0.5:li=3:lv=1:uc=t:uo=0:ut=20000:uX#=100:efc=t:eft=10000:ufc=t:uft=5000
type arr ,x as float ,y as float ,on as integer ,t as integer ,h as integer ,endtype : dim b(3) as arr : dim eb(50) as arr : dim e(55) as arr : dim x(100) as arr :gosub m_e:sync on:sync rate 60
`######################## LOOP
`player stuff
do:inc fc:inc ac:pX#=pX#+rightkey()-leftkey():paste sprite 1,pX#,420:if pX#<100:pX#=100:endif:if pX#>540:pX#=540:endif:if fc>60 and spacekey() and pb<3:fc=0:inc pb:b(pb).x=pX#:b(pb).y=410:b(pb).h=0:endif:for eb=0 to 50:if eb(eb).on=1:x#=eb(eb).x:y#=eb(eb).y:if abs(pX#-x#)<13 and abs(420-y#)<8:li=li-1:gosub b:eb(eb).on=0:pX#=320:endif:endif:next
`bullets
for b=1 to 3:if b<=pb:dec b(b).y,2:if b(b).y<20:gosub d_b::else:paste sprite 11,b(b).x,b(b).y:endif:endif:next
`enemies
ch=0:go=0:onc=0:for e=1 to 55:on=e(e).on:if on=1:inc onc:x#=e(e).x:y#=e(e).y:if y#>355:go=1:endif:t=e(e).t*2:if ac>30:if ac>60:ac=0:endif:t=t+1:endif:paste sprite t,x#,y#:for b=1 to pb:if abs(b(b).x-x#)<8 and abs(b(b).y-y#)<6:e(e).on=0:gosub b:gosub d_b:sc=sc+(e(e).t*5):sp#=sp#+0.01:endif:next :if Ed=0:x#=x#-sp#:endif:if Ed=1:x#=x#+sp#:endif:if x#>520 or x#<120:ch=1:endif:e(e).x=x#:endif:next
if onc=0:inc lv:sp#=0.5+lv*.1:ut=ut*0.8:uft=uft*0.8:eft=eft*0.8:sc=sc+100:gosub m_e:pb=0:for eb=0 to 50:eb(eb).on=0:next :uo=0:pX#=320:for s=100 to 2000:if sprite exist(s):delete sprite s:endif:next :gosub m_b:endif
if lv>1:if timer()>efc+eft:efc=timer()+rnd(eft):e=rnd(54)+1:while e(e).on=0:e=rnd(54)+1:endwhile:x#=e(e).x:y#=e(e).y:eb=0:while eb(eb).on=1:inc eb:endwhile:eb(eb).x=x#:eb(eb).y=y#:eb(eb).h=0:eb(eb).on=1:endif:endif:if ch=1:Ed=1-Ed:for f=1 to 55:e(f).y=e(f).y+5:next:endif
`ufo
if timer()>uc+ut:uo=1:endif:if uo=1:uX#=uX#+0.3:if uX#>540:uc=timer():ufc=timer()+rnd(uft):if sprite exist(8):delete sprite 8:endif:uX#=100:else:if timer()>ufc+uft:ufc=timer():eb=0:while eb(eb).on=1:inc eb:endwhile:eb(eb).x=uX#:eb(eb).y=40:eb(eb).h=0:eb(eb).on=1:endif:sprite 8, uX#,30, 8:size sprite 8,32,14:offset sprite 8,16,7:x#=sprite x(8):y#=sprite y(8):for b=1 to pb:if abs(b(b).x-x#)<16 and abs(b(b).y-y#)<7:sc=sc+50:sp#=sp#+0.01:gosub b:gosub d_b:uc=timer():if sprite exist(8):delete sprite 8:endif:uX#=100:b=pb+1:uo=0:uc=timer():endif:next :endif:endif
`enemy bullets
for eb=0 to 50:if eb(eb).on=1:inc eb(eb).y,2:if eb(eb).y>430:eb(eb).on=0:x#=eb(eb).x:y#=eb(eb).y:gosub b:else:paste sprite 11,eb(eb).x,eb(eb).y:endif:endif:next
`bunkers
for s=100 to 1259:if sprite exist(s):sx=sprite x(s):sy=sprite y(s):hit=0:for b=1 to pb:if abs(b(b).x-sx)<4 and abs(b(b).y-sy)<6:b(b).h=b(b).h+1:if b(b).h>10:gosub d_b:endif:hit=1:endif:next :for eb=0 to 50:if eb(eb).on=1:x#=eb(eb).x:y#=eb(eb).y:if abs(sx-x#)<8 and abs(sy-y#)<6:eb(eb).h=eb(eb).h+1:if eb(eb).h>15:eb(eb).on=0:endif:hit=1:endif:endif:next :if hit>0:if sprite image(s)=9:sprite s,sx,sy,10:rotate sprite s,90*rnd(1):else:delete sprite s:endif:endif:endif:next
`explosions
for e=1 to 100:if x(e).t>0:dec x(e).t:paste sprite 12,x(e).x,x(e).y:endif:next :s$=str$(sc):l=len(s$):if l<4:for c=1 to 4-l:s$="0"+s$:next :endif:text 150,0, "SCORE: "+s$+"<"+str$(lv)+">":if sc>hs:hs=sc:hlv=lv:endif:s$=str$(hs):l=len(s$):if l<4:for c=1 to 4-l:s$="0"+s$:next :endif:line 100,435,540,435:text 320,0, "HIGHSCORE: "+s$+"<"+str$(hlv)+">":text 150,440,str$(li):paste sprite 1,180,450
`game over
if li<1:go=1:endif:if go=1:for s=100 to 3000:if sprite exist(s):delete sprite s:endif:next :cls:while keystate(21)=0 and keystate(49)=0:center text 320,210, "GAME OVER":center text 320,240, "Play again y/n":sync:endwhile:if keystate(49):end:endif:goto start:endif:sync
loop
`######################## LOOP
`gosubs
m_b:s=99:for b=1 to 4:sx=70+(b*100):sy=380:for x=1 to 22:for y=1 to 16:z=0:if y=1 and ((x>=1 and x<=4) or (x>=19 and x<=22)):z=1:endif:if y=2 and ((x>=1 and x<=3) or (x>=20 and x<=22)):z=1:endif:if y=3 and (x=1 or x=2 or x=21 or x=22):z=1:endif:if y=4 and (x=1 or x=22):z=1:endif:if y=13 and (x>=8 and x<=15):z=1:endif:if y=14 and (x>=7 and x<=16):z=1:endif:if (y=15 or y=16) and (x>=6 and x<=17):z=1:endif:if z=0:inc s:sprite s,sx+(x-11)*2,sy+(y-8)*2,9:size sprite s,2,2:inc c:endif:next:next:next:return
m_e:e=1:for x=1 to 11:for y=1 to 5:e(e).x=120+x*30:e(e).y=50+((y-1)*40):e(e).on=1:if y=1:e(e).t=3:endif:if y=2:e(e).t=2:endif:if y=3:e(e).t=2:endif:if y=4:e(e).t=1:endif:if y=5:e(e).t=1:endif:inc e:next:next:return
d_b:if b=1:if pb>1:b(1).x=b(2).x:b(1).y=b(2).y:if pb=3:b(2).x=b(3).x:b(2).y=b(3).y:endif:endif:endif:if b=2:if pb>2:b(2).x=b(3).x:b(2).y=b(3).y:endif:endif:dec pb:return
b:l=1:while done=0:if x(l).t=0:done=1:endif:inc l:endwhile:x(l).t=10:x(l).x=x#:x(l).y=y#:return
EDIT1: Took out "find free sprite()" from Matrix1 Utility plugin...
EDIT2: Changed my messed up "line" commands for drawing the sprites!!!
I just got it working and then compressed it manually and what do you know? It came out at exactly 20 lines!! Character count might be a bit high but it looks pretty original to me (by which I mean
like the original) although I'm not sure if I'm doing the spectrum version (which I probably played more!!)...
It could do with some sounds. I'll post the expanded version of the code here in a moment
EDIT Here's the uncompressed version for easier reading!
`draw images
set display mode 640,480,32:set window on:set text font "courier new":set text size 20:color backdrop rgb(0,0,0):randomize timer():ink rgb(255,255,255),rgb(0,0,0):dot 7,1:line 6,2,9,2:line 6,3,9,3:line 2,4,13,4:box 1,5,14,9:get image 1,1,1,14,9,1:sprite 1,0,0,1:hide sprite 1:cls :size sprite 1,26,16:offset sprite 1,13,8:line 5,1,9,1:line 2,2,12,2:line 1,3,13,3:line 1,4,4,4:line 6,4,8,4:line 10,4,13,4:line 1,5,13,5:line 4,6,6,6:line 8,6,10,6:line 3,7,5,7:line 6,7,8,7:line 9,7,11,7:line 1,8,3,8:line 11,8,13,8:get image 2,1,1,13,9,1:sprite 2,0,0,2:hide sprite 2:cls :line 5,1,9,1:line 2,2,12,2:line 1,3,13,3:line 1,4,4,4:line 6,4,8,4:line 10,4,13,4:line 1,5,13,5:line 3,6,5,6:line 6,6,8,6:line 9,6,11,6:line 1,7,3,7:line 11,7,13,7:line 3,8,5,8:line 9,8,11,8:get image 3,1,1,13,9,1:sprite 3,0,0,3:hide sprite 3:cls :size sprite 2,24,16:offset sprite 2,12,8:size sprite 3,24,16:offset sprite 3,12,8:dot 3,1:dot 9,1:dot 1,2:dot 4,2:dot 8,2:dot 11,2:dot 1,3:line 3,3,10,3:dot 11,3:line 1,4,4,4:line 5,4,8,4:line 9,4,12,4:line 1,5,12,5:line 2,6,11,6:dot 3,7:dot 9,7:dot 2,8:dot 10,8:get image 4,1,1,12,9,1:sprite 4,0,0,4:hide sprite 4:cls :dot 3,1:dot 9,1:dot 4,2:dot 8,2:line 3,3,10,3:line 2,4,4,4:line 5,4,8,4:line 9,4,11,4:box 1,5,12,7:dot 1,7:dot 3,7:dot 9,7:dot 11,7:dot 1,8:dot 4,8:dot 8,8:dot 11,8:get image 5,1,1,12,9,1:sprite 5,0,0,5:hide sprite 5:cls :size sprite 4,22,16:offset sprite 4,11,8:size sprite 5,22,16:offset sprite 5,11,8:line 4,1,6,1:line 3,2,7,2:line 2,3,8,3:line 1,4,3,4:line 4,4,6,4:line 7,4,9,4:line 1,5,9,5:dot 3,6:dot 6,6:dot 2,7:dot 4,7:dot 5,7:dot 7,7:dot 1,8:dot 3,8:dot 6,8:dot 8,8:get image 6,1,1,9,9,1:sprite 6,0,0,6:hide sprite 6:cls :line 4,1,6,1:line 3,2,7,2:line 2,3,8,3:line 1,4,3,4:line 4,4,6,4:line 7,4,9,4:line 1,5,9,5:dot 2,6:dot 7,6:dot 1,7:dot 8,7:dot 2,8:dot 7,8:get image 7,1,1,9,9,1:sprite 7,0,0,7:hide sprite 7:cls :size sprite 6,16,16:offset sprite 6,8,8:size sprite 7,16,16:offset sprite 7,8,8
line 6,1,12,1:line 4,2,14,2:line 3,3,15,3:line 2,4,4,4:line 5,4,7,4:line 8,4,10,4:line 11,4,13,4:line 14,4,16,4:line 1,5,17,5:line 3,6,6,6:line 8,6,10,6:line 12,6,15,6:dot 4,7:dot 13,7:get image 8, 1,1,17,8, 1:cls :box 1,1,2,2:get image 9, 1,1,2,2, 1:box 1,1,2,2:box 2,2,3,3:get image 10, 1,1,3,3, 1:box 1,1,2,5:get image 11, 1,1,2,5, 1:sprite 11,0,0,11:hide sprite 11:cls :for x=1 to 16:dot rnd(8),rnd(8):next :get image 12, 1,1,9,9, 1:sprite 12,0,0,12:hide sprite 12:cls :size sprite 11,2,8:offset sprite 11,1,4:size sprite 12,16,16:offset sprite 12,8,8:clone sprite 11,13:hide sprite 13
`new game start point
start: gosub m_b:t=timer():pX#=390.0:Ed=1:sp#=0.5:li=3:lv=1:uc=t:uo=0:ut=20000:uX#=100:efc=t:eft=10000:ufc=t:uft=5000
type arr ,x as float ,y as float ,on as integer ,t as integer ,h as integer ,endtype
dim b(3) as arr : dim eb(50) as arr : dim e(55) as arr : dim x(100) as arr
`make enemy
gosub m_e
`######################## LOOP
sync on:sync rate 60
do
`counters
inc fc:inc ac
REM player stuff
`movement
pX#=pX#+rightkey()-leftkey():paste sprite 1,pX#,420
if pX#<100
pX#=100
endif
if pX#>540
pX#=540
endif
`fire bullets
if fc>60 and spacekey() and pb<3
fc=0:inc pb:b(pb).x=pX#:b(pb).y=410:b(pb).h=0
endif
`get shot
for eb=0 to 50
if eb(eb).on=1
x#=eb(eb).x
y#=eb(eb).y
if abs(pX#-x#)<13 and abs(420-y#)<8
li=li-1
gosub b:
eb(eb).on=0
pX#=320
endif
endif
next
REM player bullets
for b=1 to 3
if b<=pb
dec b(b).y,2
if b(b).y<20
gosub d_b:
else
paste sprite 11,b(b).x,b(b).y
endif
endif
next
REM enemies
ch=0
go=0
onc=0
for e=1 to 55
on=e(e).on
if on=1
inc onc
x#=e(e).x
y#=e(e).y
`game over check
if y#>355 then go=1
`get sprite type
t=e(e).t*2
if ac>30
if ac>60
ac=0
endif
t=t+1
endif
paste sprite t,x#,y#
`get shot
for b=1 to pb
if abs(b(b).x-x#)<8 and abs(b(b).y-y#)<6
e(e).on=0
gosub b:
gosub d_b:
sc=sc+(e(e).t*5)
sp#=sp#+0.01
endif
next
`move enemies
if Ed=0
x#=x#-sp#
endif
if Ed=1
x#=x#+sp#
endif
`decide whether to move down or not
if x#>520 or x#<120
ch=1
endif
e(e).x=x#
endif
next
`if no enemies remain then next level
if onc=0
inc lv
sp#=0.5+lv*.1
ut=ut*0.8
uft=uft*0.8
eft=eft*0.8
sc=sc+100
gosub m_e:
pb=0
for eb=0 to 50
eb(eb).on=0
next
uo=0
pX#=320
for s=100 to 2000
if sprite exist(s) then delete sprite s
next
gosub m_b:
endif
`enemies fire bullets after level 1
if lv>1
if timer()>efc+eft
efc=timer()+rnd(eft)
e=rnd(54)+1
while e(e).on=0
e=rnd(54)+1
endwhile
x#=e(e).x
y#=e(e).y
eb=0
while eb(eb).on=1
inc eb
endwhile
eb(eb).x=x#
eb(eb).y=y#
eb(eb).h=0
eb(eb).on=1
endif
endif
`move down screen
if ch=1
Ed=1-Ed
for f=1 to 55
e(f).y=e(f).y+5
next
endif
REM ufo
`is ufo visible?
if timer()>uc+ut
uo=1
endif
if uo=1
`yes so move him across the screen
uX#=uX#+0.3
if uX#>540
`at far end so turn him off
uc=timer()
ufc=timer()+rnd(uft)
if sprite exist(8) then delete sprite 8
uX#=100
else
`within screen so check for firing
if timer()>ufc+uft
ufc=timer()
eb=0
while eb(eb).on=1
inc eb
endwhile
eb(eb).x=uX#
eb(eb).y=40
eb(eb).h=0
eb(eb).on=1
endif
`add ufo sprite
sprite 8, uX#,30, 8
size sprite 8,32,14
offset sprite 8,16,7
x#=sprite x(8)
y#=sprite y(8)
`get shot
for b=1 to pb
if abs(b(b).x-x#)<16 and abs(b(b).y-y#)<7
sc=sc+50
sp#=sp#+0.01
gosub b:
gosub d_b:
uc=timer()
if sprite exist(8) then delete sprite 8
uX#=100
b=pb+1
uo=0
uc=timer()
endif
next
endif
endif
REM enemy bullets
for eb=0 to 50
if eb(eb).on=1
`if they exist move them down the screen
inc eb(eb).y,2
if eb(eb).y>430
`if at bottom then blow up
eb(eb).on=0
x#=eb(eb).x:y#=eb(eb).y
gosub b:
else
`paste bullet sprite
paste sprite 11,eb(eb).x,eb(eb).y
endif
endif
next
`bunkers
for s=100 to 1259
if sprite exist(s)
sx=sprite x(s)
sy=sprite y(s)
hit=0
`check if bunker sprite is hit by player bullet
for b=1 to pb
if abs(b(b).x-sx)<4 and abs(b(b).y-sy)<6
b(b).h=b(b).h+1
if b(b).h>10
gosub d_b:
endif
hit=1
endif
next
`check if bunker sprite is hit by enemy bullet
for eb=0 to 50
if eb(eb).on=1
x#=eb(eb).x
y#=eb(eb).y
if abs(sx-x#)<8 and abs(sy-y#)<6
eb(eb).h=eb(eb).h+1
if eb(eb).h>15
eb(eb).on=0
endif
hit=1
endif
endif
next
`if hit either change to damaged sprite or delete sprite
if hit>0
if sprite image(s)=9
sprite s,sx,sy,10
rotate sprite s,90*rnd(1)
else
delete sprite s
endif
endif
endif
next
REM explosions
for e=1 to 100
if x(e).t>0
dec x(e).t
paste sprite 12,x(e).x,x(e).y
endif
next
REM display text etc.
s$=str$(sc)
l=len(s$)
if l<4
for c=1 to 4-l
s$="0"+s$
next
endif
text 150,0, "SCORE: "+s$+"<"+str$(lv)+">"
if sc>hs
hs=sc:hlv=lv
endif
s$=str$(hs)
l=len(s$)
if l<4
for c=1 to 4-l
s$="0"+s$
next
endif
line 100,435,540,435
text 320,0, "HIGHSCORE: "+s$+"<"+str$(hlv)+">"
text 150,440,str$(li)
paste sprite 1,180,450
REM game over
if li<1 then go=1
if go=1
for s=100 to 3000
if sprite exist(s) then delete sprite s
next
cls
while keystate(21)=0 and keystate(49)=0
center text 320,210, "GAME OVER"
center text 320,240, "Play again y/n"
sync
endwhile
if keystate(49)
end
endif
goto start:
endif
sync
loop
`######################## LOOP
`make bunkers
m_b:
s=99
for b=1 to 4
sx=70+(b*100)
sy=380
for x=1 to 22
for y=1 to 16
z=0
if y=1 and ((x>=1 and x<=4) or (x>=19 and x<=22))
z=1
endif
if y=2 and ((x>=1 and x<=3) or (x>=20 and x<=22))
z=1
endif
if y=3 and (x=1 or x=2 or x=21 or x=22)
z=1
endif
if y=4 and (x=1 or x=22)
z=1
endif
if y=13 and (x>=8 and x<=15)
z=1
endif
if y=14 and (x>=7 and x<=16)
z=1
endif
if (y=15 or y=16) and (x>=6 and x<=17)
z=1
endif
if z=0
inc s
sprite s,sx+(x-11)*2,sy+(y-8)*2,9
size sprite s,2,2
inc c
endif
next
next
next
return
`make enemy
m_e:
e=1
for x=1 to 11
for y=1 to 5
e(e).x=120+x*30
e(e).y=50+((y-1)*40)
e(e).on=1
select y
case 1
e(e).t=3
endcase
case 2
e(e).t=2
endcase
case 3
e(e).t=2
endcase
case 4
e(e).t=1
endcase
case 5
e(e).t=1
endcase
endselect
inc e
next
next
return
`delete player bullet
d_b:
select b
case 1
if pb>1
b(1).x=b(2).x
b(1).y=b(2).y
if pb=3
b(2).x=b(3).x
b(2).y=b(3).y
endif
endif
endcase
case 2
if pb>2
b(2).x=b(3).x
b(2).y=b(3).y
endif
endcase
endselect
dec pb
return
`boom
b:
l=1
while done=0
if x(l).t=0 then done=1
inc l
endwhile
x(l).t=10
x(l).x=x#
x(l).y=y#
return
You might notice I took some liberties with the layout as I haven't done it as a 2 player game you have a "SCORE" then "<level>" instead of "<player>". Also I wasn't sure if the original was green/white or a mixture of colours so I went hardcore all-white. Hope that's close enough as I don't remember the last time I saw an actual Space-Invaders machine and images online are unreliable at best!