Knight's tour: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 873: | Line 873: | ||
1| 12 25 14 31 10 27 36 61 |
1| 12 25 14 31 10 27 36 61 |
||
</pre> |
</pre> |
||
=={{header|ANSI Standard BASIC}}== |
|||
[[Image:knights_tour_bbc.gif|right]] |
|||
<lang ANSI Standard BASIC>DECLARE EXTERNAL FUNCTION FNchoosemove |
|||
PUBLIC NUMERIC X, Y, TRUE, FALSE |
|||
LET TRUE = -1 |
|||
LET FALSE = 0 |
|||
SET WINDOW 1,512,1,512 |
|||
SET AREA COLOR "black" |
|||
FOR x=0 TO 512-128 STEP 128 |
|||
FOR y=0 TO 512-128 STEP 128 |
|||
PLOT AREA:x+64,y;x+128,y;x+128,y+64;x+64,y+64 |
|||
PLOT AREA:x,y+64;x+64,y+64;x+64,y+128;x,y+128 |
|||
NEXT y |
|||
NEXT x |
|||
SET LINE COLOR "red" |
|||
SET LINE width 4 |
|||
PUBLIC NUMERIC Board(0 TO 7,0 TO 7) |
|||
LET X = 0 |
|||
LET Y = 0 |
|||
LET Total = 0 |
|||
DO |
|||
LET Board(X,Y) = TRUE |
|||
IF Total <> 0 THEN PLOT LINES: X*64+32,Y*64+32; ELSE PLOT LINES: X*64+32,Y*64+32 |
|||
LET Total = Total + 1 |
|||
LOOP UNTIL FNchoosemove = 0 |
|||
IF Total <> 64 THEN STOP |
|||
! REPEAT WAIT 1 : UNTIL FALSE |
|||
END |
|||
EXTERNAL FUNCTION FNchoosemove |
|||
DECLARE EXTERNAL SUB PROCtrymove |
|||
LET M = 9 |
|||
CALL PROCtrymove(X+1, Y+2, M, newx, newy) |
|||
CALL PROCtrymove(X+1, Y-2, M, newx, newy) |
|||
CALL PROCtrymove(X-1, Y+2, M, newx, newy) |
|||
CALL PROCtrymove(X-1, Y-2, M, newx, newy) |
|||
CALL PROCtrymove(X+2, Y+1, M, newx, newy) |
|||
CALL PROCtrymove(X+2, Y-1, M, newx, newy) |
|||
CALL PROCtrymove(X-2, Y+1, M, newx, newy) |
|||
CALL PROCtrymove(X-2, Y-1, M, newx, newy) |
|||
IF M=9 THEN |
|||
LET FNchoosemove = FALSE |
|||
EXIT FUNCTION |
|||
END IF |
|||
LET X = newx |
|||
LET Y = newy |
|||
LET FNchoosemove = TRUE |
|||
END FUNCTION |
|||
EXTERNAL SUB PROCtrymove(X, Y, M, newx, newy) |
|||
DECLARE EXTERNAL FUNCTION FNvalidmove |
|||
IF FNvalidmove(X,Y) = 0 THEN EXIT SUB |
|||
IF FNvalidmove(X+1,Y+2) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X+1,Y-2) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X-1,Y+2) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X-1,Y-2) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X+2,Y+1) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X+2,Y-1) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X-2,Y+1) <> 0 THEN LET N = N + 1 |
|||
IF FNvalidmove(X-2,Y-1) <> 0 THEN LET N = N + 1 |
|||
IF N>M THEN EXIT SUB |
|||
IF N=M AND RND<.5 THEN EXIT SUB |
|||
LET M = N |
|||
LET newx = X |
|||
LET newy = Y |
|||
END SUB |
|||
EXTERNAL FUNCTION FNvalidmove(X,Y) |
|||
IF X<0 OR X>7 OR Y<0 OR Y>7 THEN |
|||
LET FNvalidmove = FALSE |
|||
EXIT FUNCTION |
|||
END IF |
|||
IF Board(X,Y) = TRUE THEN |
|||
LET FNvalidmove = FALSE |
|||
ELSE |
|||
LET FNvalidmove = TRUE |
|||
END IF |
|||
END FUNCTION</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |