75 lines
2.1 KiB
Text
75 lines
2.1 KiB
Text
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
|