10 ' INVADER 20 ' 11 Sep 83 30 ' By Mike Berro 40 DEFINT I,T,S,F,Z,P,E,B,D,X,H,L,Y,Z 50 DIM T(6),HS(2),HS$(2) 60 M1$=CHR$(144):M2$=CHR$(145):P1$=CHR$(129):P2$=" "+P1$+" " 70 ONERROR GOTO 90 80 OPEN "RAM:INVHS.DO" FOR INPUT AS 1: FOR I=0 TO 2:INPUT #1,HS$(I),HS(I):NEXT I:CLOSE 90 CLS:PRINT @135,"Sound(Y/N)?";:A$=INKEY$:IF A$="N" THEN SN=0 ELSE IF A$="Y" THEN SN=1 ELSE GOTO 90 100 F=1 110 CLS:PRINT @46,"M i c r o - I n v a d e r s":LINE (33,6)-(200,16),1,B 120 PRINT @240,"Version 1.0":PRINT "September 1983"; 130 PRINT @200,"Prev Score = ";:PRINT USING "#####,";SC 140 LINE (74,38)-(116,48),1,B 150 PRINT @187,"High Scores";:FOR I= 0 TO 2:PRINT @227+I*40,HS$(I);:PRINT @231+I*40,"= ";:PRINT USING "#####,";HS(I);:NEXT I 160 IF SC=0 THEN GOSUB 1200 170 IF Q=1 OR F=1 THEN GOSUB 1080:F=0 180 Z=RND(1):PRINT @120,"";:PRINT "Are you ready to play(Y/N)?"; 190 A$=INKEY$:IF A$="" THEN 180 ELSE IF A$="N" THEN 1170 ELSE IF A$<>"Y" THEN 190 200 P=20:SC=0:ES=3 210 CLS:PRINT @280,SC;:B=0 220 DX=1:X=1:IF RND(1)<.5 THEN DX=-1:X=37 230 HT=1+INT(SC/10000) 240 LV=0:PRINT @280+P,P1$;:D=80-INT((SC-(HT-1)*10000)/100): LV=LV+INT((SC-(HT-1)*10000)/1300) 250 ON HT GOTO 260,270,270,270,280,280 260 IF LV>6 THEN LV=6:GOTO 290 270 IF LV>5 THEN LV=5:GOTO 290 280 IF LV>4 THEN LV=4:GOTO 290 290 T=37*(7-LV):SL=9: L=LV*40:DY=0:PL=LV:PT=HT:BV=-1:BH=P:PRINT @0,HT;:PRINT @280+38,RIGHT$(STR$(SL),1); 300 ' MAIN LOOP 310 IF X=INT(X/2)*2 THEN PRINT @X+L,M1$ ELSE PRINT @X+L,M2$ 320 IF D>0 AND SL>0 THEN FOR I=1 TO D:NEXT I:PRINT @0,HT; 330 A$=INKEY$ 340 IF A$="" THEN 570 350 IF ASC(A$)=27 AND ES>0 THEN ES=ES-1:T=0:SL=0:GOTO810 360 IF A$="L" THEN PRINT @280+P," ";:P=20 370 IF A$="," THEN P=P-1:IF P<8 THEN P=8 380 IF A$="." THEN P=P+1:IF P>30 THEN P=30 390 IF A$="<" THENPRINT@280+P," ";:P=P-5:IF P<8 THEN P=8 400 IF A$=">" THENPRINT@280+P," ";:P=P+5:IF P>30 THEN P=30 410 PRINT @P+279,P2$; 420 IF A$<>" " OR SL=0 THEN 570 430 SL=SL-1:PRINT @318,USING "#";SL; 440 Z=LV:IF BH<>P OR BV<0 THEN 460 450 IF X<>P THEN Z=BV ELSE IF BV>LV THEN Z=BV 460 IF Z<0 THEN Z=0 470 IF SN THENSOUND 180,1 480 YD=Z*8+4:XD=P*6+2:XP=XD:YP=60:YP=60:XP=XD:IF SN THENSOUND180,1 490 LINE (XP,YP)-(XD,YD),1:IF SN THENSOUND180,1 500 LINE (XP,YP)-(XD,YD),0:IF SN THEN SOUND180,1 510 LINE (XP,YP)-(XD,YD),1:IF SN THEN SOUND180,1 520 IF P=X AND (BH<>P OR BV<=LV) THEN 700 530 IF P=BH AND BV>-1 THEN PRINT @BV*40+BH,CHR$(255); 540 LINE (XP,YP)-(XD,YD),0 550 PRINT @P+280,P1$; 560 IF P=BH AND BV>-1 THEN 770 570 ' BOMB 580 IF BV<0 OR BV>7 THEN 600 590 PRINT @BV*40+BH," "; 600 BV=BV+1:IF BV<7 THEN 640 610 IF BV=7 AND BH=P THEN 1050 620 IF BV>7 AND BV<12 THEN BH=0:GOTO650 630 IF BV>11 THEN BH=P:BV=0 640 PRINT @BV*40+BH,""; 650 T=T-1: PRINT @36,"";:PRINT USING "###";T; 660 IF SN THEN SOUND 1,1 670 PRINT @X+L," "; 680 X=X+DX:IF X>37 OR X<2 THEN DX=-DX:LV=LV+1:L=LV*40:IF LV=7 THEN 980 690 GOTO300 700 PRINT @L+X,CHR$(239);:IFSN THENSOUND 500,3 710 HT=HT-1:PRINT @0,HT;:IF HT>0 THEN 540 720 LINE (XP,YP)-(XD,YD),0 730 PRINT @P+280,P1$; 740 Z=X+L:Z1=B+1+PT*2+T*(PL+1)/200+SL*20*(PT+1)/70:IF INT(SC/10000)>> Game Over <<<" 1030 IF SN THEN SOUND16000,200 ELSE FOR J=0 TO 1500:NEXT J 1040 GOTO 1100 1050 ' BOMB HIT 1060 Z=280+P:Z1=0:GOSUB 960 1070 GOTO 1020 1080 IF SN THENSOUND 9952,40:SOUND 6642,25:SOUND 7456,8:SOUND 7900,8:SOUND 8866,8:SOUND 4968,40:SOUND 6642,25 1090 RETURN 1100 ' END OF GAME 1110 IF SC<=HS(2) THEN Q=0:GOTO110 ELSE Q=1:IF SC<=HS(1) THEN I=2:GOTO 1130 1120 IF SC<=HS(0) THEN I=1 ELSE I=0 1130 IF I=2 THEN 1150 1140 FOR J=2 TO I+1 STEP -1:HS(J)=HS(J-1):HS$(J)=HS$(J-1):NEXT J 1150 HS(I)=SC:PRINT @200,"";:INPUT "Enter three initials";HS$(I) 1160 GOTO 110 1170 CLS:PRINT@171,"Returning to Menu" 1180 OPEN "INVHS.DO" FOR OUTPUT AS 1 1190 FOR I=0 TO 2:PRINT #1,HS$(I):PRINT #1,HS(I):NEXT I:CLOSE:MENU 1200 FOR X=120 TO 159:IF X=INT(X/2)*2 THEN PRINT @X,M1$ ELSE PRINT @X,M2$ 1210 FOR J=1 TO 40:NEXT J 1220 IF SN THENSOUND 1,1 1230 PRINT @X," " 1240 A$=INKEY$:IF A$=CHR$(27) THEN X=159 1250 NEXT X:RETURN