100 CHAR_USE 0,0:CLEAR:title_page
150 DEFine PROCedure scrup(y,x,c$)
160 AT y-1,x-1:PRINT c$;:scr$(y,x)=c$
170 END DEFine 
190 DEFine PROCedure title_page
200 PAPER #0,0:CLS #0
210 high=2000:defchar:sheet=1:sheets
220 INK 4:AT 15,2:PRINT "Use Cursor Keys to Control HARRY"
230 AT 16,7:PRINT "Press (SPACE) to Bomb"
240 AT 17,7:PRINT "Press (ENTER) to Play"
250 key=KEYROW(1):IF key<>1 THEN GO TO 250
255 init
260 END DEFine 
270 DEFine PROCedure init
280 PAPER #0,0:CLS #0:sheet=2
290 score=0:lives=5:count=0:bombs=5
300 screen_init
310 END DEFine 
320 DEFine PROCedure update(a)
325 score=score+a
330 AT 9,18:INK 2:PRINT FILL$("@",lives)&" "
340 AT 8,18:PRINT score
350 AT 10,18:PRINT bombs
360 END DEFine 
370 x=19:y=7
380 mona=18:monb=15
390 REPeat main
400 FOR loop=1 TO 2
410 xx=x:yy=y
420 key=KEYROW(1)
430 IF key THEN moveyou
440 c$=scr$(y,x)
450 IF c$="." THEN BEEP 200,0:scrup y,x," ":update 5:count=count-1:IF key THEN moveyou
460 IF c$="[" THEN BEEP 500,100:scrup y,x," ":update 50:IF key THEN moveyou
470 IF c$="+" THEN BEEP 500,0:scrup y,x," ":update 50:IF key THEN moveyou
480 IF c$="^" THEN INK 2:scrup y,x,"^":OVER 1:INK 6:AT y-1,x-1:PRINT "&":OVER 0
490 x=xx:y=yy
500 INK 4:AT y-1,x-1:PRINT "@"
510 INK 4:AT monb-1,mona-1:PRINT " "
520 monstermovement
530 IF scr$(monb,mona)="^" THEN monsterdie
540 IF count=0 THEN clearsheet:screen_init:GO TO 370
560 IF scr$(monb,mona)="." THEN count=count-1
570 INK 5:scrup monb,mona,"%"
590 IF x=mona AND y=monb THEN EXIT main
600 update 0
610 END FOR loop
620 END REPeat main
630 FOR n=1 TO 50
640 BEEP n,n
650 INK n:scrup y,x,"!"
660 END FOR n
670 lives=lives-1
680 scrup y,x," "
700 scrup monb,mona," "
710 IF lives=0 THEN update 0:game_over
725 GO TO 370
730 DEFine PROCedure monstermovement
740 IF mona<x AND scr$(monb,mona+1)<>"*" THEN mona=mona+1:RETurn 
750 IF mona>x AND scr$(monb,mona-1)<>"*" THEN mona=mona-1:RETurn 
760 IF monb<y AND scr$(monb+1,mona)<>"*" THEN monb=monb+1:RETurn 
770 IF monb>y AND scr$(monb-1,mona)<>"*" THEN monb=monb-1:RETurn 
780 END DEFine 
790 DEFine PROCedure moveyou
800 AT y-1,x-1 :PRINT " "
810 IF key&&16 AND x<>36 THEN IF scr$(y,x+1)<>"*" THEN xx=x+1
820 IF key&&2 THEN IF scr$(y,x-1)<>"*" THEN xx=x-1
830 IF key&&4 THEN IF scr$(y-1,x)<>"*" THEN yy=y-1
840 IF key&&128 THEN IF scr$(y+1,x)<>"*" THEN yy=y+1
850 IF key&&64 THEN IF bombs>0 THEN dropbomb
860 END DEFine 
1030 DEFine PROCedure dropbomb
1040 IF scr$(y,x)="." THEN count=count-1
1050 INK 2:scrup y,x,"^":OVER 1:INK 6:AT y-1,x-1:PRINT "&":OVER 0:bombs=bombs-1
1060 END DEFine 
1080 DEFine PROCedure screen_init
1090 sheets
1100 AT 8,12:PRINT "SCORE"
1110 AT 9,12:PRINT "LIVES"
1120 AT 10,12:PRINT "BOMBS"
1130 END DEFine 
1140 DEFine PROCedure sheets
1150 LOCal x,y
1160 DIM scr$(20,37)
1170 IF sheet=1 THEN RESTORE 1340
1180 IF sheet=2 THEN RESTORE 1550
1190 IF sheet=3 THEN RESTORE 1760
1195 CSIZE 2,0:PAPER 0:CLS:OVER 1:count=0:CHAR_USE news,0
1200 FOR y=1 TO 20
1210 READ scr$(y)
1220 AT y-1,0
1240 FOR x=1 TO 37
1250 c$=scr$(y,x)
1260 IF c$="*" THEN INK 6
1270 IF c$="." THEN INK 1:count=count+1
1280 IF c$="[" THEN INK 4:PRINT c$;:INK 2:AT y-1,x-1:c$="]"
1290 IF c$="+" THEN INK 2:PRINT c$;:INK 4:AT y-1,x-1:c$="-"
1300 PRINT c$;
1310 END FOR x
1320 END FOR y
1325 OVER 0
1330 END DEFine 
1340 DATA "*************************************"
1350 DATA "*                                   *"
1360 DATA "*   +  + +  + +  + ++++ ++++ +  +   *"
1370 DATA "*   ++++ +  + ++ + +    +  + ++++   *"
1380 DATA "*   ++++ ++++ + ++ + ++ +++   ++    *"
1390 DATA "*   +  + ++++ +  + ++++ +  +  ++    *"
1400 DATA "*                                   *"
1410 DATA "*     [  [  [[  [[[[ [[[[ [  [      *"
1420 DATA "*     [[[[ [  [ [  [ [  [ [[[[      *"
1430 DATA "*     [[[[ [[[[ [[[  [[[   [[       *"
1440 DATA "*     [  [ [  [ [  [ [  [  [[       *"
1450 DATA "*                                   *"
1460 DATA "*************************************"
1470 DATA "*+    @   !   @   !   @   !   @    [*"
1480 DATA "*                                   *"
1490 DATA "*                                   *"
1500 DATA "*                                   *"
1510 DATA "*                                   *"
1520 DATA "*[    !   @   !   @   !   @   !    +*"
1530 DATA "*************************************"
1550 DATA "*************************************"
1560 DATA "*+.................................+*"
1570 DATA "*.***************..****************.*"
1580 DATA "*...................................*"
1590 DATA "*.********..************..*********.*"
1600 DATA "*...................................*"
1610 DATA "*.*******..................********.*"
1620 DATA "*.........****************..........*"
1630 DATA "* *******.*              *.********.*"
1640 DATA "*.........*              *..........*"
1650 DATA "* *******.*              *.********.*"
1660 DATA "*.........****************..........*"
1670 DATA "*.*******..................********.*"
1680 DATA "*...................................*"
1690 DATA "*.********..************..*********.*"
1700 DATA "*...................................*"
1710 DATA "*.***************..****************.*"
1720 DATA "*...................................*"
1730 DATA "**[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[**"
1740 DATA "*************************************"
1760 DATA "***************       ***************"
1770 DATA "*[............*       *............[*"
1780 DATA "*.**.**.*.*.*.*       *.*.*.*.**.**.*"
1790 DATA "*....**...*.*.*********.*.*...**....*"
1800 DATA "*.**....*...................*....**.*"
1810 DATA "* **.**.*.****.***.***.****.*.**.**.*"
1820 DATA "*...................................*"
1830 DATA "********..***************..**********"
1840 DATA "       *..*             *..*         "
1850 DATA "       *..*             *..*         "
1860 DATA "       *..*             *..*         "
1870 DATA "       *..***************..*         "
1880 DATA "********...................**********"
1890 DATA "*..........***.***.***.***..........*"
1900 DATA "*.**....**.................**....**.*"
1910 DATA "*....**....**...........**....**....*"
1920 DATA "*.............*********.............*"
1930 DATA "*.**.**.**.**.*       *.** **.**.**.*"
1940 DATA "*[............*       *............[*"
1950 DATA "***************       ***************"
1960 DEFine PROCedure clearsheet
1970 BEEP 0,288,2222,111,1,1
1980 PAUSE 50
1990 RECOL 7,1,5,3,4,0,6,2
2000 FOR n=1 TO 20:SCROLL -10
2010 BEEP
2020 sheet=sheet+1:IF sheet=4 THEN sheet=2
2030 bombs=5
2040 END DEFine 
2060 DEFine PROCedure defchar
2080 old=PEEK_L(PEEK_L(PEEK_L(HEX("28078")))+HEX("2a"))
2090 news=ALCHP(875)
2100 FOR n=0 TO 875 STEP 4:POKE_L news+n,PEEK_L(old+n)
2110 RESTORE 2240
2120 FOR char=1 TO 12
2130 READ c$:charpoke=news+10+(CODE(c$)-32)*9
2140 FOR dat=1 TO 9:READ d:POKE charpoke+dat,d
2150 END FOR char
2170 END DEFine 
2240 DATA "*",124,124,124,124,124,124,124,124,124
2250 DATA "@",68,56,84,124,84,108,124,40,108
2260 DATA "%",56,84,108,124,108,84,56,40,108
2270 DATA "[",4,8,16,16,40,36,32,0,0
2280 DATA "]",0,0,0,0,0,0,12,108,96
2290 DATA "+",0,0,0,124,124,124,56,56,16
2300 DATA "-",12,104,16,0,32,8,16,0,0
2310 DATA "!",68,56,84,124,108,84,124,40,108
2320 DATA "^",0,0,56,56,56,56,56,56,56
2330 DATA "&",24,16,0,56,0,0,0,56,0
2340 DATA ".",0,0,0,0,48,48,0,0,0
2350 DATA "\",0,40,68,104,16,44,100,68,0
2360 DEFine PROCedure game_over
2370 BEEP 0,343,900,64,9,1
2380 RECOL 4,1,2,3,6,5,7,0
2390 FOR n=1 TO 20:SCROLL 10
2400 BEEP
2410 BEEP 0,364,1000,20,2,2
2420 FOR n=99 TO 1 STEP -1.5:BORDER n,n
2430 BORDER 0,0:CHAR_USE 0,0
2440 IF score>high THEN high=score
2450 INK #0,6:AT #0,0,1:PRINT #0," Game Over"
2460 AT #0,1,2:PRINT #0," Your Score was"!score
2470 AT #0,2,3:PRINT #0," High Score is"!high
2480 AT #0,3,4:PRINT #0," Press (ENTER) to Play Again"
2490 BEEP
2500 key=KEYROW(1):IF key<>1 THEN GO TO 2500
2510 RECOL 0,0,0,0,0,0,0,0:RECOL #0,0,0,0,0,0,0,0,0
2520 init
2530 END DEFine 
2540 DEFine PROCedure monsterdie
2550 FOR n=1 TO 7:INK n:scrup monb,mona,"\":BEEP 0,n,n,n,n
2560 scrup monb,mona," "
2570 monb=14:mona=17
2580 update 100
2585 BEEP
2590 END DEFine 
