Knight's tour: Difference between revisions
Content added Content deleted
Line 876:
[[Image:knights_tour_bbc.gif|right]]
<lang ANSI Standard BASIC>100 DECLARE EXTERNAL FUNCTION FNchoosemove
110
120 PUBLIC NUMERIC X, Y, TRUE, FALSE
130 LET TRUE = -1
140 LET FALSE = 0
150
160 SET WINDOW 1,512,1,512
170 SET AREA COLOR "black"
180 FOR x=0 TO 512-128 STEP 128
190 FOR y=0 TO 512-128 STEP 128
200 PLOT AREA:x+64,y;x+128,y;x+128,y+64;x+64,y+64
210 PLOT AREA:x,y+64;x+64,y+64;x+64,y+128;x,y+128
220 NEXT y
230 NEXT x
240
250 SET LINE COLOR "red"
260 SET LINE width 4
270
280 PUBLIC NUMERIC Board(0 TO 7,0 TO 7)
290 LET X = 0
300 LET Y = 0
310 LET Total = 0
320 DO
330 LET Board(X,Y) = TRUE
340 IF Total <> 0 THEN PLOT LINES: X*64+32,Y*64+32; ELSE PLOT LINES: X*64+32,Y*64+32
350 LET Total = Total + 1
360 LOOP UNTIL FNchoosemove = 0
370 IF Total <> 64 THEN STOP
380 END▼
390
▲END
410 DECLARE EXTERNAL
420 LET M = 9▼
DECLARE EXTERNAL SUB PROCtrymove▼
▲LET M = 9
440 CALL PROCtrymove(X+1, Y
450 CALL PROCtrymove(X
460 CALL PROCtrymove(X-1, Y
470 CALL PROCtrymove(X
480 CALL PROCtrymove(X+2, Y
490 CALL PROCtrymove(X
500 CALL PROCtrymove(X-2, Y
510 IF M=9 THEN ▼
▲CALL PROCtrymove(X-2, Y-1, M, newx, newy)
520 LET FNchoosemove = FALSE▼
▲IF M=9 THEN
530 EXIT FUNCTION▼
▲ LET FNchoosemove = FALSE
540 END IF▼
▲ EXIT FUNCTION
550 LET X = newx
▲END IF
560 LET
570 LET
580 END FUNCTION▼
590
▲END FUNCTION
610
620 DECLARE EXTERNAL FUNCTION FNvalidmove
640 IF FNvalidmove(X+1,Y+2)
650 IF FNvalidmove(X+1,Y
660 IF FNvalidmove(X
670 IF FNvalidmove(X-1,Y
680 IF FNvalidmove(X
690 IF FNvalidmove(X+2,Y
700 IF FNvalidmove(X
710 IF FNvalidmove(X-2,Y
720 IF
730 IF N
750 LET
760 LET
770 END SUB▼
▲LET newy = Y
780
▲END SUB
790 EXTERNAL FUNCTION FNvalidmove(X,Y)
800 IF X<0 OR X>7 OR Y<0 OR Y>7 THEN ▼
▲EXTERNAL FUNCTION FNvalidmove(X,Y)
810 LET FNvalidmove = FALSE▼
▲IF X<0 OR X>7 OR Y<0 OR Y>7 THEN
820 EXIT FUNCTION▼
▲ LET FNvalidmove = FALSE
830 END IF▼
▲ EXIT FUNCTION
840 IF Board(X,Y) = TRUE THEN▼
▲END IF
850 LET FNvalidmove = FALSE▼
▲IF Board(X,Y) = TRUE THEN
860 ELSE▼
▲ LET FNvalidmove = FALSE
870 LET FNvalidmove = TRUE▼
▲ELSE
880 END IF▼
▲ LET FNvalidmove = TRUE
890 END FUNCTION</lang>▼
▲END IF
▲END FUNCTION</lang>
=={{header|AutoHotkey}}==
|