10 REM _____________________________ 20 REM MULTICOLOUR 30 REM 40 REM (C)1984 A. BLUNDELL 50 REM _____________________________ 60 : 70 ONERRORRUN 80 *KEY10OLD|M|NL.|M 90 MODE1 100 VDU23;8202;0;0;0; 110 PROCtitle 120 REPEAT 130 MODE1 140 VDU23;8202;0;0;0; 150 PROCintro 160 PROCinit 170 MODE2 180 VDU23;8202;0;0;0; 190 VDU28,2,28,17,27 200 REPEAT 210 PROCreset 220 PROCdisplay 230 REPEAT 240 PROCmove 250 PROCcheck 260 UNTILfinish% 270 IFfinish%>0THENPROCwinELSEPRINT"No more moves"; 280 PRINT'" ANOTHER GAME?"; 290 play%=GET 300 UNTIL(play%OR32)<>121 310 VDU26:CLS 320 PRINT'"Anyone else care to try?"; 330 play%=GET 340 UNTIL(play%OR32)<>121 350 MODE6 360 END 370 : 380 REM------------------------------ 390 REM PROCEDURES 400 REM------------------------------ 410 DEFPROCtitle 420 COLOUR2 430 PRINT'''''''TAB(12)"------------"'TAB(12)"MULTICOLOUR."'TAB(12)"------------"'''''''' 440 COLOUR1 450 PRINT" A manipulative puzzle in colour"''''''' 460 COLOUR7 470 PRINTTAB(8)"(c)1984 A. BLUNDELL." 480 wait%=INKEY(500) 490 ENDPROC 500 510 DEFPROCinit 520 DIM r%(25),c%(25),move%(8,8),dots%(5),chk%(5) 530 FORloop%=1TO25 540 READr%(loop%) 550 NEXT 560 FORloop%=1TO25 570 READc%(loop%) 580 NEXT 590 FORloop%=0TO8 600 FORl%=0TO8 610 move%(loop%,l%)=-1 620 NEXT 630 NEXT 640 VDU23,240,&7C7C;&7C7C;&7C7C;&7C7C; 650 VDU23,241,&FFFF;&FFFF;&FFFF;&FFFF; 660 ENDPROC 670 680 DATA1,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7 690 DATA4,3,4,5,2,3,4,5,6,1,2,3,4,5,6,7,2,3,4,5,6,3,4,5,4 700 710 DEFPROCintro 720 CLS 730 COLOUR2 740 PRINT'TAB(12)"------------"'TAB(12)"MULTICOLOUR."'TAB(12)"------------"''' 750 COLOUR1 760 PRINT"'MULTICOLOUR' is played on a diamond - shaped grid using 5 each of 5 different coloured counters."'' 770 COLOUR3 780 PRINT"The counters must be placed on the grid in such a way that no 2 counters of the same colour are next to one another - horizontally, vertically or diagonally."'' 790 COLOUR2 800 PRINT"Can you fit them all in ??"'''' 810 COLOUR3:PRINT"Press <";:COLOUR1:PRINT"RETURN";:COLOUR3 820 INPUT">"null$ 830 ENDPROC 840 850 DEFPROCreset 860 FORloop%=1TO5 870 dots%(loop%)=5 880 NEXT 890 FORloop%=1TO25 900 move%(r%(loop%),c%(loop%))=0 910 NEXT 920 ENDPROC 930 940 DEFPROCdisplay 950 CLG 960 GCOL0,6 970 FORloop%=1TO25 980 PROCbox(r%(loop%),c%(loop%)) 990 NEXT 1000 GCOL0,7 1010 FORloop%=1TO25 1020 PROCletter(r%(loop%),c%(loop%),loop%) 1030 NEXT 1040 VDU5 1050 FORloop%=1TO5 1060 GCOL0,loop% 1070 MOVE970,800-loop%*64 1080 VDU240,240,240,240,240 1090 NEXT 1100 VDU4 1110 GCOL0,4 1120 PLOT4,100,170 1130 PLOT4,1180,170 1140 PLOT85,100,70 1150 PLOT85,1180,70 1160 COLOUR3 1170 COLOUR132 1180 CLS 1190 ENDPROC 1200 1210 DEFPROCbox(y%,x%) 1220 PLOT4,x%*128-96,1000-y%*96+32 1230 PLOT5,x%*128+32,1000-y%*96+32 1240 PLOT5,x%*128+32,1000-y%*96-64 1250 PLOT5,x%*128-96,1000-y%*96-64 1260 PLOT5,x%*128-96,1000-y%*96+32 1270 ENDPROC 1280 1290 DEFPROCletter(y%,x%,letter%) 1300 VDU5 1310 MOVEx%*128-64,1000-y%*96 1320 VDUletter%+64 1330 VDU4 1340 ENDPROC 1350 1360 DEFPROCmove 1370 REPEAT 1380 col%=RND(5) 1390 UNTILdots%(col%)>0 1400 VDU5 1410 MOVE910+64*dots%(col%),800-col%*64 1420 GCOL0,col%+8 1430 VDU240 1440 VDU4 1450 PRINT"your choice? "; 1460 *FX21,0 1470 REPEAT 1480 REPEAT 1490 choice%=GET 1500 UNTILchoice%>64ANDchoice%<90 1510 choice%=choice%-64 1520 UNTILmove%(r%(choice%),c%(choice%))=0 1530 PRINTCHR$(choice%+64) 1540 GCOL0,col% 1550 VDU5 1560 MOVE910+64*dots%(col%),800-col%*64 1570 VDU240 1580 VDU4 1590 ENDPROC 1600 1610 DEFPROCcheck 1620 ok%=1 1630 RESTORE1710 1640 FORloop%=1TO8 1650 READx%,y% 1660 IFmove%(r%(choice%)+x%,c%(choice%)+y%)=col%THENok%=0:loop%=9 1670 NEXT 1680 IFok%THENPROCvalid ELSEPROCinvalid 1690 ENDPROC 1700 1710 DATA0,-1,0,1,-1,-1,-1,0,-1,1,1,-1,1,0,1,1 1720 1730 DEFPROCvalid 1740 VDU5 1750 MOVE910+64*dots%(col%),800-col%*64 1760 GCOL0,0 1770 VDU240 1780 VDU4 1790 GCOL0,col% 1800 PROCletter(r%(choice%),c%(choice%),177) 1810 dots%(col%)=dots%(col%)-1 1820 move%(r%(choice%),c%(choice%))=col% 1830 finish%=1 1840 FORloop%=1TO5 1850 IFdots%(loop%)>0THENfinish%=0 1860 NEXT 1870 CLS 1880 ENDPROC 1890 1900 DEFPROCinvalid 1910 PRINT"*Invalid move*" 1920 SOUND0,-7,2,9 1930 finish%=-1 1940 FORloop%=1TO7 1950 FORl%=1TO7 1960 IFmove%(loop%,l%)<>0THEN2080 1970 FORlp%=1TO5 1980 chk%(lp%)=1 1990 NEXT 2000 RESTORE1710 2010 FORlp%=1TO8 2020 READx%,y% 2030 IFmove%(loop%+x%,l%+y%)>0THENchk%(move%(loop%+x%,l%+y%))=0 2040 NEXT 2050 FORlp%=1TO5 2060 IFchk%(lp%)THENIFdots%(lp%)THENfinish%=0:loop%=8:l%=8 2070 NEXT 2080 NEXT 2090 NEXT 2100 ENDPROC 2110 2120 DEFPROCwin 2130 VDU28,2,29,17,26 2140 CLS 2150 PRINT"CONGRATULATIONS" 2160 PRINT" You made it!"; 2170 ENVELOPE 1,4,1,-1,0,2,1,0,60,-9,0,-4,120,30 2180 FORloop%=0TO1:FORl%=0TO9:SOUND1,1,61+4*l%,5:NEXT:NEXT 2190 ENDPROC