60 lines
1.8 KiB
Text
60 lines
1.8 KiB
Text
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%))
|