MUNCH-MAN
by Andrew Hynes
There are three ghosts who chase and try to kill you, moving through walls to do so. In order to overcome the ghosts, make for the power pill situated in each of the four corners of the maze. Eat one and the ghosts turn yellow and run away. Eat a ghost and bonus points are yours. Note too that ghosts do not like tunnels. Once you have cleared a sheet, the dots are replaced. The game continues until you lose three lives. Happy eating!
10 REM Munch-Man 20 REM by A.Hynes 30 REM BEEBUG 40 REM VERSON P 1.0 50 : 60 *FX 11,1 70 *FX 12,1 80 ON ERROR GOTO 2140 90 MODE5:VDU23,1,0;0;0;0; 100 PROCCHARSET 110 ENVELOPE 1,1,4,-4,4,10,20,10,126,0,0,-126,12 6,126 120 H%=0:DIM maze$(19,24),ghost(2,2) 130 REPEAT 140 PRINTTAB(5,2)"MUNCHMAN"TAB(6,9)"*.....UP"TAB (6,11)"?...DOWN"TAB(6,13)"Z...LEFT"TAB(6,15)"X..RIG HT" 150 VDU17,6,31,6,21,238,17,1,32,32,243,32,243,32 ,243:PROCspace 160 lives%=3:score%=0:sheet%=0:ghost=0:dir$=" " 170 PROCsetupmaze:TIME=0:fruit=0:EAT=0 180 COLOUR7:PRINTTAB(1,0)"Score"TAB(14)"High" 190 PROCprintscore(0):PRINTTAB(19-LEN(STR$(H%)) ,1);H%:COLOUR3:PRINTTAB(1,29)STRING$(lives%-1,CHR$2 37+" ")" " 200 REPEAT:*FX 15,0 210 ghost=ghost+1:IF ghost=3 ghost=0 220 PROCpacman:PROCcheck 230 IF EAT=1:SOUND1,-14,150,1 240 IFTIME>2000ANDfruit=0ANDtot%<150:PROCfruit 250 IFRND(1)>.9:PROCdoor 260 IFfruit=1ANDTIME>3000/sheet%:PROCnofruit 270 IFTIME>1500/sheet% ANDEAT=1:EAT=0 280 UNTIL tot%=187 OR KILL=1 290 IF tot%=187:GOTO 170 300 PROCkilled:IF lives%>0:GOTO 190 310 PROCend:UNTIL FALSE 320 : 330 DEFFNcalcX(X) 340 IF X>19:X=0 350 IF X<0:X=19 360 =X 370 : 380 DEFFNcalcY(Y) 390 IF Y>24:Y=0 400 IF Y<0:Y=24 410 =Y 420 : 430 DEFPROCtime(T) 440 TM=TIME:REPEAT UNTIL TIME>TM+T 450 ENDPROC 460 : 470 DEFPROCprintscore(S%) 480 score%=score%+S% 490 COLOUR7:PRINTTAB(1,1);score% 500 ENDPROC 510 : 520 DEFPROCpacman 530 OX%=pacX%:OY%=pacY%:SC=score%:IF pac$<>CHR$24 6:OP$=pac$ 540 dir$=INKEY$(0) 550 IF dir$=":" pac$=CHR$239:pacY%=pacY%-1 560 IF dir$="/" pac$=CHR$240:pacY%=pacY%+1 570 IF dir$="Z" pac$=CHR$238:pacX%=pacX%-1 580 IF dir$="X" pac$=CHR$237:pacX%=pacX%+1 590 pacY%=FNcalcY(pacY%):pacX%=FNcalcX(pacX%) 600 IF dir$="" AND pac$=CHR$246 THEN pac$=OP$ E LSE IF dir$="" pac$=CHR$246 610 A$=maze$(pacX%,pacY%) 620 IF A$=".":PROCprintscore(2):SOUND1,1,60,1:t ot%=tot%+1 630 IF A$=CHR$244:PROCprintscore(100):PROCnofru it:SOUND1,1,150,2 640 IF A$="+":PROCprintscore(50):EAT=1:TIME=0:S OUND1,1,100,2 650 IF SC=score% AND A$<>" ":pacX%=OX%:pacY%=OY% 660 VDU17,3,31,OX%,OY%+3,32 670 PRINTTAB(pacX%,pacY%+3);pac$ 680 maze$(pacX%,pacY%)=" " 690 ENDPROC 700 : 710 DEFPROCruboutghost(G%):COLOUR1 720 M$=maze$(ghost(G%,1),ghost(G%,2)) 730 IF M$="." OR M$="+":COLOUR2 740 IF M$=CHR$244:COLOUR1 750 IF M$=CHR$245:COLOUR5 760 PRINTTAB(ghost(G%,1),ghost(G%,2)+3)maze$(gho st(G%,1),ghost(G%,2)) 770 ENDPROC 780 : 790 DEFPROCghost(G%):C=0 800 PROCruboutghost(G%) 810 IF EAT=1:COLOUR2 ELSE COLOUR1 820 IFEAT=0:DX%=1:DY%=1 ELSE DX%=-1:DY%=-1 830 IFG%=0:PROCvert:IFC=0:PROChoriz 840 IFG%=1:PROChoriz:IFC=0:PROCvert 850 IFG%=2:PROChoriz:PROCvert 860 PRINTTAB(ghost(G%,1),ghost(G%,2)+3)CHR$243 870 ENDPROC 880 : 890 DEFPROCvert 900 A=FNcalcY(ghost(G%,2)+DY%) 910 B=FNcalcY(ghost(G%,2)-DY%) 920 IFpacY%>ghost(G%,2):ghost(G%,2)=A:C=1 930 IFpacY%<ghost(G%,2):ghost(G%,2)=B:C=1 940 ENDPROC 950 : 960 DEFPROChoriz 970 A=FNcalcX(ghost(G%,1)+DX%) 980 B=FNcalcX(ghost(G%,1)-DX%) 990 IFpacX%>ghost(G%,1):ghost(G%,1)=A:C=1 1000 IFpacX%<ghost(G%,1):ghost(G%,1)=B:C=1 1010 ENDPROC 1020 : 1030 DEFPROCdoor 1040 D%=RND(4):RESTORE1870 1050 FORF%=1 TO D%:READX,Y:NEXT 1060 IF X=pacX% AND Y=pacY%:GOTO 1040 1070 IF maze$(X,Y)=" ":maze$(X,Y)=CHR$245 ELSE ma ze$(X,Y)=" " 1080 VDU17,5,31,X,Y+3,ASC(maze$(X,Y)) 1090 ENDPROC 1100 : 1110 DEFPROCfruit 1120 VDU17,1,31,9,18,244 1130 fruit=1:TIME=0 1140 maze$(9,15)=CHR$244 1150 ENDPROC 1160 : 1170 DEFPROCnofruit 1180 VDU31,9,18,32:fruit=0 1190 maze$(9,15)=" " 1200 ENDPROC 1210 : 1220 DEFPROCcheck:KILL=0 1230 FOR G%=0 TO 2 1240 IF G%=ghost:PROCghost(G%) 1250 IF ghost(G%,1)<>pacX% OR ghost(G%,2)<>pacY%: GOTO 1270 1260 IF EAT=1:PROCprintscore(250):SOUND1,1,250,1 :PROCsetupghosts(G%) ELSE KILL=1 1270 NEXT 1280 ENDPROC 1290 : 1300 DEFPROCkilled:COLOUR3 1310 FOR C=237 TO 242 1320 VDU31,pacX%,pacY%+3,C 1330 SOUND1,1,C/2,1:PROCtime(20) 1340 NEXT 1350 VDU31,pacX%,pacY%+3,32 1360 FOR G%=0 TO 2 1370 PROCruboutghost(G%) 1380 PROCsetupghosts(G%) 1390 NEXT 1400 PROCpac:lives%=lives%-1 1410 ENDPROC 1420 : 1430 DEFPROCend 1440 IF score%>H%:H%=score% 1450 COLOUR7:PRINTTAB(19-LEN(STR$(H%)),1);H% 1460 PROCspace 1470 ENDPROC 1480 : 1490 DEFPROCspace:*FX 15,0 1500 VDU17,15,31,1,30:PRINT"SPACE BAR TO START" 1510 REPEAT UNTIL GET=32:VDU12,17,7 1520 ENDPROC 1530 : 1540 DEFPROCsetupghosts(G%) 1550 RESTORE 1860 1560 FOR D%=0 TO G%:READ COL,X:NEXT 1570 ghost(G%,1)=X 1580 ghost(G%,2)=12 1590 ghost(G%,0)=COL 1600 ENDPROC 1610 : 1620 DEFPROCpac 1630 pacX%=9:pacY%=20:pac$=CHR$237 1640 ENDPROC 1650 : 1660 DEFPROCsetupmaze 1670 FORG%=0TO2:PROCsetupghosts(G%):NEXT 1680 PROCpac:tot%=0:sheet%=sheet%+1 1690 COLOUR128:RESTORE 1880 1700 FOR D%=3 TO 27 1710 READ maze$ 1720 FOR E%=0 TO 19 1730 A$=MID$(maze$,E%+1,1) 1740 IF A$>="A" AND A$<="M":M$=CHR$(ASC(A$)+159): COLOUR1 ELSE M$=A$:COLOUR2 1750 PRINTTAB(E%,D%)M$ 1760 maze$(E%,D%-3)=M$ 1770 NEXT 1780 NEXT 1790 VDU19,2,9,0,0,0,19,4,14,0,0,0 1800 FOR D%=1 TO 21 1810 SOUND 2,-15,D%*2,1 1820 SOUND 1,-15,D%*3,1 1830 NEXT:VDU20 1840 ENDPROC 1850 : 1860 DATA 1,1,5,9,6,18 1870 DATA 9,1,9,22,2,15,17,15 1880 DATA" A A " 1890 DATA" CBBBBBBL LBBBBBBBD " 1900 DATA" A+..............+A " 1910 DATA" A.CI.JBD.CBI.JBD.A " 1920 DATA" A.G....A.A.....G.A " 1930 DATA" A...CI.G.G.JBD...A " 1940 DATA" A.H.G........A.H.G " 1950 DATA" A.G...CBD.CD.A.A.A " 1960 DATA" A...H.EBF.EF.G.A.A " 1970 DATA" A.JBK..........G.A " 1980 DATA" A...G.CBBBD.JD...A " 1990 DATA"BLBI...A A..MBBBLB" 2000 DATA" ...JBK MI.G... " 2010 DATA"BD.H...A A....H.CB" 2020 DATA" A.MBI.EBBBF.CI.A.A " 2030 DATA" M K..... ...A..M K " 2040 DATA" A.EI.JBI.H.CK.JF.A " 2050 DATA" A........A.EF....A " 2060 DATA" MBBI.H.H.A....JBBK " 2070 DATA" A....A.G.EBBI....A " 2080 DATA" A.CD.A.. .....CD.A " 2090 DATA" A.EF.G.H.H.JBBLF.A " 2100 DATA" A+.....M K......+A " 2110 DATA" EBBBBBBK MBBBBBBBF " 2120 DATA" A A " 2130 : 2140 ON ERROR OFF 2150 MODE 7: *FX12 2160 *FX15 2170 REPORT:PRINT" at line ";ERL 2180 END 2190 : 2200 DEFPROCCHARSET 2210 VDU23,224,102,102,102,102,102,102,102,102 2220 VDU23,225,0,255,255,0,0,255,255,0 2230 VDU23,226,0,127,127,96,96,103,103,102 2240 VDU23,227,0,254,254,6,6,230,230,102 2250 VDU23,245,0,0,0,255,255,0,0,0 2260 VDU23,246,60,126,255,255,255,255,126,60 2270 VDU23,228,102,103,103,96,96,127,127,0 2280 VDU23,229,102,230,230,6,6,254,254,0 2290 VDU23,230,102,102,102,102,102,126,126,0 2300 VDU23,231,0,126,126,102,102,102,102,102 2310 VDU23,232,0,254,254,6,6,254,254,0 2320 VDU23,233,0,127,127,96,96,127,127,0 2330 VDU23,234,102,230,230,6,6,230,230,102 2340 VDU23,235,102,231,231,0,0,255,255,0 2350 VDU23,236,102,103,103,96,96,103,103,102 2360 VDU23,237,60,126,255,224,224,255,126,60 2370 VDU23,238,60,126,255,7,7,255,126,60 2380 VDU23,239,36,102,231,231,231,255,126,60 2390 VDU23,240,60,126,255,231,231,231,102,36 2400 VDU23,241,0,0,42,0,34,0,42,0 2410 VDU23,242,8,73,42,0,99,0,42,73 2420 VDU23,243,126,90,219,255,213,171,255,219 2430 VDU23,244,198,56,108,222,190,222,108,56 2440 ENDPROC
The program is entirely in Basic . The single CALL command is for OSWORD call zero to input the player's name. INPUT is rather unsatisfactory for this purpose, allowing any character to be typed. It is also much shorter than a Basic routine designed to input such a line. The relevant lines are 1980 to 2010 which produce a string N$. The control block is set up to allow a maximum of 20 characters, each in the range ASCII 32 to 128.
10 REM Robot Attack 20 REM by E.Hung 30 REM BEEBUG 40 REM VERSION P 1.0 50 : 60 PROCSETUP 70 ON ERROR GOTO 2240 80 MODE6:PROCTITLEPAGE 90 MODE5 100 SP%=SP%-50 110 PROCPLOTOBSTACLES 120 REPEAT 130 I%=I%+1 140 PROCCOWBOY 150 PROCROBOT 160 IFGKL%=1 AND GA%=1 AND DD%=0 AND RND(1)>.3 PR OCMARVIN 170 IFI%>4 I%=0 180 IFS%>=OS% OS%=OS%+1500:LV%=LV%+1:PROCLV:IFSND %=1 SOUND1,1,100,1 190 UNTIL DP%=5 OR DD%=1 200 IFDD%=0 SH%=SH%+1:DP%=0:GOTO100 210 LV%=LV%-1:DD%=0:IFLV%>0 GOTO110 220 PROCDELAY(3500) 230 PROCSCORE:PROCRESET:PROCDISPLAYHISCORE 240 GOTO90 250 : 260 DEFPROCTITLEPAGE 270 VDU31,12,8:PRINT"ROBOT ATTACK" 280 PRINT'TAB(11);"By Edward Hung"''"Do you wish to be briefed on the mission"TAB(12);"PRESS Y OR N " 290 A$=GET$:IFA$="Y" PROCINSTRUCTION ELSE IFA$<>" N" THEN290 300 ENDPROC 310 : 320 DEFPROCINSTRUCTION 330 VDU12,31,5,1:PRINT"ROBOT ATTACK INSTRUCTIONS" 340 PRINT'" You are the last survivor of the Human Race. You are being pursued" 350 FORT%=1TO13:READA,A$:PRINTTAB(A)A$:NEXT 360 PRINT'TAB(8)"SPACE BAR TO HYPERSPACE"'''TAB(1 0);"ANY KEY TO START" 370 DATA0,"by a hostile group of Bolo Bolo Robots ,",1,"whose only orders are to kill you by",13,"ram ming you.",2,"Occasionally, Mean MARVIN, King of",4 ," Boloans appears to help them.",2,"You must kill them by luring them" 380 DATA2,"onto mines which you yourself must",13 ,"not walk onto.",3,"CONTROLS:",16,"Z - LEFT",16,"X - RIGHT",16,": - UP",16,"/ - DOWN" 390 *FX15,0 400 A=GET 410 ENDPROC 420 : 430 DEFPROCSETUP 440 ENVELOPE1,1,0,0,0,0,0,0,126,0,0,-126,126,126 450 VDU23,250,8,28,9,30,40,8,20,20 460 VDU23,251,16,56,144,120,20,16,40,40 470 VDU23,252,24,24,60,90,90,16,16,24 480 VDU23,253,24,16,124,186,186,16,40,40 490 VDU23,254;24,60,60,60,60,24; 500 VDU23,255;146,84;198;84,146 510 VDU23,224,160,84,184,16,8,5,2; 520 VDU23,225;0;0,9,81,127; 530 VDU23,226,5,42,29,16,32,192,64; 540 VDU23,227;0;0,72,69,127; 550 VDU23,228,1,1,1,1,1,1,1,1 560 VDU23,229,0,6,30,62,30;0; 570 DIMX%(5),Y%(5),S%(10),N$(10) 580 SND%=1:*FX4,1 590 PROCSCINIT 600 PROCRESET 610 ENDPROC 620 : 630 DEFPROCSCINIT 640 FORI%=1TO10:S%(I%)=550-I%*50:N$(I%)="The Robo ts of Zaexon":NEXT 650 ENDPROC 660 : 670 DEFPROCLV 680 VDU17,3,31,1,31:PRINTSPC(14);TAB(1,31)STRING$ (LV%-1,CHR$250); 690 ENDPROC 700 : 710 DEFPROCRESET 720 S%=0:SC%=0:OS%=1500:SP%=400:SH%=1:LV%=3:F%=0 730 ENDPROC 740 : 750 DEFPROCRND1 760 A%=RND(18):B%=RND(25)+4 770 ENDPROC 780 : 790 DEFPROCRND2 800 X%(I%)=RND(18):Y%(I%)=RND(25)+4 810 ENDPROC 820 : 830 DEFPROCRND3 840 X%=RND(18):Y%=RND(25)+4 850 ENDPROC 860 : 870 DEFPROCPLOTOBSTACLES 880 VDU23,1,0;0;0;0;:VDU28,1,29,18,3:VDU12:VDU26: VDU19,15,2;0; 890 GCOL0,3:MOVE60,60:DRAW1219,60:DRAW1219,930:DR AW60,930:DRAW60,60:FORI%=576TO704STEP33:MOVEI%,926: DRAWI%,866:NEXT:DRAW576,866 900 FORT%=1TO15:VDU17,1,31,RND(18),RND(24)+5,254: NEXT 910 FORI%=1TO5 920 REPEATPROCRND2:UNTILFNPOINT=0 930 VDU17,6,31,X%(I%),Y%(I%),252:NEXT 940 VDU5,18,0,2,25,4,576;1024-4*32;253,4,17,5,31, 5,0 950 PRINT"HISCORE ";S%(1)TAB(6,1)"SCORE ";S% 960 I%=0:DD%=0:GKL%=-1:DP%=0:D%=250:GA%=0:FL%=0:C %=0 970 PROCLV 980 LE%=SH%MOD5 990 IFSH%/5=SH%DIV5 LE%=5 1000 IFLE%=1 VDU4:PRINTTAB(14,31);SPC(4); 1010 VDU5,18,0,1,25,4,(18-LE%)*64;1024-31*32; 1020 IFSH%>30 SH%=1 1030 IFSH%<31 A=7:IFSH%<26 A=6:IFSH%<21 A=5:IFSH%< 16 A=2:IFSH%<11 A=4:IFSH%<6 A=1 1040 GCOL0,A:PRINTSTRING$(LE%,CHR$(229)) 1050 GCOL0,3:MOVE(18-LE%)*64,1024-31*32:PRINTTAB(1 8-LE%,31)STRING$(LE%,CHR$(228)) 1060 REPEATPROCRND1:UNTILFNPNT(A%,B%)=0 1070 a%=A%:b%=B% 1080 VDU4,17,3,31,A%,B%,250 1090 FORT%=1TO10000:NEXT 1100 VDU17,3,31,A%,B%,250 1110 ENDPROC 1120 : 1130 DEFPROCCOWBOY 1140 IFINKEY-98 A%=A%-1:F%=1:D%=251 1150 IFINKEY-67 A%=A%+1:F%=1:D%=250 1160 IFINKEY-105 B%=B%+1:F%=1 1170 IFINKEY-73 B%=B%-1:F%=1 1180 IFINKEY-99 H%=1:F%=1:REPEATPROCRND1:UNTILFNP NT(A%,B%)<>6 AND FNPNT(A%,B%)<>2:IFSND%=1 SOUND17,2 ,50,10 1190 IFF%=0 ENDPROC 1200 A%=A%+(A%>18)-(A%<1):B%=B%+(B%>29)-(B%<3) 1210 IFFNPNT(A%,B%)=1 PROCPIT(a%,b%,A%,B%):DD%=1:E NDPROC 1220 IFFNPNT(A%,B%)=6 OR FNPNT(A%,B%)=2 PROCDEAD:D D%=1:ENDPROC 1230 IFFNPNT(A%,B%)<>0 A%=a%:B%=b%:ENDPROC 1240 PRINTTAB(a%,b%)" ":IFH%=1H%=0:PROCDELAY(700) 1250 VDU17,3,31,A%,B%,D% 1260 a%=A%:b%=B%:F%=0 1270 FORT%=0TO(SP%/50):NEXT 1280 ENDPROC 1290 : 1300 DEFPROCROBOT 1310 IFDD%=1 ENDPROC 1320 IFX%(I%)=0 AND Y%(I%)=0 ENDPROC 1330 OX%=X%(I%):OY%=Y%(I%) 1340 X%(I%)=X%(I%)+(X%(I%)>A%)-(X%(I%)<A%) 1350 Y%(I%)=Y%(I%)+(Y%(I%)>B%)-(Y%(I%)<B%) 1360 IFFNPOINT=6 OR FNPOINT=2 REPEAT PROCRND2:UNTI L FNPOINT=0:IFSND%=1 SOUND1,2,50,10 1370 IFFNPOINT=1 PROCPIT(OX%,OY%,X%(I%),Y%(I%)):X% (I%)=0:Y%(I%)=0:DP%=DP%+1:PROCMS(10):ENDPROC 1380 IFFNPOINT=3 PROCDEAD:DD%=1:ENDPROC 1390 IFFNPOINT<>0 Y%(I%)=Y%(I%)+2 1400 FORT%=0TO(SP%/50):NEXT 1410 IFSND%=1 SOUND3,-15,10,1 1420 PRINTTAB(OX%,OY%);SPC(1):VDU17,6,31,X%(I%),Y% (I%),252 1430 IFRND(1)>0.95 AND FL%=0:GKL%=-GKL%:C%=GKL%:IF GKL%=1 X%=9:Y%=5:FL%=1:J%=0:GA%=0:VDU19,15,14;0;:IF SND%=1 SOUND1,-15,50,1 1440 IFC%=-1 VDU5,18,3,2,25,4,9*64;1024-4*32;253,4 :PRINTTAB(X%,Y%)SPC(1):C%=0:IFSND%=1 SOUND1,-15,200 ,1 1450 IFFL%=1 J%=J%+1:IFJ%=10 VDU5,18,3,2,25,4,9*64 ;1024-4*32;253,4,19,15,2;0;:FL%=0:GA%=1:IFSND%=1 SO UND1,-15,200,1 1460 ENDPROC 1470 : 1480 DEFPROCMARVIN 1490 XX%=X%:YY%=Y% 1500 X%=X%+(X%>A%)-(X%<A%):Y%=Y%+(Y%>B%)-(Y%<B%) 1510 IFFNPNT(X%,Y%)=15 Y%=Y%+2 1520 IFFNPNT(X%,Y%)=1 PROCPIT(XX%,YY%,X%,Y%):X%=0: Y%=0:GKL%=-1:VDU5,18,3,2,25,4,576;1024-4*32;253,4:P ROCMS(100):ENDPROC 1530 IFFNPNT(X%,Y%)=3 PROCDEAD:DD%=1:ENDPROC 1540 IFFNPNT(X%,Y%)=6 REPEATPROCRND3:UNTIL FNPNT(X %,Y%)=0:IFSND%=1 SOUND3,2,50,10 1550 IFSND%=1 SOUND2,3,50,1 1560 PRINTTAB(XX%,YY%);SPC(1):VDU17,2,31,X%,Y%,253 1570 ENDPROC 1580 : 1590 DEFPROCPIT(a,b,A,B) 1600 PRINTTAB(a,b)" " 1610 IFSND%=1 SOUND0,1,5,1 1620 VDU17,3,31,A,B,255:FORL=1TO500:NEXT:PRINTTAB( A,B);SPC(1) 1630 ENDPROC 1640 : 1650 DEFPROCDEAD 1660 IFD%=250 D%=224 ELSE D%=226 1670 VDU17,3,31,a%,b%,D%:FORL=1TO500:NEXT:VDU31,a% ,b%,D%+1 1680 IFSND%=1 SOUND0,1,5,1 1690 PROCDELAY(700) 1700 IFSND%=1 FORQ%=1TO5:FORL%=255TO200STEP-1:SOUN D17,-15,L%,1:NEXT, 1710 IFSND%=0 PROCDELAY(2000) 1720 ENDPROC 1730 : 1740 DEFPROCDELAY(T%) 1750 FORT=1TOT%:NEXT 1760 ENDPROC 1770 : 1780 DEFPROCMS(S) 1790 S%=S%+S:VDU17,2,31,12,1:PRINT;S% 1800 ENDPROC 1810 : 1820 DEFPROCSCORE 1830 FORI%=1TO10 1840 IFS%>=S%(I%) AND SC%=0 SC%=I% 1850 NEXT 1860 IFSC%=0 ENDPROC 1870 PROCENTERNAME 1880 FOR P%=10 TO SC%+1 STEP-1:S%(P%)=S%(P%-1):N$( P%)=N$(P%-1):NEXT 1890 N$(SC%)=N$ 1900 S%(SC%)=S% 1910 ENDPROC 1920 : 1930 DEFPROCENTERNAME 1940 VDU12,17,2:PRINTTAB(0,6)"Your score is in the "''TAB(6)"Top Ten"'''' 1950 VDU17,6:PRINT" Please enter your"''TAB(7)"nam e:"'' 1960 *FX15,0 1970 VDU23;10,224;0;0;0;31,0,20;17,3 1980 X%=&80:Y%=&A:A%=0 1990 !&A80=&A00:?&A82=20:?&A83=32:?&A84=128 2000 CALL&FFF1 2010 N$=$&A00 2020 ENDPROC 2030 : 2040 DEFPROCDISPLAYHISCORE 2050 VDU22,4,23,1;1;0;0;0,19,3,0;0;:PRINTTAB(15)"H ighscores"'':VDU19,1,3;0;17,1 2060 FORI%=1TO10:IFI%=10AA$=""ELSEAA$=" " 2070 BB$=".....":IFS%(I%)<999BB$="......":IFS%(I%) <99BB$="......." 2080 PRINTTAB(3)AA$;I%;BB$;S%(I%);"...";N$(I%)' 2090 NEXT 2100 VDU19,0,0;0;17,1:PRINTTAB(8)"C to close sound channel"'TAB(8)"O to open sound channel"''TAB(11) "Sound Channel"'TAB(11)"Any key to start"'TAB(7)"Or @ to clear score table" 2110 COLOUR3:IFSND%=1 PRINTTAB(25,26)"on. "ELSEPRI NTTAB(25,26)"off." 2120 *FX15,0 2130 A=GET 2140 IFA=64 PROCSCINIT:GOTO2050 2150 IFA=67 OR A=99 PRINTTAB(25,26)"off.":SND%=0:G OTO2130 2160 IFA=79 OR A=111 PRINTTAB(25,26)"on. ":SND%=1: GOTO2130 2170 ENDPROC 2180 : 2190 DEFFNPOINT 2200 =FNPNT(X%(I%),Y%(I%)) 2210 DEFFNPNT(U%,V%) 2220 =POINT(U%*64+32,1010-V%*32) 2230 : 2240 ON ERROR OFF 2250 MODE6 2260 *FX4 2270 IF ERR=17 END 2280 REPORT:PRINT" at line ";ERL 2290 END
You can choose the level of difficulty for the game -- the more difficult the game, the more sensitive the controls and the rougher the terrain (ranging from quite smooth to very rough). You have 15 seconds to land the craft before your fuel runs out.
The controls are given in the program, and for those of you who find the game too easy (in excess of 2000 points) you might like to change the gravity factor by altering line 190 to:
190 N%=N%-(G%/1.95-(1/Y%/10)):IF N%>80 N%=80
10 REM Mars Lander 20 REM by A.Webster 30 REM BEEBUG 40 REM Version P 1.0 50 : 60 ON ERROR GOTO 740 70 PROCchars:PROCarrays:MODE4 80 PRINTTAB(14,2)"Mars Lander";TAB(12,3)"by Ala n Webster" 90 PRINTTAB(5,10)"Difficulty. 1-8 (1=Easy) ?":G %=GET:IFG%<49 OR G%>56 GOTO 90 100 G%=G%-47:dead=FALSE:SC%=0 110 L%=G%*6:PRINTTAB(13,19)"Z - left";TAB(13,20) "X - Right";TAB(8,21)"RETURN - Thrust";TAB(9,23)"Pr ess any key":i=GET 120 MODE5:A2%=100:VDU5:REPEAT:CLS:PROCstars:PROC meteors:X%=RND(900):Y%=1000:M%=0:N%=1:landed=FALSE: PROCscene 130 TIME=0:REPEAT:OX%=X%:OY%=Y% 140 IFINKEY-98 IF X%>32 M%=M%-G% 150 IFINKEY-67 IF X%<1210 M%=M%+G% 160 X%=X%+(M%/2):IFX%<32 X%=32 170 IFX%>1210 X%=1210 180 M%=M%+(SGN(M%)/10):IFINKEY-74 N%=N%+G% 190 N%=N%-(G%/10):IFN%>80 N%=80 200 Y%=Y%-8+N%:IFOX%=X% IF OY%=Y% GOTO 220 210 MOVEOX%,OY%:GCOL0,0:VDU224:MOVEX%,Y%:GCOL0,3 :VDU224 220 R%=POINT(X%+55,Y%-31):R1%=POINT(X%,Y%-31):SO UND0,-10,4,1:IFR%=1 dead=TRUE 230 IFR1%=1 dead=TRUE 240 IFR%=2 IFR1%=2 landed=TRUE 250 IF TIME>1500 dead=TRUE 260 UNTIL landed OR dead:IFN%<1 dead=TRUE 270 : 280 G%=G%+1:IF dead GOTO300 290 SC%=SC%+(1500-TIME):FORSO%=1TO10 :SOUND1,-10 ,200,1:SOUND1,-10,100,1:NEXT 300 L%=L%+4:UNTIL dead:SC%=SC%-100:PROCexpl:TIME =0:REPEAT UNTIL TIME>150:*FX15 310 MODE6:PRINTTAB(5,10)"Your Score was :";SC%:T IME=0:REPEAT UNTIL TIME>500:RUN 320 : 330 DEFPROCscene 340 P%=RND(120)*8:FORA1%=0TO1280STEP8:IFA1%=P% S %=A2% 350 IFA1%>P% IFA1%<(P%+120) PROCpad:GOTO380 360 GCOL0,1:MOVEA1%,0:DRAWA1%,A2%:A2%=A2%+(RND(L %)-(L%/2)):IFA2%<20A2%=20 370 IFA2%>400A2%=400 380 NEXT 390 ENDPROC 400 : 410 DEFPROCpad 420 GCOL0,2:PLOT69,A1%,S%:PLOT69,A1%,S%+4:GCOL0, 1:MOVEA1%,0:DRAWA1%,S%-4:GCOL0,0:MOVEA1%,S%+8:DRAWA 1%,S%+72 430 ENDPROC 440 : 450 DEFPROCchars 460 VDU23,224,0,24,60,255,102,60,66,129:VDU23,22 5,20,126,124,126,254,124,28,48 470 ENDPROC 480 : 490 DEFPROCarrays 500 ENVELOPE 1,3,0,0,0,0,255,0,126,0,0,-126,126, 126 510 DIMZ%(8),Z2%(8),Q%(8),Q1%(8) 520 FOR Z1%=1TO8:Q%(Z1%)=RND(12):IFQ%(Z1%)>6 Q%( Z1%)=Q%(Z1%)-13 530 Q1%(Z1%)=RND(12):IFQ1%(Z1%)>6 Q1%(Z1%)=Q1%(Z 1%)-13 540 NEXT 550 ENDPROC 560 : 570 DEFPROCexpl 580 GCOL0,0:MOVEX%,Y%:VDU224:FOR Z6%=1TO8:Z%(Z6% )=X%:Z2%(Z6%)=Y%:NEXT 590 FORP%=1TO14:FORJ%=1TO8:GCOL0,0:PLOT69,Z%(J%) ,Z2%(J%):Z%(J%)=Z%(J%)+(Q%(J%)*4) 600 GCOL0,1:Z2%(J%)=Z2%(J%)+(Q1%(J%)*2):GCOL0,7: PLOT69,Z%(J%),Z2%(J%):NEXT:SOUND 0,1,6,4:NEXTP% 610 ENDPROC 620 : 630 DEFPROCmeteors 640 GCOL0,1:FORW%=1TO(L%/2.5)+RND(5):MOVE RND(10 00),RND(600)+200:VDU225:NEXT 650 ENDPROC 660 : 670 DEFPROCstars 680 COLOUR2 690 FORS%=1TORND(50)+50 700 PLOT69,RND(1200)+40,RND(1000)+24 710 NEXT 720 ENDPROC 730 : 740 ON ERROR OFF 750 MODE6:IF ERR=17 END 760 REPORT:PRINT " at line ";ERL 770 END
You have three lives; your score relates to your progress, and as it increases, the traffic gets steadily worse. Playing tips:
1. Do not roll into a ball in the oncoming traffic.
2. Make good use of the rest point between the road and the railway track.
If you find the game too fast then you may like to modify it to run in mode 2 where it runs much more slowly. The mode is set in line 80. Using mode 2 allows you more colours on the screen, and to take advantage of this, change line 1790 to:
1790 COLOUR (R%MOD15)+2
10 REM Hedgehog 20 REM by A.Dickinson 30 REM BEEBUG 40 REM Version P 1.0 50 : 60 ON ERROR MODE6:REPORT:PRINT " at line ";ERL:E ND 70 : 80 MODE5 90 VDU23,1,0;0;0;0 100 *FX9,25 110 *FX10,25 120 DIM R$(9):REM ROADS 130 DIM A%(19):REM ACORNS 140 : 150 PROCINTRO 160 PROCDEFINE 170 PROCINIT 180 REPEAT 190 PROCGAME 200 IF S%>T% PROCTOPSCORE 210 PROCGAMEOVER 220 TIME=0:REPEAT UNTIL TIME>200 230 *FX15,1 240 A$=GET$ 250 UNTIL FALSE 260 : 270 DEF PROCINTRO 280 COLOUR 133 290 CLS 300 COLOUR 15 310 PRINT'''" H e d g e h o g" 320 PRINTTAB(2,14)"Controls..." 330 PRINT'" Z = LEFT" 340 PRINT'" X = RIGHT" 350 PRINT'" / = SCURRY" 360 PRINTTAB(2,30)"Snatch acorns..."; 370 TIME=0:REPEAT UNTIL TIME>300 380 COLOUR 9 390 PRINTTAB(2,30)"Press any key..."; 400 A$=GET$ 410 ENDPROC 420 : 430 DEF PROCDEFINE 440 VDU23,255,136,204,238,238,238,238,238,238 450 VDU23,254,0,0,-1,-1,0,0,0,0 460 VDU23,252,0,-1,-1,0,0,-1,-1,0 470 VDU23,251,0,0,0,0,-1,-1,0,0 480 VDU23,253,24,60,90,255,126,255,60,0 490 VDU23,250,108,72,200,252,254,251,127,60 500 VDU23,249,24,60,60,60,0,126,60,24 510 H$=CHR$17+CHR$1+CHR$253 520 VDU23,224,15,105,105,249,255,255,255,102 530 VDU23,225,240,150,150,159,255,255,255,102 540 VDU23,226,0,0,0,126,126,126,255,102 550 VDU23,227,0,126,126,126,126,126,255,102 560 VDU23,228,31,49,97,255,255,255,255,48 570 VDU23,229,255,36,36,255,255,255,255,0 580 VDU23,230,248,140,134,255,255,255,255,24 590 VDU23,231,0,31,17,17,255,191,255,48 600 VDU23,232,0,240,136,136,255,253,255,12 610 VDU23,233,255,255,255,255,255,255,255,28 620 VDU23,234,255,239,199,239,255,255,221,28 630 ENDPROC 640 : 650 DEF PROCINIT 660 T%=500 670 T$="Henry Hedgehog" 680 S1$=CHR$32:S2$=S1$+S1$ 690 S3$=S2$+S1$:S4$=S2$+S2$ 700 S5$=S3$+S2$:S6$=S3$+S3$ 710 R$(0)=STRING$(20,S1$) 720 R$(1)=S2$+CHR$227+CHR$226+CHR$227+CHR$227+CH R$225+S4$+CHR$226+CHR$225+S5$+CHR$227+CHR$226+CHR$2 25+S4$ 730 R$(2)=CHR$224+CHR$226+CHR$227+CHR$226+CHR$22 6+S5$+CHR$224+CHR$226+S3$+CHR$224+CHR$227+CHR$227+C HR$226+S2$+CHR$224+CHR$226+S3$ 740 R$(3)=CHR$228+CHR$229+CHR$229+CHR$230+S4$+CH R$227+CHR$227+CHR$225+S6$+CHR$228+CHR$229+CHR$230+S 3$+CHR$226+CHR$225+S1$ 750 R$(4)=CHR$228+CHR$229+CHR$229+CHR$230+S4$+CH R$224+CHR$227+CHR$227+S6$+CHR$228+CHR$229+CHR$230+S 3$+CHR$224+CHR$226+S1$ 760 R$(5)=STRING$(20,S1$) 770 R$(6)=S2$+CHR$228+CHR$229+CHR$229+CHR$232+S5 $+CHR$231+CHR$232+S5$+CHR$233+CHR$233+CHR$232+S1$+C HR$231+CHR$232+S2$ 780 R$(7)=CHR$231+CHR$232+S2$+CHR$231+CHR$232+S2 $+CHR$233+CHR$232+S5$+CHR$228+CHR$232+S1$+CHR$233+C HR$232+S5$ 790 R$(8)=CHR$231+CHR$232+S1$+CHR$231+CHR$232+S3 $+CHR$231+CHR$233+S5$+CHR$231+CHR$230+S1$+CHR$231+C HR$233+S5$ 800 R$(9)=S4$+CHR$231+CHR$232+S1$+CHR$231+CHR$22 9+CHR$229+CHR$230+S3$+CHR$231+CHR$233+S3$+CHR$231+C HR$233+S3$+CHR$231+CHR$230+S1$ 810 FOR I%=1 TO 9 820 R$(I%)=STRING$(5,R$(I%)) 830 R$(I%)=LEFT$(R$(I%),100) 840 NEXT 850 ENDPROC 860 : 870 DEF PROCGAME 880 S%=-100:LEVEL%=-1:PROCHARDER 890 N%=0 900 REPEAT 910 N%=N%+1:PROCGO 920 UNTIL N%=3 930 IFS%<1000 ENDPROC 940 COLOUR 0:COLOUR 129:CLS 950 PRINTTAB(2,10)"Bonus hedgehog"; 960 PRINTTAB(2,20)"May the fleas"; 970 PRINTTAB(2,22)" be with you"; 980 FOR I%=0 TO 255 STEP8 990 SOUND&1,-12,I%,1 1000 NEXT 1010 *FX15,1 1020 A$=INKEY$(200) 1030 REPEAT:N%=N%+1:PROCGO:UNTIL N%=4 1040 ENDPROC 1050 : 1060 DEF PROCGO 1070 X%=10:Y%=30:Z%=10 1080 PROCDRAWSCREEN 1090 REPEAT 1100 PROCROAD(1,0,12) 1110 PROCROAD(6,0,22) 1120 PROCROAD(7,0,24) 1130 PROCROAD(4,1,18) 1140 PROCROAD(8,1,26) 1150 PROCROAD(9,1,28) 1160 PROCROAD(7,0,24) 1170 PROCROAD(2,1,14) 1180 PROCROAD(8,1,26) 1190 PROCROAD(3,0,16) 1200 UNTIL Y%=0 1210 IF ACORNS%=0 PROCHARDER 1220 ENDPROC 1230 : 1240 DEF PROCDRAWSCREEN 1250 COLOUR 0 1260 COLOUR 128 1270 CLS 1280 COLOUR 129 1290 PRINTTAB(1,4)SPC(17); 1300 PRINTTAB(1,5)" H E D G E H O G "; 1310 PRINTTAB(1,6)SPC(17); 1320 COLOUR3 1330 COLOUR 128 1340 PRINTTAB(1,1);N%; 1350 PRINTTAB(0,10)STRING$(20,CHR$255) 1360 COLOUR 9 1370 FOR I%=0 TO 19 1380 IF A%(I%)=1 PRINTTAB(I%,10)CHR$249 1390 NEXT 1400 COLOUR 7 1410 PRINTTAB(0,21)STRING$(20,CHR$254) 1420 PRINTTAB(0,23)STRING$(10,"- ") 1430 PRINTTAB(0,25)STRING$(20,CHR$252) 1440 PRINTTAB(0,27)STRING$(10,"- "); 1450 PRINTTAB(0,29)STRING$(20,CHR$251) 1460 PRINTTAB(10,1)"Score ";S%; 1470 COLOUR13 1480 PRINTTAB(0,20)R$(5); 1490 PRINTTAB(X%,Y%)H$; 1500 ENDPROC 1510 : 1520 DEF PROCHOG 1530 IF Y%=0 ENDPROC 1540 IF INKEY-98 AND X%>0 PROCLEFT ELSE IF INKEY- 67 AND X%<19 PROCRIGHT ELSE IF INKEY-105 PROCFWD 1550 IFZ%<10 IF MID$(R$(Z%),X%+1,1)<>S1$ PROCSPLA T 1560 ENDPROC 1570 : 1580 DEF PROCLEFT 1590 X%=X%-1:PRINTTAB(X%,Y%)H$;SPC(1) 1600 ENDPROC 1610 : 1620 DEF PROCRIGHT 1630 PRINTTAB(X%,Y%)SPC(1);H$:X%=X%+1 1640 ENDPROC 1650 : 1660 DEF PROCFWD 1670 IF Z%=1 AND A%(X%)<>1 SOUND 1,-15,40,1:ENDPR OC 1680 Y%=Y%-2 1690 Z%=Z%-1 1700 PRINTTAB(X%,Y%)H$;TAB(X%,Y%+2)S1$; 1710 SOUND 1,-12,220,1 1720 S%=S%+10 1730 PRINTTAB(10,1)"Score ";S%; 1740 IF Z%=0 PROCCHUCKLE 1750 ENDPROC 1760 : 1770 DEF PROCROAD(R%,D%,SY%) 1780 IF D%>0 R$(R%)=MID$(R$(R%),2,99)+LEFT$(R$(R% ),1) ELSE R$(R%)=MID$(R$(R%),100,1)+LEFT$(R$(R%),99 ) 1790 COLOUR (R%MOD2)+2 1800 COLOUR 128 1810 PRINTTAB(0,SY%)LEFT$(R$(R%),20); 1820 IF SY%=Y% PRINTTAB(X%,Y%)H$; 1830 PROCHOG 1840 IF Y%=SY% IF MID$(R$(R%),X%+1,1)<>S1$ PROCSP LAT 1850 IF RND(80)=80 SOUND3,-15,1,10:SOUND2,-15,9,8 :SOUND1,-15,17,2 1860 ENDPROC 1870 : 1880 DEF PROCSPLAT 1890 IF Y%=0 ENDPROC 1900 COLOUR 14 1910 PRINTTAB(X%,Y%)"*"; 1920 VDU19,0,1,0,0,0 1930 COLOUR 12 1940 COLOUR 139 1950 PRINTTAB(1,4)SPC(17); 1960 PRINTTAB(1,5)" S P L A T "; 1970 PRINTTAB(1,6)SPC(17); 1980 COLOUR 128 1990 FOR I%=1 TO 15 2000 SOUND 1,-5,255-10*I%,1 2010 NEXT 2020 COLOUR 1 2030 PRINTTAB(X%,Y%)CHR$250; 2040 VDU20 2050 IF X%>10 AX%=0:AMB$=S1$+CHR$234+CHR$232 ELSE AX%=17:AMB$=CHR$231+CHR$234+S1$ 2060 FOR I%=0 TO 15 2070 IF AX%<X% PRINTTAB(AX%,Y%)AMB$;:AX%=AX%+1 2080 IF AX%>X% AX%=AX%-1:PRINTTAB(AX%,Y%)AMB$; 2090 FOR J%=0 TO 120 STEP2 2100 SOUND&11,-I%,J%,5 2110 NEXT 2120 NEXT 2130 Y%=0 2140 ENDPROC 2150 : 2160 DEF PROCCHUCKLE 2170 FOR I%=1 TO 25 2180 J%=1 2190 SOUND J%,-15+I%/3,200-RND(3)*I%,1 2200 NEXT 2210 N%=N%-1:Y%=0:S%=S%+25:A%(X%)=0:ACORNS%=ACORN S%-1 2220 ENDPROC 2230 : 2240 DEF PROCHARDER 2250 FOR I%=1 TO 3 2260 FOR J%=30 TO 180 STEP8 2270 SOUND &12,-11-I%,J%+12+I%*10,1 2280 NEXT 2290 NEXT 2300 S%=S%+100 2310 FOR I%=0 TO 19:A%(I%)=0:NEXT 2320 FOR I%=1 TO 4 2330 REPEAT 2340 J%=RND(17)+1 2350 UNTIL A%(J%)=0 2360 A%(J%)=1 2370 NEXT 2380 ACORNS%=4 2390 LEVEL%=LEVEL%-2*(LEVEL%<>9) 2400 R$(5)=STRING$(LEVEL%,CHR$255)+STRING$(20-LEV EL%*2,S1$)+STRING$(LEVEL%,CHR$255) 2410 ENDPROC 2420 : 2430 DEF PROCTOPSCORE 2440 COLOUR 3 2450 COLOUR 129 2460 CLS 2470 PRINTTAB(1,3)"T O P - S C O R E"; 2480 PRINTTAB(1,8)"Enter your name"; 2490 PRINTTAB(1,10); 2500 FOR I%=100 TO 200 STEP 12 2510 SOUND 1,-15,I%,3 2520 SOUND 2,-14,I%+8,3 2530 NEXT 2540 *FX15,1 2550 INPUT ""T$ 2560 T%=S% 2570 ENDPROC 2580 : 2590 DEF PROCGAMEOVER 2600 COLOUR 4 2610 COLOUR 133 2620 CLS 2630 PRINTTAB(5,3)"Super hog"; 2640 COLOUR 15 2650 PRINTTAB((20-LEN(T$))DIV2,6)T$; 2660 COLOUR 4 2670 PRINTTAB(5,11)"Top score"; 2680 COLOUR 0 2690 PRINTTAB(8,13);T%; 2700 COLOUR 4 2710 PRINTTAB(5,18)"Your score"; 2720 COLOUR 0 2730 PRINTTAB(8,20);S%; 2740 COLOUR 4 2750 PRINTTAB(4,30)"Press any key"; 2760 ENDPROC
You have three lives to play with and you lose one every time an alien lands. After losing all of your lives your score is displayed and the highest score is shown. Press any key to restart.
You control the cross on the screen, and have to move this directly on top of the alien and then fire. If you move across the path of the alien, a 'shimmer' effect will cause him to disappear temporarily.
The following keys are used within the game:
Z Left : Up
X Right / Down
Space Bar to Fire
You score 1 point for every alien hit on the first wave (sheets 1 to 6), two points on the second wave and so on. You are also limited to the number of bullets you can fire and this is displayed at the bottom centre of the screen and is given in line 160. It is set to 25, but of course you can change this to make the game easier or harder.
10 REM INVASION 20 REM by A.Webster 30 REM BEEBUG 40 REM Version P 1.0 50 : 60 ON ERROR GOTO 1090 70 MODE5 80 EK%=0:FR%=0 90 VDU19,1,11,0,0,0 100 PROCchr 110 HI%=0:DIM Z(5,2) 120 SC%=0:LV%=3:R%=10 130 FORTW%=0 TO 5 140 SOUND1,-10,235,1 150 OT%=TW% 160 B%=25 170 GF%=0 180 PX=9:PY=10:CLS 190 PROCscene 200 I%=1 210 PROCstars(100) 220 PROCrndm 230 IFI%=1I%=2ELSEI%=1 240 PROCalmove 250 SOUND0,-(RND(5)+10),7,1 260 IFLV%<1 PROCendgame:GOTO120 270 FORLP%=1TOR%+(R%ANDFR%=0) 280 PROCplmove 290 COLOUR2 300 PRINTTAB(2,31);SC%;TAB(17,31);LV%; 310 COLOUR3 320 PROCfire 330 NEXTLP% 340 IFEK%=TW%+1 EK%=0:NEXTTW% 350 IF TW%=6 R%=R%-1:GOTO130 ELSE230 360 END 370 : 380 DEFPROCscene 390 VDU23,1,0;0;0;0; 400 VDU23,255,255,255,255,255,255,255,255,255 410 FORA%=1TO18:PRINTTAB(A%,30);CHR$255:NEXT 420 VDU23,254,8,8,28,28,62,62,127,127 430 PRINTTAB(9,29);CHR$254 440 ENDPROC 450 : 460 DEFPROCstars(A%) 470 FORA1%=1TOA%:GCOL0,RND(3) 480 PLOT69,RND(1280)-1,RND(900)+123 490 NEXT:ENDPROC 500 : 510 DEFPROCchr 520 VDU23,224,24,24,36,231,231,36,24,24 530 VDU23,225,102,153,60,90,126,60,66,129 540 VDU23,226,129,90,60,90,126,60,66,36 550 ENDPROC 560 : 570 DEFPROCrndm 580 FORA%=0TOTW%:Z(A%,0)=RND(18):Z(A%,1)=0:Z(A%, 2)=1:NEXT 590 ENDPROC 600 : 610 DEFPROCplmove 620 OX=PX:OY=PY 630 IFINKEY-98ANDPX>1GF%=GF%-1 640 IFINKEY-67ANDPX<18GF%=GF%+1 650 IF ABS(GF%)=2 PX=PX+SGN(GF%):GF%=0 660 IFINKEY-105ANDPY<27PY=PY+1 670 IFINKEY-73ANDPY>0PY=PY-1 680 PRINTTAB(OX,OY);" ":COLOUR3:PRINTTAB(PX,PY)C HR$224 690 ENDPROC 700 : 710 DEFPROCalmove 720 FORA%=0TOTW% 730 IFZ(A%,2)=0 GOTO 820 740 PRINTTAB(Z(A%,0),Z(A%,1));SPC1 750 Z(A%,1)=Z(A%,1)+1:Z(A%,0)=Z(A%,0)+(RND(3)-2) 760 G%=Z(A%,0) 770 IFG%<1Z(A%,0)=1 780 IFG%>18Z(A%,0)=18 790 IFZ(A%,1)=29 AND G%=3ORG%=9ORG%=16 Z(A%,0)=Z (A%,0)+1 800 COLOUR1:PRINTTAB(Z(A%,0),Z(A%,1))CHR$(224+I% ) 810 IFZ(A%,1)=29 Z(A%,2)=0:LV%=LV%-1:EK%=EK%+1:F ORSD%=1TO2:SOUND1,-15,5,4:SOUND1,-15,1,4:NEXT 820 NEXT 830 ENDPROC 840 : 850 DEFPROCendgame 860 A%=INKEY(310) 870 CLS 880 PRINTTAB(3,15);"YOUR SCORE:";SC% 890 IFSC%>HI%HI%=SC% 900 PRINTTAB(3,17);"HI SCORE :";HI% 910 *FX15,0 920 COLOUR3:EK%=0 930 S=GET 940 ENDPROC 950 : 960 DEFPROCfire 970 FR%=0 980 IFINKEY-99ANDB%>0FR%=608 990 IFFR%=0 ENDPROC 1000 FX=64*PX+32:FY=1024-(32*PY)-16 1010 FR1%=96 1020 MOVEFR%,FR1%:DRAWFX,FY:GCOL0,0 1030 FORY%=0TOTW%:IFPX=Z(Y%,0)ANDPY=Z(Y%,1)ANDZ(Y %,2)<>0 Z(Y%,2)=0:SC%=SC%+11-R%:EK%=EK%+1:SOUND1,-1 5,100,1:SOUND1,-14,2,1:SOUND1,-15,200,1 ELSE SOUND1 ,-10,235,1 1040 NEXT 1050 MOVEFR%,FR1%:DRAWFX,FY:GCOL0,3 1060 B%=B%-1:PRINTTAB(9,31);B%;CHR$32; 1070 ENDPROC 1080 : 1090 ON ERROR OFF 1100 MODE6 1110 IF ERR=17 END 1120 REPORT:PRINT" at line ";ERL 1130 END