10 REM *************** 20 REM Boulder Game 30 REM By Mark Ray 40 REM *************** 50 REM NC100/200 Version : 5/96 60 REM Downloaded from Tim's Amstrad NC User's Site 70 REM http://www.ncus.org.uk 80 REM Originally from the Amstrad Notepad Users' Web 90 CLS:PRINT''SPC(30);"B O U L D E R"''SPC(31);"by Mark Ray" 100 LastLevel=1:HI=20:HI$="Mark Ray":DIM C$(15),M%(139) 110 FORK=0TO14:READT:C$(K)=CHR$(27)+CHR$(T):NEXT 120 REPEAT:RESTORE650:D=FALSE:F=FALSE:SC=0:LEV=1:REPEAT:READX,Y:READMX,MY 130 PROCgetboard:PROCdisplay 140 REM** Main loop *** 150 REPEAT:PROCmymove:PROChismove:IF MX=X AND MY=Y THEN D=TRUE 160 UNTIL D OR F 170 FOR I=(-200*D)TO(-200*F)STEP4*(D-F):SOUND 0,-15,I,1:NEXT 180 F=FALSE:LEV=LEV+1:UNTIL D OR(LEV>LastLevel):UNTIL FNnomore 190 END 200 DEFPROCgetboard:LOCALK,T,T$ 210 PRINT TAB(15,7);"Level ";LEV;" - Get Ready "; 220 FORK=0TO6:READT$ 230 PRINT "...";STR$(7-K); 240 FORT=1TO80:PROCput(T-1,K,(ASC(MID$(T$,T,1))-64)):NEXT 250 NEXT:ENDPROC 260 DEFPROCmymove:LOCALK,G,W,WX,WY 270 G=GET:WX=X-(G=88)+(G=90):WY=Y-(G=77)+(G=75) 280 IF WX>79 OR WX<0 OR WY<0 OR WY>6 THEN WX=X:WY=Y 290 W=FNmap(WX,WY):IF W=12 OR W=9 OR W=8 THEN D=TRUE 300 IFW=14ANDFNmap(WX+(WX-X),WY)=4THENPROCchange(WX,WY,4):PROCchange(WX+(WX-X),WY,14):W=4:PROCrock(WX+(WX-X),WY+1) 310 IF W=10 THEN F=TRUE 320 IF W=11 THEN PROCchange(WX,WY,INT(RND(14)+1)) 330 IF W=7 THEN SOUND 0,-15,RND(300),5:SOUND 1,-15,RND(300),5:SC=SC+10 340 IF W=5 OR W=6 THEN VDU 7:SC=SC+2-3*(W=5) 350 IF W<8 THEN PROCchange(X,Y,4):PROCchange(WX,WY,0):PROCrock(X,Y):PROCrock(X-(WX-X),Y-(WX=X)):PROCrock(X-(WX-X),Y-(WX<>X)):X=WX:Y=WY 360 ENDPROC 370 DEFPROCrock(RX,RY) 380 IF RY<1 OR RY>6 OR RX<0 OR RX>79 THEN GOTO 430 390 IF FNmap(RX,RY-1)=14 AND FNmap(RX,RY)=4 THEN PROCchange(RX,RY-1,4):PROCchange(RX,RY,14):PROCrock(RX,RY+1):PROCrock(RX,RY-1) 400 IF RX>0 AND FNmap(RX,RY-1)=14 AND FNmap(RX,RY)=14 AND FNmap(RX-1,RY)=4 AND FNmap(RX-1,RY-1)=4 THEN PROCchange(RX,RY-1,4):PROCchange(RX-1,RY,14):PROCrock(RX-1,RY+1):PROCrock(RX,RY-1) 410 IF RX<79 THEN IF FNmap(RX,RY-1)=14 AND FNmap(RX,RY)=14 AND FNmap(RX+1,RY)=4 AND FNmap(RX+1,RY-1)=4 THEN PROCchange(RX,RY-1,4):PROCchange(RX+1,RY,14):PROCrock(RX+1,RY+1):PROCrock(RX,RY-1) 420 IF FNmap(RX,RY-1)=14 AND FNmap(RX,RY)=0 THEN PROCchange(RX,RY-1,4):PROCchange(RX,RY,14):D=TRUE 430 ENDPROC 440 DEFPROChismove:LOCALW,WX,WY 450 WX=MX-(MXX):WY=MY-(MYY) 460 IF WY<0 OR WY>6 THEN WY=MY 470 IF WX<0 OR WX>79 THEN WX=MX 480 W=FNmap(WX,WY):IF W=4 OR W=0 THEN PROCchange(MX,MY,4):PROCchange(WX,WY,12):MX=WX:MY=WY 490 ENDPROC 500 DEFFNnomore 510 CLS:PRINT'SPC(25);"You scored ";SC' 520 IF SC>HI THEN PRINT SPC(10);"A new hi-score! ";:INPUT"Enter your name:";HI$:HI=SC ELSE PRINT SPC(20)"Current hi-score ";HI;" by ";HI$ 530 PRINT'SPC(25);"Another game (Y/N)?":=(GET$="N") 540 DEFFNmap(X%,Y%):=(M%(Y%*20+X%DIV4)DIV(16^(X%MOD4)))MOD16 550 DEFPROCput(X%,Y%,C%):LOCAL T% 560 T%=Y%*20+X%DIV4:M%(T%)=M%(T%)-((FNmap(X%,Y%)-C%)*(16^(X%MOD4))) 570 ENDPROC 580 DEFPROCdisplay:LOCALI% 590 CLS:FORI%=0TO559:PRINTC$(FNmap(I%MOD80,I%DIV80));:NEXT 600 ENDPROC 610 DEFPROCchange(X%,Y%,C%) 620 PROCput(X%,Y%,C%):PRINTTAB(X%,Y%);C$(C%); 630 ENDPROC 640 DATA1,176,177,178,32,3,4,14,21,229,15,233,2,219,79 650 DATA 0,0,16,6 660 DATA @AAAAAAAAAAAANAAAAAAAAAAAAMEMFBNMDDDDDDDDDDDDDMNNDDNNDDNNDDDMFDDDDDMDHMDDDDDDIGM 670 DATA AMMMMMMMMMMMMNMMMMMMMMMMAMMBMMBNMCMMDMMMMMDMMMMBBFFFFFFFFFBBMMMMDMIDDMEDMDMMDFMH 680 DATA AAAAAAAAAAAAAEDMGDDDDDDDDDMBBBBMMDDMDMDMGNDMDNADMDDDDDDDDDMBBNNMDDMDMEMDDDDIDMDD 690 DATA AMMMMMMMMMMMMDDMDDKKMKKDDDMBMMBBDDDMGMFMGNGMDNADMDDNDDDDNDMBNNNMDDHDDDDHMMDMDMDJ 700 DATA ACCCCCCCCCCCFMGMDDKMDMKDDDMBNMBMDMMMDMDMGMDMEAADMDDDDDDNDDMDAAACDMDDMDDMMDDHDDDD 710 DATA AMMMMMMMMMMMMMAMDDKMDDMDDDMBNMMMDDDMDMDMMMDMMMMDMDNDNDNDDDMDMMMMDDDMEIDMDDMEMDME 720 DATA AAAAAAAAAAAAAAAMLDDDDDDDDDBBMMDDDMDMDDDDDDDDDDCDMGDDDGDDDGMFMFDDDMDFMMDDDMEEMDFM