81 lines
2.4 KiB
Text
81 lines
2.4 KiB
Text
100 DECLARE EXTERNAL FUNCTION choosemove
|
|
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 LET SW = 512 / 8 ! Width of square
|
|
200 FOR X = 0 TO 6 STEP 2
|
|
210 LET SX = X * SW
|
|
220 FOR Y = 0 TO 6 STEP 2
|
|
230 LET SY = Y * SW
|
|
240 PLOT AREA: SX + SW, SY; SX + 2 * SW, SY; SX + 2 * SW, SY + SW; SX + SW, SY + SW
|
|
250 PLOT AREA: SX, SY + SW; SX + SW, SY + SW; SX + SW, SY + 2 * SW; SX, SY + 2 * SW
|
|
260 NEXT Y
|
|
270 NEXT X
|
|
280 !
|
|
290 SET LINE COLOR "red"
|
|
300 SET LINE WIDTH 6
|
|
310 !
|
|
320 PUBLIC NUMERIC Board(0 TO 7, 0 TO 7)
|
|
330 LET X = 0
|
|
340 LET Y = 0
|
|
350 LET Total = 0
|
|
360 DO
|
|
370 LET Board(X, Y) = TRUE
|
|
380 PLOT LINES: X * SW + 32, Y * SW + 32;
|
|
390 LET Total = Total + 1
|
|
400 LOOP UNTIL ChooseMove(X, Y) = FALSE
|
|
410 IF Total <> 64 THEN STOP
|
|
420 END
|
|
430 !
|
|
440 EXTERNAL FUNCTION ChooseMove(X1, Y1)
|
|
450 DECLARE EXTERNAL SUB TryMove
|
|
460 LET M = 9
|
|
470 CALL TryMove(X1 + 1, Y1 + 2, M, NewX, NewY)
|
|
480 CALL TryMove(X1 + 1, Y1 - 2, M, NewX, NewY)
|
|
490 CALL TryMove(X1 - 1, Y1 + 2, M, NewX, NewY)
|
|
500 CALL TryMove(X1 - 1, Y1 - 2, M, NewX, NewY)
|
|
510 CALL TryMove(X1 + 2, Y1 + 1, M, NewX, NewY)
|
|
520 CALL TryMove(X1 + 2, Y1 - 1, M, NewX, NewY)
|
|
530 CALL TryMove(X1 - 2, Y1 + 1, M, NewX, NewY)
|
|
540 CALL TryMove(X1 - 2, Y1 - 1, M, NewX, NewY)
|
|
550 IF M = 9 THEN
|
|
560 LET ChooseMove = FALSE
|
|
570 ELSE
|
|
580 LET X = NewX
|
|
590 LET Y = NewY
|
|
600 LET ChooseMove = TRUE
|
|
610 END IF
|
|
620 END FUNCTION
|
|
630 !
|
|
640 EXTERNAL SUB TryMove(X, Y, M, NewX, NewY)
|
|
650 !
|
|
660 DECLARE EXTERNAL FUNCTION ValidMove
|
|
670 IF ValidMove(X, Y) <> 0 THEN
|
|
680 IF ValidMove(X + 1, Y + 2) <> 0 THEN LET N = N + 1
|
|
690 IF ValidMove(X + 1, Y - 2) <> 0 THEN LET N = N + 1
|
|
700 IF ValidMove(X - 1, Y + 2) <> 0 THEN LET N = N + 1
|
|
710 IF ValidMove(X - 1, Y - 2) <> 0 THEN LET N = N + 1
|
|
720 IF ValidMove(X + 2, Y + 1) <> 0 THEN LET N = N + 1
|
|
730 IF ValidMove(X + 2, Y - 1) <> 0 THEN LET N = N + 1
|
|
740 IF ValidMove(X - 2, Y + 1) <> 0 THEN LET N = N + 1
|
|
750 IF ValidMove(X - 2, Y - 1) <> 0 THEN LET N = N + 1
|
|
760 IF N < M OR (N = M AND RND >= .5) THEN
|
|
770 LET M = N
|
|
780 LET NewX = X
|
|
790 LET NewY = Y
|
|
800 END IF
|
|
810 END IF
|
|
820 END SUB
|
|
830 !
|
|
840 EXTERNAL FUNCTION ValidMove(X, Y)
|
|
850 LET ValidMove = FALSE
|
|
860 IF X >= 0 AND X <= 7 AND Y >= 0 AND Y <= 7 THEN
|
|
870 IF Board(X, Y) = FALSE THEN LET ValidMove = TRUE
|
|
880 END IF
|
|
890 END FUNCTION
|