# Main Command: Go 4 # Grid Art 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 :order # global values Make "Size 378 Make "CellSize :Size/:Order Make "OffSet :CellSize/2 - :Size/2 Make "Side :CellSize/1.4 Make "Total Power :Order 2 end to gridd :m :n # return X Y screen position Make "X (:N*:CellSize) + :OffSet Make "Y (:M*:CellSize) + :OffSet Output List :X :Y end to square :side # square (side x side) drawn from centre (tx) LocalMake "Half :Side/2 PenUp Back :Half Right 90 Back :Half PenDown Repeat 4 [ Forward :Side Left 90] PenUp Forward :Half Left 90 Forward :Half end To Hue2 :Theta # Output RGB hue list from angle :Theta Make "Red Abs 255*Sin :Theta Make "Green Abs 255*Sin (:Theta+120) Make "Blue Abs 255*Sin (:Theta+240) Output (List :Red :Green :Blue) End to randgrid :order # go to a random grid position SetPos Gridd Random :Order Random :Order end to drawgrid :order # draw M x N array of squares For (List "M 0 :Order-1) [ For (List "N 0 :Order-1) [ SetPos Gridd :M :N # SetH 0 Left 270*((:M+:N-2)/((2*:Order)-2)) Square :Side] ] end to go :order # draw grid of squares New Init :Order DrawGrid :Order end # art procedures to art1 :order # draw random array of colored squares New Init :Order Repeat :Total [ RandGrid :Order SetPC Hue2 Random 360 Square :Side Fill] end to art2 :order # draw random lines New Init :Order SetPC Purple SetPW 3 * Round :CellSize/20 For (List "M 1 :Order-2) [ For (List "N 1 :Order-2) [ SetPos Gridd :N :M SetH 90*Random 4 PenDown Forward :CellSize PenUp] ] end to art3 :order # draw grid, random filled squares New Init :Order Drawgrid :Order SetPC DarkRed Repeat :Total [ RandGrid :Order Fill] end to art4 :order # draw colour swatches New Init :Order Make "ColStep 255/(:Order-1) For (List "M 0 :Order-1) [ For (List "N 0 :Order-1) [ SetPos Gridd :M :N SetPC PenCol :M :N Square :Side Fill] ] end to pencol :m :n Make "Red Round :N*:ColStep Make "Gre Round :M*:ColStep Output (List :Red :Gre 0) end to art5 :order New Init :Order Make "CellList [] Repeat :Total [Make "RanSq Random :Total If Not Member? :RanSq :CellList [ SetPos Gridd (Modulo :RanSq :Order) (Quotient :RanSq :Order) Square :Side SetPC DarkRed Fill SetPC Green Make "CellList Lput :RanSq :CellList]] SetPC Red For (List "YY 1 :Order-2) [ For (List "XX 1 :Order-2) [ Make "Count :XX + :Order*:YY If And And And And (Member? :Count :CellList) (Member? :Count+1 :CellList) (Member? :Count-1 :CellList) (Member? :Count+:Order :CellList) (Member? :Count-:Order :CellList) [SetPos Gridd (Modulo :Count :Order) (Quotient :Count :Order) Fill] ] ] end to art6 :order New Init :Order Repeat :Total [ RandGrid :Order Square :Side SetPC DarkRed Fill SetPC Green] SetPC Red For (List "M 1 :Order-2) [ For (List "N 1 :Order-2) [ SetPos Gridd :M :N If Check4 [PenDown Fill PenUp] ] ] end to check4 # return true if square surrounded by 4 squares Make "C "True If ((First FindColor Pos)=0) [Output "False] Repeat 4 [ Forward :CellSize If ((First FindColor Pos)=0) [Make "C "False Stop] Back :CellSize Right 90] Output :C end