VDU 23,22,256;256;16,16,16,128 VDU 23,23,4;0;0;0; OFF GCOL 4,15 FOR x% = 0 TO 512-128 STEP 128 RECTANGLE FILL x%,0,64,512 NEXT FOR y% = 0 TO 512-128 STEP 128 RECTANGLE FILL 0,y%,512,64 NEXT GCOL 9 DIM Board%(7,7) X% = 0 Y% = 0 Total% = 0 REPEAT Board%(X%,Y%) = TRUE IF Total% DRAW X%*64+32,Y%*64+32 ELSE MOVE X%*64+32,Y%*64+32 Total% += 1 UNTIL NOT FNchoosemove(X%, Y%) IF Total%<>64 STOP REPEAT WAIT 1 : UNTIL FALSE END DEF FNchoosemove(RETURN X%, RETURN Y%) LOCAL M%, newx%, newy% M% = 9 PROCtrymove(X%+1, Y%+2, M%, newx%, newy%) PROCtrymove(X%+1, Y%-2, M%, newx%, newy%) PROCtrymove(X%-1, Y%+2, M%, newx%, newy%) PROCtrymove(X%-1, Y%-2, M%, newx%, newy%) PROCtrymove(X%+2, Y%+1, M%, newx%, newy%) PROCtrymove(X%+2, Y%-1, M%, newx%, newy%) PROCtrymove(X%-2, Y%+1, M%, newx%, newy%) PROCtrymove(X%-2, Y%-1, M%, newx%, newy%) IF M%=9 THEN = FALSE X% = newx% : Y% = newy% = TRUE DEF PROCtrymove(X%, Y%, RETURN M%, RETURN newx%, RETURN newy%) LOCAL N% IF NOT FNvalidmove(X%,Y%) THEN ENDPROC IF FNvalidmove(X%+1,Y%+2) N% += 1 IF FNvalidmove(X%+1,Y%-2) N% += 1 IF FNvalidmove(X%-1,Y%+2) N% += 1 IF FNvalidmove(X%-1,Y%-2) N% += 1 IF FNvalidmove(X%+2,Y%+1) N% += 1 IF FNvalidmove(X%+2,Y%-1) N% += 1 IF FNvalidmove(X%-2,Y%+1) N% += 1 IF FNvalidmove(X%-2,Y%-1) N% += 1 IF N%>M% THEN ENDPROC IF N%=M% IF RND(2)=1 THEN ENDPROC M% = N% newx% = X% : newy% = Y% ENDPROC DEF FNvalidmove(X%,Y%) IF X%<0 OR X%>7 OR Y%<0 OR Y%>7 THEN = FALSE = NOT(Board%(X%,Y%))