Program to show the paths a knight can take on a board of almost any size.
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."