10 REM OCTAGRAM 20 REM by M.Bobrowski 11'93 30 : 40 MODE 1:VDU 19,2,2;0; 50 DIM X%(8),Y%(8),L$(8) 60 PROCchars:PROCoctagram 70 ON ERROR IF ERR=17 AND INKEY-1 THEN 130 80 PROCinit:SOUND 1,-10,200,1 90 M%=0:REPEAT:PROCinput:PROCmove:M%=M%+1:UNTIL K$=" 12345678" 100 CLS:PRINT"You have done it in ";M%'"moves. ";:PROCtune 110 COLOUR 2:PRINT"Again (Y/N) ? ";:REPEAT:*FX15,1 120 G$=GET$:UNTIL INSTR("YyNn",G$):IF INSTR("Yy",G$) THEN 80 130 MODE 7:END 140 : 150 DEF PROCinit 160 XX=RND(-TIME):K$="12345678":FOR J%=1 TO 10 170 A%=RND(8):REPEAT:B%=RND(8):UNTIL A%<>B% 180 IF A%>B% K$=LEFT$(K$,B%-1)+MID$(K$,A%,1)+MID$(K$,B%+1,A%-B%-1)+MID$(K$,B%,1)+MID$(K$,A%+1) ELSE K$=LEFT$(K$,A%-1)+MID$(K$,B%,1)+MID$(K$,A%+1,B%-A%-1)+MID$(K$,A%,1)+MID$(K$,B%+1) 190 NEXT:K$=" "+K$ 200 FOR I%=0 TO 8:PROCdisp(I%,I%,MID$(K$,I%+1,1)) 210 NEXT:VDU 28,7,31,32,28,17,129,12,28,8,30,31,29,17,128,12:ENDPROC 220 : 230 DEF PROCdisp(K%,J%,N$) 240 VDU 5:MOVE X%(K%),Y%(K%):IF K%=0 OR K% MOD2=1 GCOL 0,1 ELSE GCOL 0,2 250 VDU 237:MOVE X%(J%),Y%(J%):GCOL 0,0:PRINT N$:VDU 4:ENDPROC 260 : 270 DEF PROCinput 280 REPEAT:CLS:COLOUR 2:PRINTTAB(6)"Moves : ";M%:COLOUR 3:PRINTTAB(5)"Your move ? ";:*FX15,1 290 M$=GET$:N%=INSTR(K$,M$)-1:IF FNlink SOUND 1,-10,200,1:UNTIL TRUE:L%=INSTR(K$,M$) ELSE COLOUR 2:PRINTM$'TAB(5)"Illegal move ! ";:SOUND1,-10,10,10:XX=INKEY150:UNTIL FALSE 300 ENDPROC 310 : 320 DEF FNlink:IF N%<0 OR N%>8 THEN =FALSE 330 V%=INSTR(K$," ")-1:V$=STR$V%:=INSTR(L$(N%),V$) 340 : 350 DEF PROCmove 360 PROCdisp(N%,V%,M$) 370 V%=V%+1:IF L%>V% K$=LEFT$(K$,V%-1)+MID$(K$,L%,1)+MID$(K$,V%+1,L%-V%-1)+" "+MID$(K$,L%+1) ELSE K$=LEFT$(K$,L%-1)+" "+MID$(K$,L%+1,V%-L%-1)+MID$(K$,L%,1)+MID$(K$,V%+1) 380 ENDPROC 390 : 400 DEF PROCoctagram 410 MOVE 256,576:FOR A=0 TO 6*PI STEP 3*PI/4 420 DRAW INT(640.5+384*COSA),INT(576.5+384*SINA) 430 NEXT:MOVE 640,192:DRAW 640,960 440 VDU 5:FOR I%=0 TO 8:READ X%(I%),Y%(I%),L$(I%):IF I%=0 OR I%MOD2=1 K%=1 ELSE K%=2 450 PROCcounter(X%(I%),Y%(I%),K%) 460 NEXT:VDU 4 470 ENDPROC 480 : 490 DATA 624,588,1357,624,972,046,896,860,57,1008,588,068,896,316,17,624,204,028,352,316,13,240,588,024,352,860,35 500 : 510 DEF PROCcounter(X%,Y%,K%) 520 MOVE X%-32,Y%+32:GCOL 0,K%:PRINT W$:MOVE X%-32,Y%+32:GCOL 0,3:PRINT Z$:MOVE X%+4,Y%+36:PLOT 1,24,0:MOVE X%+64,Y%:PLOT 1,0,-24:ENDPROC 530 : 540 DEF PROCchars 550 VDU 23,224,1537;4104;8224;16448;23,225,128;0;0;0;23,226,12480;1032;514;257;23,227,32896;32896;32896;16512;23,228,0;0;0;0;23,229,0;0;0;256;23,230,8256;4128;1544;1;23,231,0;0;0;32640;23,232,513;1026;12296;192; 560 VDU 23,233,256;3847;7967;16191;23,234,65407;65535;65535;65535;23,235,49152;63728;64764;65278;23,236,32639;32639;32639;16255;23,237,65535;65535;65535;65535;23,238,65535;65535;65535;65279;23,239,7999;3871;263;0; 570 VDU 23,240,65535;65535;65535;127;23,241,64766;63740;49392;0; 580 B$=CHR$10+CHR$8+CHR$8+CHR$8:W$=CHR$233+CHR$234+CHR$235+B$+CHR$236+CHR$237+CHR$238+B$+CHR$239+CHR$240+CHR$241:Z$=CHR$224+CHR$225+CHR$226+B$+CHR$227+CHR$228+CHR$229+B$+CHR$230+CHR$231+CHR$232:ENDPROC 590 : 600 DEF PROCtune 610 RESTORE 630:FOR I%=1 TO 16:READ P%,D%:SOUND 1,-10,P%,D%:SOUND 1,0,0,0:NEXT:ENDPROC 620 : 630 DATA 89,8,93,6,93,10,97,6,97,10,101,4,85,4,89,4,73,12,61,8,93,8,89,8,73,4,53,4,69,4,73,12