Program to show the paths a knight can take on a board of almost any size.
Content
Source Code
5 GO TO 1200
10 FOR i=1 TO 8
20 LET x=s(c,1)+a(i,1)
30 LET y=s(c,2)+a(i,2)
35 REM This line is to delete a line in the other program
40 IF x>0 AND y>0 AND x<=l AND y<=l THEN IF b$(x,y)=" " THEN GO TO 150
50 NEXT i
60 PRINT AT s(c,1)*2,s(c,2)*3;" "
65 REM This line is to delete a line in the other program
70 LET b$(s(c,1),s(c,2))=" "
80 LET c=c-1
90 IF NOT c THEN STOP
100 INVERSE 1: PRINT AT s(c,1)*2,s(c,2)*3; INK 2;c: INVERSE 0
110 LET p=p-1
120 LET i=s(c,3)
130 NEXT i
140 GO TO 60
150 PRINT AT s(c,1)*2,s(c,2)*3;c: IF p<e THEN INVERSE 1: PRINT AT x*2,y*3; INK 2;p: INVERSE 0
155 IF p=e THEN PRINT AT x*2,y*3; INK 2;p
160 LET s(p,1)=x: LET s(p,2)=y: LET s(c,3)=i
190 LET c=p
200 LET b$(x,y)="X"
210 LET p=p+1
220 IF p<=e THEN GO TO 10
300 PRINT AT 20,0;"Hit a=another solution,r=restart, z=COPY"
310 LET i$=INKEY$
320 IF i$="" THEN GO TO 310
330 PRINT AT 20,0;" "
335 PRINT AT 21,0;" "
340 IF i$="a" THEN GO TO 10
350 IF i$="r" THEN GO TO 800
355 IF i$="z" THEN GO TO 400
360 STOP
400 RANDOMIZE USR 64719: RANDOMIZE USR 64716: GO TO 300
800 CLS
900 PRINT "Enter size of board"
910 INPUT l
920 IF l<1 OR l>8 THEN GO TO 910
930 LET e=l*l
940 LET x=l*3+1
950 CLS
1000 PRINT " 1 2 3 4 5 6 7 8"( TO x)
1010 FOR i=1 TO l
1020 PRINT TAB 2;"+--+--+--+--+--+--+--+--+"( TO x)
1030 PRINT i;TAB 2;"+ + + + + + + + +"( TO x)
1040 NEXT i
1050 PRINT TAB 2;"+--+--+--+--+--+--+--+--+"( TO x)
1060 DIM s(e,3)
1070 DIM b$(l,l)
1080 LET p=2
1090 LET c=1
1100 PRINT "Enter starting location"
1110 FOR i=1 TO 2
1120 PRINT AT i+l*2+2,0;"Enter ";("Row" AND i=1)+("column" AND i=2)
1130 INPUT x
1135 PRINT AT i+l*2+2,14;x
1140 IF x<1 OR x>l THEN GO TO 1130
1145 PRINT AT i+l*2+2,0;" ";
1150 LET s(c,i)=x
1160 NEXT i
1165 PRINT AT l*2+2,0;" "
1170 PRINT AT s(c,1)*2,s(c,2)*3;"1"
1180 LET b$(s(c,1),s(c,2))="X"
1190 GO TO 10
1195 STOP
1200 DIM a(8,2)
1210 LET a(1,1)=-1: LET a(1,2)=-2
1220 LET a(2,1)=-2: LET a(2,2)=-1
1230 LET a(3,1)=-2: LET a(3,2)=1
1240 LET a(4,1)=-1: LET a(4,2)=2
1250 LET a(5,1)=1: LET a(5,2)=2
1260 LET a(6,1)=2: LET a(6,2)=1
1270 LET a(7,1)=2: LET a(7,2)=-1
1280 LET a(8,1)=1: LET a(8,2)=-2
1290 GO TO 800
9000 SAVE "Knighto1": PRINT "Rewind & press ENTER to VERIFY.": VERIFY "Knighto1": PRINT "Knighto1 Verified."