Knight's tour: Difference between revisions

Added BBC BASIC
(Updated D entry)
(Added BBC BASIC)
Line 254:
383 34 97 92 391 32 405 90 393 30 547 88 471 28 505 86 469 26 465 84 369 24 429 82
96 381 384 33 386 91 392 31 406 89 472 29 506 87 470 27 504 85 468 25 430 83 368 23</pre>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
[[Image:knights_tour_bbc.gif|right]]
<lang bbcbasic> 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%))</lang>
 
=={{header|Bracmat}}==