Knight's tour: Difference between revisions
Content added Content deleted
m (ANSI Standard BASIC and BBC BASIC moved to the BASIC section.) |
|||
Line 972: | Line 972: | ||
1| 12 25 14 31 10 27 36 61 |
1| 12 25 14 31 10 27 36 61 |
||
</pre> |
</pre> |
||
=={{header|ANSI Standard BASIC}}== |
|||
{{trans|BBC BASIC}} |
|||
[[File:Knights_Tour.gif|right]] |
|||
ANSI BASIC doesn't allow function parameters to be passed by reference so X and Y were made global variables. |
|||
<syntaxhighlight lang="ansi standard basic">100 DECLARE EXTERNAL FUNCTION choosemove |
|||
110 ! |
|||
120 RANDOMIZE |
|||
130 PUBLIC NUMERIC X, Y, TRUE, FALSE |
|||
140 LET TRUE = -1 |
|||
150 LET FALSE = 0 |
|||
160 ! |
|||
170 SET WINDOW 1,512,1,512 |
|||
180 SET AREA COLOR "black" |
|||
190 FOR x=0 TO 512-128 STEP 128 |
|||
200 FOR y=0 TO 512-128 STEP 128 |
|||
210 PLOT AREA:x+64,y;x+128,y;x+128,y+64;x+64,y+64 |
|||
220 PLOT AREA:x,y+64;x+64,y+64;x+64,y+128;x,y+128 |
|||
230 NEXT y |
|||
240 NEXT x |
|||
250 ! |
|||
260 SET LINE COLOR "red" |
|||
270 SET LINE WIDTH 6 |
|||
280 ! |
|||
290 PUBLIC NUMERIC Board(0 TO 7,0 TO 7) |
|||
300 LET X = 0 |
|||
310 LET Y = 0 |
|||
320 LET Total = 0 |
|||
330 DO |
|||
340 LET Board(X,Y) = TRUE |
|||
350 PLOT LINES: X*64+32,Y*64+32; |
|||
360 LET Total = Total + 1 |
|||
370 LOOP UNTIL choosemove(X, Y) = FALSE |
|||
380 IF Total <> 64 THEN STOP |
|||
390 END |
|||
400 ! |
|||
410 EXTERNAL FUNCTION choosemove(X1, Y1) |
|||
420 DECLARE EXTERNAL SUB trymove |
|||
430 LET M = 9 |
|||
440 CALL trymove(X1+1, Y1+2, M, newx, newy) |
|||
450 CALL trymove(X1+1, Y1-2, M, newx, newy) |
|||
460 CALL trymove(X1-1, Y1+2, M, newx, newy) |
|||
470 CALL trymove(X1-1, Y1-2, M, newx, newy) |
|||
480 CALL trymove(X1+2, Y1+1, M, newx, newy) |
|||
490 CALL trymove(X1+2, Y1-1, M, newx, newy) |
|||
500 CALL trymove(X1-2, Y1+1, M, newx, newy) |
|||
510 CALL trymove(X1-2, Y1-1, M, newx, newy) |
|||
520 IF M=9 THEN |
|||
530 LET choosemove = FALSE |
|||
540 EXIT FUNCTION |
|||
550 END IF |
|||
560 LET X = newx |
|||
570 LET Y = newy |
|||
580 LET choosemove = TRUE |
|||
590 END FUNCTION |
|||
600 ! |
|||
610 EXTERNAL SUB trymove(X, Y, M, newx, newy) |
|||
620 ! |
|||
630 DECLARE EXTERNAL FUNCTION validmove |
|||
640 IF validmove(X,Y) = 0 THEN EXIT SUB |
|||
650 IF validmove(X+1,Y+2) <> 0 THEN LET N = N + 1 |
|||
660 IF validmove(X+1,Y-2) <> 0 THEN LET N = N + 1 |
|||
670 IF validmove(X-1,Y+2) <> 0 THEN LET N = N + 1 |
|||
680 IF validmove(X-1,Y-2) <> 0 THEN LET N = N + 1 |
|||
690 IF validmove(X+2,Y+1) <> 0 THEN LET N = N + 1 |
|||
700 IF validmove(X+2,Y-1) <> 0 THEN LET N = N + 1 |
|||
710 IF validmove(X-2,Y+1) <> 0 THEN LET N = N + 1 |
|||
720 IF validmove(X-2,Y-1) <> 0 THEN LET N = N + 1 |
|||
730 IF N>M THEN EXIT SUB |
|||
740 IF N=M AND RND<.5 THEN EXIT SUB |
|||
750 LET M = N |
|||
760 LET newx = X |
|||
770 LET newy = Y |
|||
780 END SUB |
|||
790 ! |
|||
800 EXTERNAL FUNCTION validmove(X,Y) |
|||
810 LET validmove = FALSE |
|||
820 IF X<0 OR X>7 OR Y<0 OR Y>7 THEN EXIT FUNCTION |
|||
830 IF Board(X,Y)=FALSE THEN LET validmove = TRUE |
|||
840 END FUNCTION</syntaxhighlight> |
|||
=={{header|ATS}}== |
=={{header|ATS}}== |
||
Line 2,030: | Line 1,948: | ||
</pre> |
</pre> |
||
=={{header| |
=={{header|BASIC}}== |
||
==={{header|ANSI Standard BASIC}}=== |
|||
{{trans|BBC BASIC}} |
|||
[[File:Knights_Tour.gif|right]] |
|||
ANSI BASIC doesn't allow function parameters to be passed by reference so X and Y were made global variables. |
|||
<syntaxhighlight lang="ansi standard basic">100 DECLARE EXTERNAL FUNCTION choosemove |
|||
110 ! |
|||
120 RANDOMIZE |
|||
130 PUBLIC NUMERIC X, Y, TRUE, FALSE |
|||
140 LET TRUE = -1 |
|||
150 LET FALSE = 0 |
|||
160 ! |
|||
170 SET WINDOW 1,512,1,512 |
|||
180 SET AREA COLOR "black" |
|||
190 FOR x=0 TO 512-128 STEP 128 |
|||
200 FOR y=0 TO 512-128 STEP 128 |
|||
210 PLOT AREA:x+64,y;x+128,y;x+128,y+64;x+64,y+64 |
|||
220 PLOT AREA:x,y+64;x+64,y+64;x+64,y+128;x,y+128 |
|||
230 NEXT y |
|||
240 NEXT x |
|||
250 ! |
|||
260 SET LINE COLOR "red" |
|||
270 SET LINE WIDTH 6 |
|||
280 ! |
|||
290 PUBLIC NUMERIC Board(0 TO 7,0 TO 7) |
|||
300 LET X = 0 |
|||
310 LET Y = 0 |
|||
320 LET Total = 0 |
|||
330 DO |
|||
340 LET Board(X,Y) = TRUE |
|||
350 PLOT LINES: X*64+32,Y*64+32; |
|||
360 LET Total = Total + 1 |
|||
370 LOOP UNTIL choosemove(X, Y) = FALSE |
|||
380 IF Total <> 64 THEN STOP |
|||
390 END |
|||
400 ! |
|||
410 EXTERNAL FUNCTION choosemove(X1, Y1) |
|||
420 DECLARE EXTERNAL SUB trymove |
|||
430 LET M = 9 |
|||
440 CALL trymove(X1+1, Y1+2, M, newx, newy) |
|||
450 CALL trymove(X1+1, Y1-2, M, newx, newy) |
|||
460 CALL trymove(X1-1, Y1+2, M, newx, newy) |
|||
470 CALL trymove(X1-1, Y1-2, M, newx, newy) |
|||
480 CALL trymove(X1+2, Y1+1, M, newx, newy) |
|||
490 CALL trymove(X1+2, Y1-1, M, newx, newy) |
|||
500 CALL trymove(X1-2, Y1+1, M, newx, newy) |
|||
510 CALL trymove(X1-2, Y1-1, M, newx, newy) |
|||
520 IF M=9 THEN |
|||
530 LET choosemove = FALSE |
|||
540 EXIT FUNCTION |
|||
550 END IF |
|||
560 LET X = newx |
|||
570 LET Y = newy |
|||
580 LET choosemove = TRUE |
|||
590 END FUNCTION |
|||
600 ! |
|||
610 EXTERNAL SUB trymove(X, Y, M, newx, newy) |
|||
620 ! |
|||
630 DECLARE EXTERNAL FUNCTION validmove |
|||
640 IF validmove(X,Y) = 0 THEN EXIT SUB |
|||
650 IF validmove(X+1,Y+2) <> 0 THEN LET N = N + 1 |
|||
660 IF validmove(X+1,Y-2) <> 0 THEN LET N = N + 1 |
|||
670 IF validmove(X-1,Y+2) <> 0 THEN LET N = N + 1 |
|||
680 IF validmove(X-1,Y-2) <> 0 THEN LET N = N + 1 |
|||
690 IF validmove(X+2,Y+1) <> 0 THEN LET N = N + 1 |
|||
700 IF validmove(X+2,Y-1) <> 0 THEN LET N = N + 1 |
|||
710 IF validmove(X-2,Y+1) <> 0 THEN LET N = N + 1 |
|||
720 IF validmove(X-2,Y-1) <> 0 THEN LET N = N + 1 |
|||
730 IF N>M THEN EXIT SUB |
|||
740 IF N=M AND RND<.5 THEN EXIT SUB |
|||
750 LET M = N |
|||
760 LET newx = X |
|||
770 LET newy = Y |
|||
780 END SUB |
|||
790 ! |
|||
800 EXTERNAL FUNCTION validmove(X,Y) |
|||
810 LET validmove = FALSE |
|||
820 IF X<0 OR X>7 OR Y<0 OR Y>7 THEN EXIT FUNCTION |
|||
830 IF Board(X,Y)=FALSE THEN LET validmove = TRUE |
|||
840 END FUNCTION</syntaxhighlight> |
|||
==={{header|BBC BASIC}}=== |
|||
{{works with|BBC BASIC for Windows}} |
{{works with|BBC BASIC for Windows}} |
||
[[Image:knights_tour_bbc.gif|right]] |
[[Image:knights_tour_bbc.gif|right]] |