# Main Command: go # Knight's Tour by Guy Walker # www.logoarts.co.uk to new # set default screen, pen and turtle ResetAll SetScreenSize [400 400] HideTurtle SetSC Black SetPC Green SetPS 1 PenUp end to init # global values GlobalMake "Order 4 GlobalMake "CellSize (First ScreenSize) /:Order GlobalMake "OffSet ((First ScreenSize) -:CellSize) /2 end to screenpos :cellx :celly :cellz # return X Y Z screen position # use global values of CellSize and Offset Make "PosX (:CellX*:CellSize) -:OffSet Make "PosY (:CellY*:CellSize) -:OffSet Make "PosZ (:CellZ*:CellSize) -:OffSet Output (List :PosX :PosY :PosZ) end to drawgrid # draw X by Y by Z array of cubes For (List "CellX 0 :Order-1) [ For (List "CellY 0 :Order-1) [ For (List "CellZ 0 :Order-1) [ SetPos ScreenPos :CellX :CellY :CellZ Cube :CellSize/4 ] ] ] end to cube :side # draw a skeleton cube from center, tp Right 45 Back :Side/1.414 Left 45 Up 90 Back :Side/2 PenDown Repeat 2 [Repeat 2 [ LineStart Forward :Side Down 90 Forward :Side Down 90 Forward :Side LineEnd Back :Side Right 90] Left 180] PenUp Forward :Side/2 Down 90 Right 45 Forward :Side/1.414 Left 45 end to tour # knight's 64 position tour, xyz Make "Tour [003 022 030 132 120 101 113 211 203 222 230 332 320 301 313 321 300 312 333 231 210 202 223 121 100 112 133 031 010 002 023 103 122 130 111 213 232 220 201 303 322 330 311 323 331 310 302 200 212 233 221 123 131 110 102 000 012 033 021 013 001 020 032 011] SetPW 4 SetPC Red PenUp SetPos ScreenPos 0 1 1 PenDown LineStart Repeat 64 [ Make "PosXYZ Item RepCount :Tour Make "Hor Item 1 :PosXYZ Make "Ver Item 2 :PosXYZ Make "Dep Item 3 :PosXYZ SetPos ScreenPos :Hor :Ver :Dep] LineEnd end to go New Perspective CS PenUp HideTurtle SetSC Black SetPC Green Init DrawGrid Tour Wait 30 Message [View3D?] View3D end