Invaders


How could we write a Bumper Book of programs without including the classic Invaders games? Well, here it is complete with shields and Mothership and a screen full of the dreaded Aliens.

   10  REM **INVADERS**BBC VERSION**BY IAN TH
OMAS
   20 ONERRORGOTO580
   30 MODE7:PRINT'CHR$141;CHR$&84;CHR$157;CHR
$&87"         Space invaders"'CHR$141;CHR$&84
;CHR$157;CHR$&87"         Space invaders"'''C
HR$&85"     left......"CHR$&83"Z"'''CHR$&85" 
    right....."CHR$&83"X"
   36 X=X+INKEY(-98)-INKEY(-67):X=X+(X>16)-(X
<0)
   40 PRINT'''CHR$&85"     fire......"CHR$&83
"M"TAB(0,21)CHR$&82;CHR$136"    Press the spa
ce bar to play"'''" "CHR$&86;CHR$157;CHR$&84"
(c) Copyright 1983 Ian Thomas.";
   50 A$=GET$:IFA$<>" "GOTO50
   60 MODE2:IFA%<0A%=0
   70 *FX9
   80 *FX10
   90 VDU23,224,7,15,31,63,127,127,127,127,23
,225,255,255,255,255,255,255,255,255,23,226,2
24,240,248,252,254,254,254,254,23,227,127,126
,124,124,120,120,120,120,23,228,129,0,0,0,0,0
,0,0,23,229,254,126,62,62,30,30,30,30
  100 VDU23,231,127,127,127,127,127,127,127,1
27,23,232,254,254,254,254,254,254,254,254,19,
8,1,0,0,0,23;11,0;0;0;0;:FORJ%=233TO250:VDU23
,J%:FORI%=0TO7:VDURND(255):NEXT,
  110   B$=STRING$(4,CHR$224+CHR$225+CHR$226+
"  ")+STRING$(4,CHR$231+CHR$225+CHR$232+"  ")
+STRING$(4,CHR$227+CHR$228+CHR$229+"  ")
  120   VDU23,255,4,4,14,14,31,31,0,0,23,254,
0,0,4,4,4,4,0,0,23,253,24,60,90,255,126,60,66
,129,23,252,15,63,102,255,127,63,15,0,23,251,
240,252,102,255,254,252,240,0:ENVELOPE1,1,-4,
0,0,50,0,0,64,-1,-1,-2,80,0
  130   ENVELOPE2,2,0,0,0,0,0,0,64,0,0,-2,80,
0:ENVELOPE3,2,5,1,1,5,1,1,64,0,0,-4,48,0:ENVE
LOPE4,2,0,0,0,0,0,0,64,0,0,-2,128,0:DIMX%(5),
A$(5),Y(5),C%(5)
  140   FORB%=1TO20:SOUND1,-15,200,1:A$=INKEY
$(5):NEXT:S%=0:X=0:Y%=7:Z%=0:L%=3:I%=30:J%=0:
F%=1:U%=18:C%=0:E%=10000:Q%=0:W%=0
  150   *FX11,1
  160   *FX12,1
  170   COLOUR5:PRINTTAB(0,1)"HIGH SCORE ";A%
:COLOUR2:PRINTTAB(0,3)"LIVES":COLOUR3:PRINTTA
B(9,3)"SCORE"
  180   W%=W%+1:IFQ%>6 GOTO220
  190   COLOUR8:PRINTTAB(1,25)B$
  200   VDU5:GCOL0,0:W$=STR$(W%):IFLEN(W$)<2 
W$="0"+W$
  210   FORB%=96TO1056STEP320:MOVEB%,200:PRIN
TW$:NEXT:VDU4
  220   FORB%=1TO5:C%(B%)=B%+2:A$(B%)=" "+STR
ING$(5,CHR$253+" "):COLOURC%(B%):X%(B%)=0:Y(B
%)=B%*2+8+Q%:PRINTTAB(X%(B%),Y(B%))A$(B%):NEX
T:Q%=Q%+1:IFQ%>9Q%=7
  230   F%=1
  240   FORB%=1TO5:IFA$(B%)=""C%=C%+1:IFB%<5N
EXT
  250   IFA$(B%)>""PRINTTAB(X%(B%),Y(B%))"   
        "
  260   X%(B%)=X%(B%)+F%:IFX%(B%)=0Y(B%)=Y(B%
)+.5
  270   IFA$(B%)>""COLOURC%(B%):PRINTTAB(X%(B
%),Y(B%))A$(B%)
  280   IFY(B%)>23C%(B%)=2:IFY(B%)>25C%(B%)=1
:IFY(B%)>28C%(B%)=9
  290     IFU%<18SOUND&12,3,100,100
  300   IFY(B%)=30ANDA$(B%)<>""GOTO540
  310   PRINTTAB(J%,I%-1)" ":IFI%=30ANDJ%=INT
(X+1)L%=L%-1:SOUND&10,2,4,4:IFL%=0GOTO540
  320   IFFNAT(J%,I%)<>32 GCOL0,0:MOVEJ%*64,1
023-I%*32:VDU5,233+P%,4:I%=30:P%=(P%+1)MOD17
  330   IFI%=30I%=Y(5)+1:J%=RND(19):IFI%>26 I
%=26
  340   PRINTTAB(J%,I%)CHR$254
  350   I%=I%+1
  360   X=X+INKEY(-98)-INKEY(-67):X=X+(X>16)-
(X<0)
  370   COLOUR7:PRINTTAB(X,30)" "CHR$255" ":I
FINKEY(-102)ANDY%=7PRINTTAB(Z%,Y%)" ":Y%=29:Z
%=X+1:SOUND&11,1,255,20
  380   IFY%=8AND(Z%=U% ORZ%=U%+1)PRINTTAB(U%
,8)"  ":S%=S%+1000:U%=18:SOUND&10,4,5,2
  390   PRINTTAB(Z%,Y%)" ":IFY%>7Y%=Y%-1:IFFN
AT(Z%,Y%)<>32 GCOL0,0:MOVEZ%*64,1023-Y%*32:VD
U5,233+P%,4:Y%=7:SOUND&10,2,6,1:P%=(P%+1)MOD1
7
  400   IFY%>7 PRINTTAB(Z%,Y%)CHR$254
  410   FORD%=5TO1STEP-1
  420     A$="":IFA$(D%)="           "A$(D%)=
""
  430   IFINT(Y(D%))<>Y%NEXT:GOTO470
  440 H%=(Z%-X%(D%))+1:A$=MID$(A$(D%),H%,1):I
FA$=" "ORA$=""NEXT:GOTO470
  450 IFA$=CHR$253S%=S%+(6-D%)*50:SOUND&10,2,
6,1:A$(D%)=LEFT$(A$(D%),(H%-1))+" "+RIGHT$(A$
(D%),(11-H%))
  460 PRINTTAB(Z%,Y%)" ":Y%=7
  470 NEXTB%:IFC%=5C%=0:FORJ=0TO1000:NEXT:GOT
O180
  480 PRINTTAB(U%,8)"  ":IFX%(5)=0ORX%(5)=8F%
=-F%
  490 IFU%<18U%=U%+1
  500 IFU%=18SOUND&12,0,0,0:IFRND(20)=9U%=0
  510 C%=0:COLOUR6:IFU%<18PRINTTAB(U%,8)CHR$2
52;CHR$251
  520 PRINTTAB(15,3);S%;TAB(6,3);L%;"  ":IFS%
>E%L%=L%+1:E%=E%+10000
  530 GOTO240
  540 *FX15
  550 ENVELOPE2,4,0,0,0,0,0,0,2,8,0,-8,32,128
:SOUND&10,2,4,50:FORJ=1TO5000:NEXT:IFS%>A%A%=
S%
  560 ENVELOPE2,2,0,0,0,0,0,0,64,0,0,-2,80,0:
*FX15
  570 *FX12
  580 MODE7:PRINTTAB(7,8)CHR$&82;CHR$157;CHR$
&84;CHR$141;"Another game ? (Y/N)  |"'"      
 "CHR$&82;CHR$157;CHR$&84;CHR$141;"Another ga
me ? (Y/N)  |"
  590 A$=GET$:IFA$<>"Y"ANDA$<>"N"GOTO590
  600 IFA$="Y"CLEAR:GOTO60
  610 END
  620 DEFFNAT(X%,Y%):VDU31,X%,Y%:A%=135:A%=US
R&FFF4 AND&FFFF
  630 IFY%<Y(5)+1 =32
  640 =A% DIV256