home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 3: The Continuation / 17-Bit_The_Continuation_Disc.iso / amigan / amigan 21 / recursion / butterfield / kts_tour < prev    next >
Encoding:
Text File  |  1994-01-27  |  2.2 KB  |  105 lines

  1. PRINT "Knight's tour 8x8 interactive .. Jim Butterfield"
  2. PRINT "  Just a rough program.. (unpolished)"
  3. PRINT "To 'intervene', press CTL-C"
  4. PRINT " and respond to 'Q?' with the number of the
  5. PRINT "    move you'd like to try elsewhere.."
  6. PRINT
  7. PRINT "Press any key to continue."
  8. WHILE INKEY$=""
  9. WEND
  10. CLS
  11.  
  12.  
  13. ' simple "pictorial" Knight's tour    Jim Butterfield 1988Aug4
  14. DIM Board(8,8),MoveX(65),MoveY(65),MovePos(65)
  15. DIM PositX(8),PositY(8),MoveLim(65)
  16. DATA 1,2
  17. DATA 2,1
  18. DATA 2,-1
  19. DATA 1,-2
  20. DATA -1,-2
  21. DATA -2,-1
  22. DATA -2,1
  23. DATA -1,2
  24. FOR j=1 TO 8
  25.  READ PositX(j),PositY(j)
  26. NEXT j
  27. FOR j=1 TO 8
  28.  FOR k=1 TO 8
  29.   Board(j,k)=0
  30.  NEXT k
  31. NEXT j
  32.    Board(3,2)=99   '**********
  33. Move=0
  34. MoveX(Move)=3:MoveY(Move)=2
  35. GOSUB PlotMove
  36. Move=1
  37. MoveX(Move)=1:MoveY(Move)=1
  38. Board(MoveX(Move),MoveY(Move))=1
  39. ON BREAK GOSUB Smurf
  40. BREAK ON
  41. q=99
  42. GOSUB PlotMove
  43. GOSUB TryNew ' Try move from last position
  44. BREAK OFF
  45. ON BREAK GOSUB 0
  46. END
  47. PlotMove:
  48.  LOCATE MoveX(Move),MoveY(Move)*3
  49.  PRINT Move;
  50. RETURN
  51. WipeMove:
  52.  Board(MoveX(Move),MoveY(Move))=0
  53.  LOCATE MoveX(Move),MoveY(Move)*3
  54.  PRINT "   ";
  55. RETURN
  56. TryNew:
  57.  Move=Move+1
  58.  MoveLim=8
  59.  MovePos(Move)=1
  60.  MoveLim(Move)=8
  61.  x1=MoveX(Move-1):y1=MoveY(Move-1)
  62.  x2=0
  63.  IF ((x1=2 AND y1=6) OR (x1=3 AND y1=7)) AND Board(1,8)=0 THEN x2=1:y2=8
  64.  IF ((x1=6 AND y1=2) OR (x1=7 AND y1=3)) AND Board(8,1)=0 THEN x2=8:y2=1
  65.  IF ((x1=6 AND y1=7) OR (x1=7 AND y1=6)) AND Board(8,8)=0 THEN x2=8:y2=8
  66.  IF x2>0 THEN
  67.   FOR MoveP=1 TO 8
  68.    IF x1+PositX(MoveP)=x2 AND y1+PositY(MoveP)=y2 THEN MovePos(Move)=MoveP:MoveLim(Move)=MoveP
  69.   NEXT MoveP
  70.   'STOP
  71.  END IF
  72.  WHILE MovePos(Move)<MoveLim(Move)+1 AND Move<64
  73.   MoveX(Move)=MoveX(Move-1)+PositX(MovePos(Move))
  74.   MoveY(Move)=MoveY(Move-1)+PositY(MovePos(Move))
  75.   OKx=MoveX(Move)<9 AND MoveX(Move)>0
  76.   OKy=MoveY(Move)<9 AND MoveY(Move)>0
  77.   IF Move=q THEN q=99
  78.   OK = OKx AND OKy AND Move<q
  79.   IF OK THEN OK=OK AND Board(MoveX(Move),MoveY(Move))=0
  80.   IF OK THEN
  81.    Board(MoveX(Move),MoveY(Move))=Move
  82.    GOSUB PlotMove
  83.    GOSUB TryNew
  84.   END IF
  85.    MovePos(Move)=MovePos(Move)+1
  86.  WEND
  87.  IF Move=64 THEN
  88.   LOCATE 10,1
  89.   PRINT "solution"
  90.   STOP
  91.   LOCATE 10,1
  92.   PRINT "        "
  93.  END IF
  94.   Move=Move-1
  95.   GOSUB WipeMove
  96. RETURN
  97.  
  98. Smurf:
  99.  LOCATE 11,1
  100.  INPUT "q";q
  101.  IF q=0 THEN STOP
  102.  LOCATE 11,1
  103.  PRINT "                 "
  104. RETURN
  105.