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}}== |
|||
ANSI BASIC only passes function parameters by value so X and Y were made global variables. |
|||
[[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 |
|||
400 EXTERNAL FUNCTION FNchoosemove |
|||
410 DECLARE EXTERNAL SUB PROCtrymove |
|||
420 LET M = 9 |
|||
430 CALL PROCtrymove(X+1, Y+2, M, newx, newy) |
|||
440 CALL PROCtrymove(X+1, Y-2, M, newx, newy) |
|||
450 CALL PROCtrymove(X-1, Y+2, M, newx, newy) |
|||
460 CALL PROCtrymove(X-1, Y-2, M, newx, newy) |
|||
470 CALL PROCtrymove(X+2, Y+1, M, newx, newy) |
|||
480 CALL PROCtrymove(X+2, Y-1, M, newx, newy) |
|||
490 CALL PROCtrymove(X-2, Y+1, M, newx, newy) |
|||
500 CALL PROCtrymove(X-2, Y-1, M, newx, newy) |
|||
510 IF M=9 THEN |
|||
520 LET FNchoosemove = FALSE |
|||
530 EXIT FUNCTION |
|||
540 END IF |
|||
550 LET X = newx |
|||
560 LET Y = newy |
|||
570 LET FNchoosemove = TRUE |
|||
580 END FUNCTION |
|||
590 |
|||
600 EXTERNAL SUB PROCtrymove(X, Y, M, newx, newy) |
|||
610 |
|||
620 DECLARE EXTERNAL FUNCTION FNvalidmove |
|||
630 IF FNvalidmove(X,Y) = 0 THEN EXIT SUB |
|||
640 IF FNvalidmove(X+1,Y+2) <> 0 THEN LET N = N + 1 |
|||
650 IF FNvalidmove(X+1,Y-2) <> 0 THEN LET N = N + 1 |
|||
660 IF FNvalidmove(X-1,Y+2) <> 0 THEN LET N = N + 1 |
|||
670 IF FNvalidmove(X-1,Y-2) <> 0 THEN LET N = N + 1 |
|||
680 IF FNvalidmove(X+2,Y+1) <> 0 THEN LET N = N + 1 |
|||
690 IF FNvalidmove(X+2,Y-1) <> 0 THEN LET N = N + 1 |
|||
700 IF FNvalidmove(X-2,Y+1) <> 0 THEN LET N = N + 1 |
|||
710 IF FNvalidmove(X-2,Y-1) <> 0 THEN LET N = N + 1 |
|||
720 IF N>M THEN EXIT SUB |
|||
730 IF N=M AND RND<.5 THEN EXIT SUB |
|||
740 LET M = N |
|||
750 LET newx = X |
|||
760 LET newy = Y |
|||
770 END SUB |
|||
780 |
|||
790 EXTERNAL FUNCTION FNvalidmove(X,Y) |
|||
800 IF X<0 OR X>7 OR Y<0 OR Y>7 THEN |
|||
810 LET FNvalidmove = FALSE |
|||
820 EXIT FUNCTION |
|||
830 END IF |
|||
840 IF Board(X,Y) = TRUE THEN |
|||
850 LET FNvalidmove = FALSE |
|||
860 ELSE |
|||
870 LET FNvalidmove = TRUE |
|||
880 END IF |
|||
890 END FUNCTION</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |
||
{{libheader|GDIP}} |
{{libheader|GDIP}} |