10 REM PUZZLE 20 REM VERSION 1 30 REM JUNE 84 40 REM ROGER SANDO 50 REM 30 FRENCH ST. NETHERBY 5062 PH.2720710 60 REM 32K 70 REM COLOUR OR B/W 80 REM DOCUMENTATION IN REM'S ONLY 90 REM PAGE=&1900 100 MODE1 101 *OPT1,0 110 VDU23;8202;0;0;0; 120 ENVELOPE1,7,2,1,1,1,1,1,121,-10,-5,-2,120,120 130 RAM=&3000:SIZE=80 140 Q=2:MOV=-1:BLANKX=0:BLANKY=3 150 PROCINIT:PROCassemble 160 PROCINFO 170 PROCload 180 PROCRND 190 PRINT:PRINT 200 REPEAT 210 I=INKEY(1) 220 *FX15,1 230 FORD=0TO12:PROCTIME:NEXT 240 IF I=64 THEN PROCcheck:FORD=0TO255:SOUND(D MOD4)+1,-15,D,1:NEXT:PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);" ";:PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);MOV;:I=0:GOTO220 250 IF I=88AND BLANKX <3 THENPROCMOVE(BLANKX+1,BLANKY):BLANKX=BLANKX+1 260 IF I=90AND BLANKX >0 THENPROCMOVE(BLANKX-1,BLANKY):BLANKX=BLANKX-1 270 IF I=58AND BLANKY >0 THENPROCMOVE(BLANKX,BLANKY-1):BLANKY=BLANKY-1 280 IF I=47AND BLANKY <3 THENPROCMOVE(BLANKX,BLANKY+1):BLANKY=BLANKY+1 290 UNTIL FALSE 300 END 310 DEFPROCMOVE(X,Y) 320 SOUND1,-4,70,3:SOUND2,-4,80,3:SOUND3,-4,60,3 330 X=160*X:Y=640*Y*8 340 LOC=&3000+X+Y 350 ?start=LOC MOD 256:start?1=LOC DIV 256 360 MOV=MOV+1:IF MOV>0 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);MOV; 370 Z=USR(&900):REM BLOCK MOVE 380 ENDPROC 390 PROCINIT 400 DEFPROCINIT:REM BLOCK MOVE 410 start=&76:end=&78:row=&74:col=&75 420 ?start=&0:start?1=&6C:?end=&0:end?1=&6C 430 FORpass=0TO3STEP3 440 P%=&900 450 [ 460 OPT 0 470 LDA start 480 PHA 490 LDA start+1 500 PHA 510 LDA #7 520 STA row 530 .L2 LDA #159 540 STA col 550 LDY col 560 .L1 LDA (start),Y 570 TAX 580 LDA (end),Y 590 STA (start),Y 600 TXA 610 STA (end),Y 620 DEY 630 CPY #&FF 640 BNE L1 650 CLC 660 LDA start 670 ADC #128 680 STA start 690 LDA start+1 700 ADC #2 710 STA start+1 720 CLC 730 LDA end 740 ADC #128 750 STA end 760 LDA end+1 770 ADC #2 780 STA end+1 790 LDY row 800 DEY 810 STY row 820 CPY #&FF 830 BNE L2 840 PLA 850 STA end+1 860 PLA 870 STA end 880 RTS 890 ] 900 NEXT 910 ENDPROC 920 DEFPROCTIME:REM ALTERNATE COLOURS 930 IF A%=1 THEN ENDPROC 940 IF TIME<99 THEN ENDPROC 950 Q=8-Q 960 IF Q=6 THEN W=2 ELSE W=6 970 VDU19,0,Q;0;:VDU19,2,W;0; 980 TIME=0 990 ENDPROC 1000 DEFPROCRND:REM MIX SQUARES 1010 PRINTTAB((BLANKX*10),(BLANKY*8)+1);"HIT SHIFT";:REPEAT UNTIL INKEY(-1):PRINTTAB((BLANKX*10),(BLANKY*8)+1);" "; 1020 FOR T=0 TO 40 1030 SOUND1,-7,RND(255),1 1040 FORD=0TO50:NEXT 1050 BLANKX=RND(4)-1:BLANKY=RND(4)-1 1060 PROCMOVE(BLANKX,BLANKY):MOV=-1 1070 NEXT 1080 PROCMOVE(BLANKX,BLANKY) 1090 ENDPROC 1100 DEFPROCassemble:REM VIDEO RAM CHECKSUM 1110 FORQ%=0TO3STEP3 1120 P%=&C00 1130 [OPT0 1140 .check 1150 LDX #SIZE 1160 STX &72 1170 .calccrc 1180 LDY #0 1190 STY &70 1200 STY &71 1210 .crc1 1220 LDA &71 1230 EOR RAM,Y 1240 STA &71 1250 LDX #8 1260 .crc2 1270 LDA &71 1280 ROL A 1290 BCC crc3 1300 LDA &71 1310 EOR #8 1320 STA &71 1330 LDA &70 1340 EOR #&10 1350 STA &70 1360 .crc3 1370 ROL &70 1380 ROL &71 1390 DEX 1400 BNE crc2 1410 INY 1420 CPY #0 1430 BNE crc1 1440 INC crc1+4 1450 DEC &72 1460 BNE crc1 1470 RTS 1480 ] 1490 NEXT 1500 ENDPROC 1510 DEFPROCcheck 1520 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);" "; 1530 SOUND1,-8,0,60 1540 crc1?3=0:crc1?4=48 1550 CALL check 1560 IF (?&71*&100+?&70)=SUM THEN PROCfin:REPEAT:PROCTIME:UNTIL FALSE 1570 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);"WRONG"; 1580 ENDPROC 1590 DEFPROCfin 1600 SOUND1,1,100,100 1610 SOUND2,1,150,100 1620 SOUND3,1,200,100 1630 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+1);"CORRECT!"; 1640 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+2);"IN ";MOV; 1650 PRINTTAB((BLANKX*10)+1,(BLANKY*8)+3);"MOVES"; 1660 ENDPROC 1670 DEFPROCload:REM LOAD PICTURE OF YOUR CHOICE 1680 VDU19,3,0;0; 1690 VDU19,1,1;0; 1700 VDU19,2,3;0; 1710 VDU19,0,7;0; 1720 CLS 1730 REM 1740 *LOAD Flower 1750 GCOL0,1:COLOUR129 1760 MOVE0,0:MOVE316,0:PLOT85,0,252:PLOT85,316,252 1770 GCOL0,3 1780 PRINTTAB(0,30)" Sando 84":MOVE64,60:DRAW140,60:MOVE160,60:DRAW184,60:MOVE36,28:DRAW184,28 1790 IF ?&3000=225 THEN A%=0 ELSE A%=1 1800 CALL check:SUM=(?&71*&100+?&70) 1810 ENDPROC 1820 DEFPROCINFO 1830 CLS 1840 PRINTTAB(4)"SLIDING BLOCK PUZZLE" 1850 PRINTTAB(4)"-COMPLETE THE PICTURE." 1860 PRINT 1870 PRINT" UP" 1880 PRINT 1890 PRINT" <:>" 1900 PRINT 1910 PRINT"LEFT RIGHT" 1920 PRINT 1930 PRINT" " 1940 PRINT 1950 PRINT" DOWN" 1960 PRINT:PRINT:PRINT" <@> TO CHECK PICTURE" 1970 PRINT:PRINT" TO CONTINUE":REPEAT UNTIL INKEY(-99) 1980 ENDPROC 1990 REM 2000 REM USER MAY ALTER LINES 1680 TO 1780 TO LOAD PICTURE OF YOUR CHOICE 2010 REM 2020 REM A%=0 WILL ENABLE PROCTIME WHICH CAN PERFORM ANY COLOUR CHANGE REQUIRED