home *** CD-ROM | disk | FTP | other *** search
- PRINT "Knight's tour 8x8 interactive .. Jim Butterfield"
- PRINT " Just a rough program.. (unpolished)"
- PRINT "To 'intervene', press CTL-C"
- PRINT " and respond to 'Q?' with the number of the
- PRINT " move you'd like to try elsewhere.."
- PRINT
- PRINT "Press any key to continue."
- WHILE INKEY$=""
- WEND
- CLS
-
-
- ' simple "pictorial" Knight's tour Jim Butterfield 1988Aug4
- DIM Board(8,8),MoveX(65),MoveY(65),MovePos(65)
- DIM PositX(8),PositY(8),MoveLim(65)
- DATA 1,2
- DATA 2,1
- DATA 2,-1
- DATA 1,-2
- DATA -1,-2
- DATA -2,-1
- DATA -2,1
- DATA -1,2
- FOR j=1 TO 8
- READ PositX(j),PositY(j)
- NEXT j
- FOR j=1 TO 8
- FOR k=1 TO 8
- Board(j,k)=0
- NEXT k
- NEXT j
- Board(3,2)=99 '**********
- Move=0
- MoveX(Move)=3:MoveY(Move)=2
- GOSUB PlotMove
- Move=1
- MoveX(Move)=1:MoveY(Move)=1
- Board(MoveX(Move),MoveY(Move))=1
- ON BREAK GOSUB Smurf
- BREAK ON
- q=99
- GOSUB PlotMove
- GOSUB TryNew ' Try move from last position
- BREAK OFF
- ON BREAK GOSUB 0
- END
- PlotMove:
- LOCATE MoveX(Move),MoveY(Move)*3
- PRINT Move;
- RETURN
- WipeMove:
- Board(MoveX(Move),MoveY(Move))=0
- LOCATE MoveX(Move),MoveY(Move)*3
- PRINT " ";
- RETURN
- TryNew:
- Move=Move+1
- MoveLim=8
- MovePos(Move)=1
- MoveLim(Move)=8
- x1=MoveX(Move-1):y1=MoveY(Move-1)
- x2=0
- IF ((x1=2 AND y1=6) OR (x1=3 AND y1=7)) AND Board(1,8)=0 THEN x2=1:y2=8
- IF ((x1=6 AND y1=2) OR (x1=7 AND y1=3)) AND Board(8,1)=0 THEN x2=8:y2=1
- IF ((x1=6 AND y1=7) OR (x1=7 AND y1=6)) AND Board(8,8)=0 THEN x2=8:y2=8
- IF x2>0 THEN
- FOR MoveP=1 TO 8
- IF x1+PositX(MoveP)=x2 AND y1+PositY(MoveP)=y2 THEN MovePos(Move)=MoveP:MoveLim(Move)=MoveP
- NEXT MoveP
- 'STOP
- END IF
- WHILE MovePos(Move)<MoveLim(Move)+1 AND Move<64
- MoveX(Move)=MoveX(Move-1)+PositX(MovePos(Move))
- MoveY(Move)=MoveY(Move-1)+PositY(MovePos(Move))
- OKx=MoveX(Move)<9 AND MoveX(Move)>0
- OKy=MoveY(Move)<9 AND MoveY(Move)>0
- IF Move=q THEN q=99
- OK = OKx AND OKy AND Move<q
- IF OK THEN OK=OK AND Board(MoveX(Move),MoveY(Move))=0
- IF OK THEN
- Board(MoveX(Move),MoveY(Move))=Move
- GOSUB PlotMove
- GOSUB TryNew
- END IF
- MovePos(Move)=MovePos(Move)+1
- WEND
- IF Move=64 THEN
- LOCATE 10,1
- PRINT "solution"
- STOP
- LOCATE 10,1
- PRINT " "
- END IF
- Move=Move-1
- GOSUB WipeMove
- RETURN
-
- Smurf:
- LOCATE 11,1
- INPUT "q";q
- IF q=0 THEN STOP
- LOCATE 11,1
- PRINT " "
- RETURN
-