```100 REM meteor, a character graphics arcade game
120 M\$=CHR\$(2):C\$=CHR\$(219):X\$=CHR\$(25):REM face, solid square, down arrow
130 C5\$=C\$+C\$+C\$+C\$+C\$:H\$="":T=0:REM block, latch for face motion, score
145 CLS:KEY OFF:WIDTH 80:LOCATE 10,1
150 PRINT "Do you want directions (Y/N)?":R=523:REM random seed
160 R\$=INKEY\$:IF R\$="Y" OR R\$="y" THEN GOSUB 740:GOTO 180
170 IF R\$="N" OR R\$="n" OR R\$=CHR\$(13) THEN 180 ELSE R=(R+511)MOD 32003:GOTO 160
180 RANDOMIZE R:REM seed based on delay in ansering question
190 PRINT "How hard (1-9)?";
200 R\$=INKEY\$:C=ASC(R\$+" "):IF C>48 AND C<58 THEN C=C-48:GOTO 220
210 IF C=13 THEN C=5 ELSE 200
220 HX=20+INT(40*RND+1):HY=16+INT(8*RND+1):REM position for face
230 CLS:LOCATE 25,1:COLOR 2:PRINT "METEOR! (Cursors move ";;:COLOR 3:PRINT M\$;:COLOR 2:PRINT ")";
240 GOSUB 680:REM put targets, player marker
250 Y1=1:Y2=24:REM describe meteor path
260 X1=INT(RND*80+1):X2=INT(RND*80+1):REM each is inter 1-80
270 GOSUB 350:GOTO 260:REM plot meteor path, repeat
280 REM plot x\$ at y,x checking for scores, face motion
290 K\$=INKEY\$:IF K\$<>"" THEN H\$=K\$:REM h\$ is latch
300 IF LEN(H\$)>0 THEN GOSUB 500:REM key was struck
310 IF ABS(X-HX)<1 AND ABS(Y-HY)<1 THEN 400:REM face hit
320 IF SCREEN(Y,X)=219 THEN C2=-1:SOUND 660,2:GOSUB 620:REM target hit
330 IF Y=24 AND X=80 THEN X=79:REM writing 24,80 causes scrolling
340 LOCATE Y,X:COLOR 4:PRINT X\$;:RETURN
350 REM draw a line from x1,y1 to x2,y2
360 S0=(X2-X1)/(Y2-Y1):S=X1-S0
370 FOR Y=Y1 TO Y2:S=S+S0:X=INT(.5+S)
380 IF Y>HY+1 THEN RETURN:REM give up if below target
390 GOSUB 280:NEXT Y:RETURN
400 REM target is hit, position message
410 HX=HX-4:IF HX>72 THEN HX=72
420 IF HX<1 THEN HX=1
430 IF HY=24 THEN HY=23
440 SOUND 400,8:LOCATE HY,HX:COLOR 5:PRINT E1\$;:COLOR 6:PRINT "BANG";:COLOR 5:PRINT E1\$;:LOCATE HY+1,HX:PRINT E6\$;
450 LOCATE 25,35:COLOR 2:PRINT "    DEL = FINISH,  INS = PLAY AGAIN          ";
460 H\$=INKEY\$:IF H\$=CHR\$(0)+CHR\$(83) THEN CLS:KEY ON:END
470 IF H\$=CHR\$(0)+CHR\$(83) THEN CLS:KEY ON:END
480 IF H\$=CHR\$(0)+CHR\$(82) THEN CLS:RUN
490 GOTO 460
500 REM process keyboard request
510 IF H\$=CHR\$(32) THEN 630:REM pause on space bar
520 IF LEN(H\$)=1 THEN H\$="":RETURN
530 HH=ASC(RIGHT\$(H\$,1)):K\$=H\$:H\$="":LOCATE HY,HX:PRINT " ";
540 IF HH=77 THEN HX=HX+1:H\$=K\$:IF HX>80 THEN HX=1
550 IF HH=75 THEN HX=HX-1:H\$=K\$:IF HX<1 THEN HX=80
560 IF HH=80 AND HY<24 THEN HY=HY+1:H\$=K\$
570 IF HH=72 AND HY>1 THEN HY=HY-1:H\$=K\$
580 IF HH=80 AND HY=24 THEN HY=23
590 IF SCREEN(HY,HX)=219 THEN SOUND 440,1:C2=10:GOSUB 620
600 IF SCREEN(HY,HX)=25 THEN SOUND 420,1:C2=2:GOSUB 620
610 LOCATE HY,HX:COLOR 3:PRINT M\$;:RETURN
620 T=T+C2:LOCATE 25,27:COLOR 1:PRINT T;:RETURN:REM score points
630 LOCATE 25,35:COLOR 2:PRINT "KEYS:  INS=CONTINUE, DEL=STOP, ENTER=RESTORE ";
640 H\$=INKEY\$:IF H\$=CHR\$(0)+CHR\$(82) THEN 720
650 IF H\$=CHR\$(13) THEN 680
660 IF H\$=CHR\$(0)+CHR\$(83) THEN CLS:KEY ON:END
670 GOTO 640
680 REM put targets and face on screen
690 FOR I=12-C TO 24-C
700 LOCATE I,15:COLOR 7:PRINT C5\$;:LOCATE I,35:PRINT C5\$;:LOCATE I,55:PRINT C5\$;
710 NEXT I:LOCATE HY,HX:COLOR 3:PRINT M\$;
720 LOCATE 25,35:COLOR 2:PRINT "     Hit space bar to pause                  ";
730 RETURN
740 REM directions
750 CLS:PRINT :PRINT TAB(35);"METEOR":PRINT :PRINT
760 PRINT "A simple arcade game using character graphics."
770 PRINT :PRINT "The cursor control keys start the ";:COLOR 3:PRINT M\$;:COLOR 1:PRINT " symbol moving."
780 PRINT "The space bar stops all action temporarily, and allows ";
790 PRINT "restoring targets."
800 PRINT "Any letter (and some other keys) will stop cursor motion."
810 PRINT :PRINT "See if you can erase the solid blocks before a falling ";
820 PRINT "meteor hits you."
830 PRINT "Each ";:COLOR 7:PRINT C\$;:COLOR 1:PRINT " you erase scores 10 points, each ";:COLOR 4:PRINT X\$;:COLOR 1:PRINT " 2 points."
840 PRINT "You lose 1 point for each ";:COLOR 7:PRINT C\$;:COLOR 1:PRINT " a meteor hits."
850 PRINT :PRINT "To hit you, a meteor needs to get within the shaded area.";
860 PRINT :COLOR 6:PRINT  TAB(37);E3\$:PRINT TAB(37);E1\$;:COLOR 3:PRINT M\$;:COLOR 6:PRINT E1\$
870 PRINT TAB(37);E3\$:PRINT:COLOR 1
880 PRINT "Some extra instructions will be on the bottom line.":PRINT :RETURN

```