10 REM ********************** 20 REM Numerical Slide Puzzle 30 REM By Tim Surtell 40 REM ********************** 50 REM NC200 Version 1.3 : 13/1/00 60 REM Downloaded from Tim's Amstrad NC Users' Site 70 REM http://www.ncus.org.uk 80 CLS 90 PRINTTAB(1,14)CHR$17"Numerical Slide Puzzle "CHR$18"Use the ";:VDU27,24,27,25,27,27,27,26:PRINT" keys and ";:VDU27,255:PRINT" to slide the blocks into order." 100 MOVE190,22:PLOT101,290,122 110 FORI=0 TO 4:MOVE192,I*24+24:PLOT7,288,I*24+24:MOVEI*24+192,24:PLOT7,I*24+192,120:NEXT 120 DIM grid(5,5) 130 FOR I=1 TO 15 140 REPEAT 150 X=RND(4):Y=RND(4) 160 IF grid(X,Y)=0 grid(X,Y)=I:PRINTTAB(X*4+29,15-(Y*3+1))CHR$14;I;CHR$15 170 UNTIL grid(X,Y)=I 180 NEXT 190 FOR Y=1 TO 4 200 FOR X=1 TO 4 210 IF grid(X,Y)=0 CX=X:CY=Y 220 NEXT 230 NEXT 240 grid(CX,CY)=99 250 MOVECX*24+169,CY*24+1:PLOT103,CX*24+191,CY*24+23 260 MX=0:MY=0:XG=0:YG=0:LB=FALSE:RB=FALSE 270 ONERRORIF ERR=202 GOTO340 ELSE CLOSE#0:REPORT:PRINT" at line ";ERL:END 280 MOVECX*24+171,CY*24+3:PLOT22,CX*24+171,CY*24+21:MOVECX*24+173,CY*24+21:PLOT22,CX*24+188,CY*24+21:MOVECX*24+189,CY*24+21:PLOT22,CX*24+189,CY*24+3:MOVECX*24+187,CY*24+3:PLOT22,CX*24+172,CY*24+3 290 K=OPENUP("COM:") 300 REPEAT 310 KEY=INKEY(1) 320 IF KEY<>-1 PROCevent 330 UNTIL EOF#K=FALSE 340 B1=BGET#K 350 IF B1 AND 64 GOTO360 ELSE GOTO340 360 B2=BGET#K:B3=BGET#K 370 XI=(63 AND B2):YI=(63 AND B3) 380 IF B1 AND 8 YG=YG+(64-YI) ELSE YG=YG-YI 390 IF B1 AND 2 XG=XG-(64-XI) ELSE XG=XG+XI 400 IF EOF#K GOTO420 410 GOTO340 420 IF B1 AND 32 LB=TRUE:PROCevent ELSE IF LB=TRUE LB=FALSE:PROCevent 430 IF B1 AND 16 RB=TRUE:PROCevent ELSE IF RB=TRUE RB=FALSE:PROCevent 440 MX=MX+(XG):MY=MY+(YG) 450 PRINTTAB(0,0)MX;" " 460 IF LB KEY=13:PROCevent 470 IF MX<-4 KEY=242 :PROCevent:MX=0:MY=0 480 IF MX>4 KEY=243 PROCevent:MX=0:MY=0 490 IF MY<-4 KEY=241 PROCevent:MX=0:MY=0 500 IF MY>4 KEY=240 PROCevent:MX=0:MY=0 510 XG=0:YG=0 520 GOTO300 530 DEF PROCevent 540 MOVECX*24+171,CY*24+3:PLOT22,CX*24+171,CY*24+21:MOVECX*24+173,CY*24+21:PLOT22,CX*24+188,CY*24+21:MOVECX*24+189,CY*24+21:PLOT22,CX*24+189,CY*24+3:MOVECX*24+187,CY*24+3:PLOT22,CX*24+172,CY*24+3 550 IF KEY=240 AND CY<4 CY=CY+1 560 IF KEY=241 AND CY>1 CY=CY-1 570 IF KEY=242 AND CX>1 CX=CX-1 580 IF KEY=243 AND CX<4 CX=CX+1 590 IF KEY=13 OR KEY=32 PROCslide 600 MOVECX*24+171,CY*24+3:PLOT22,CX*24+171,CY*24+21:MOVECX*24+173,CY*24+21:PLOT22,CX*24+188,CY*24+21:MOVECX*24+189,CY*24+21:PLOT22,CX*24+189,CY*24+3:MOVECX*24+187,CY*24+3:PLOT22,CX*24+172,CY*24+3 610 ENDPROC 620 DEF PROCslide 630 SX=0:SY=0 640 IF grid(CX,CY+1)=99 SX=CX:SY=CY+1:REM NORTH 650 IF grid(CX,CY-1)=99 SX=CX:SY=CY-1:REM SOUTH 660 IF grid(CX+1,CY)=99 SX=CX+1:SY=CY:REM EAST 670 IF grid(CX-1,CY)=99 SX=CX-1:SY=CY:REM WEST 680 IF SX=0 SOUND1,0,255,1:ENDPROC 690 OX=SX-CX:OY=SY-CY 700 I=0 710 REPEAT 720 MOVECX*24+169+(I*OX),CY*24+1+(I*OY):PLOT103,CX*24+191+(I*OX),CY*24+23+(I*OY) 730 I=I+4 740 MOVECX*24+169+(I*OX),CY*24+1+(I*OY):PLOT101,CX*24+191+(I*OX),CY*24+23+(I*OY) 750 UNTIL I=24 760 grid(SX,SY)=grid(CX,CY):grid(CX,CY)=99 770 PRINTTAB(SX*4+29,15-(SY*3+1))CHR$14;grid(SX,SY);CHR$15 780 finish=TRUE 790 I=1 800 FOR Y=1 TO 4 810 FOR X=1 TO 4 820 IF grid(X,Y)<>I finish=FALSE:X=4:Y=4 830 I=I+1 840 NEXT 850 NEXT 860 IF finish=TRUE PRINTTAB(1,1)CHR$17"Congratulations!"CHR$18TAB(1,2)"You have completed the game."':END 870 ENDPROC