;;;; SUMMARY ;; Fix the Minotaur's plumbing! ;;;; COPYRIGHT ;; Minos Plumber Copyright (C) 2006 James P. Steiner ;; ;; ;; globals [ mx my click? hovered cursor stack traveller last-click this-click dbl-click? pipe-shapes pipe-ports pipe-port-coords pipe-port-map-ports pipe-port-map-shape pipe-port-map-rotation pipes-min-pxcor pipes-min-pycor pipes-max-pxcor pipes-max-pycor pipe-patches stop? game-time clock-running? game-over? best-time fill-color connected-color open-color turn-color ] breed [ pipes pipe ] breed [ mazers mazer ] breed [ logos logo ] breed [ cursors a-cursor ] pipes-own [ turning? new-heading ports touching-source? ] to startup setup end to setup let temp-bt best-time ca set best-time temp-bt set pipe-shapes [ ["pipe-0-null"] ["pipe-1-end" "pipe-1-drain" ] [ "pipe-bend" "pipe-bend-loop" "pipe-bend-oxbow" ] [ "pipe-2-thru" "pipe-2-wide" "pipe-2-valve" "pipe-2-ess" "pipe-2-thin" ] [ "pipe-3-tee" "pipe-3-why" "pipe-3-vee" "pipe-3-arr" ] [ "pipe-4-cross" "pipe-4-ex" "pipe-4-lap" ] ] set pipe-ports [ [] [ 0 ] [ 0 2 ] [ 0 1 ] [ 0 1 3 ] [ 0 1 2 3 ] ] ;; map port configurations to shapes set pipe-port-map-ports [ [ ] [0] [1] [2] [3] [0 1] [1 2] [2 3] [0 3] [0 2] [1 3] [0 1 2] [1 2 3] [0 2 3] [ 0 1 3 ] [0 1 2 3 ] ] set pipe-port-map-shape [ 0 1 1 1 1 2 2 2 2 3 3 4 4 4 4 5 ] set pipe-port-map-rotation [ 0 0 1 2 3 0 1 2 3 0 1 1 2 3 0 0 ] set pipe-port-coords [ [ 0 1 ] [ 1 0 ] [ 0 -1 ] [ -1 0 ] ] set connected-color white set open-color green set turn-color lime cct-logos 1 [ set shape "Logo-Minos" set color yellow set size 3.001 setxy (min-pxcor + 2) ( max-pycor - 1) ] cct-logos 1 [ set shape "Logo-Plumber" set color green set size 3.001 setxy (min-pxcor + 5) ( max-pycor - 1) ] cct-logos 1 [ set shape "figure-plumber" set color brown set size 1.5001 setxy (min-pxcor + 8) ( max-pycor - 1) ] set-default-shape cursors "cursor" cct-cursors 1 [ set cursor self set size 2.1 hide-turtle set heading 0 set color gray setxy 0 0 ] reset-game end to reset-game if not any? logos [ setup ] clear-patches setup-pipe-patches setup-maze ask pipes [ twist ] ask pipes [ color-full-connection ] set clock-running? false set game-over? false if best-time != 0 [ set plabel-of patch max-pxcor min-pycor (Word "Best Time:" best-time)] end to xxx-make-random-pipes ask pipe-patches [ sprout-pipes 1 [ set color turn-color let shape# random 4 set shape item shape# pipe-shapes set ports item shape# pipe-ports let rotations random 4 set ports map [ ((? + rotations) mod 4) ] ports set heading rotations * 90 set new-heading heading ] ] ask pipes [ color-full-connection ] end to go every .05 [ ifelse game-over? = false [ monitor-mouse do-turning ] [ do-game-over-business ] ] every .25 [ check-game-over ] end to monitor-mouse ifelse mouse-down? [ if is-turtle? hovered [ ask hovered [ setxy pxcor pycor ] set hovered nobody ] if click? != true [ set click? true set mx mouse-xcor set my mouse-ycor ] ] [ ifelse click? = true [ set click? false if abs (mouse-xcor - mx) <= .5 and abs (mouse-ycor - my) <= .5 [ set last-click this-click set this-click timer set mx round mx set my round my restore-hovered set hovered nobody ;; hide-cursor rotate-pipe mx my ] ] [ ;; mouse-up and click is false--HOVER let under one-of pipes-on patch-at mouse-xcor mouse-ycor ifelse is-turtle? under [ if under != hovered [ restore-hovered set hovered under move-cursor-to-hovered ] ask hovered [ ] ask cursor [ rt 5 ] ] [ restore-hovered set hovered nobody hide-cursor ] ] ] end to restore-hovered if is-turtle? hovered [ ask hovered [ set pcolor black ] ] end to move-cursor-to-hovered ask cursor [ setxy pxcor-of hovered pycor-of hovered show-turtle ] end to hide-cursor ask cursor [ hide-turtle ] end to do-turning ask pipes with [ turning? = true ] [ set heading int heading + max (list 5 (int (.5 + .5 * abs subtract-headings new-heading heading)) ) ;; set label int heading if abs subtract-headings heading new-heading < 5 [ set heading new-heading set turning? false set color orange rotate-ports test-full-connection ] ] end to test-full-connection color-full-connection ask pipes-on neighbors4 [ color-full-connection ] end to color-full-connection ifelse fully-connected? [ set color connected-color ] [ set color open-color ] end to-report connection-to? [ port ] ;; if this agents ((port + 2) mod 4) ;; has a matching port among the given ;; agent's connections, then the ;; two agents connect let agent agent-at-port port ifelse is-turtle? agent [ report member? ((port + 2) mod 4) ( ports-of agent) ] [ report false ] end to-report agent-at-port [ port ] let coords item port pipe-port-coords let portx first coords let porty last coords let off-edge? false ifelse porty = 0 [ if xcor + portx < pipes-min-pxcor or xcor + portx > pipes-max-pxcor [ set off-edge? true ] ] [ ;; portx = 0 if ycor + porty < pipes-min-pycor or ycor + porty > pipes-max-pycor [ set off-edge? true ] ] ifelse off-edge? [ report nobody ] [ report one-of pipes-at portx porty ] end to-report fully-connected? setxy pxcor pycor let connected? true foreach ports [ if not connection-to? ? [ set connected? false ] ] report connected? end to increment-shape let shape# position shape pipe-shapes set shape# (shape# + 1) mod length pipe-shapes set shape item shape# pipe-shapes set ports item shape# pipe-ports test-full-connection end to rotate-ports set ports map [ ((? + 1) mod 4) ] ports ;; rotate ports end to-report opposite-ports report map [ ((? + 1) mod 4) ] ports end to rotate-pipe [ xx yy ] ask patch xx yy [ ask pipes-here with [ turning? != true ] [ set turning? true ifelse heading = new-heading [ set new-heading heading + 90 ] [ set new-heading new-heading + 90 ] if new-heading >= 360 [ set new-heading new-heading - 360 ] set color turn-color ] ] end to-report rotate-pipe-periodically ask one-of pipe-patches [ rotate-pipe pxcor pycor ] report "" end to setup-pipe-patches let field-width .5 * (world-width - 2 - (8 - difficulty * 2) ) let half-width int (world-width * .5) let field-height .5 * (world-height - 4 - (8 - difficulty * 2) ) let half-height int (world-height * .5) set pipes-min-pxcor min-pxcor + half-width - field-width set pipes-max-pxcor max-pxcor - half-width + field-width set pipes-min-pycor min-pycor + half-height - field-height set pipes-max-pycor max-pycor - half-height + field-height set pipe-patches patches with [ pxcor >= pipes-min-pxcor and pxcor <= pipes-max-pxcor and pycor >= pipes-min-pycor and pycor <= pipes-max-pycor ] end to setup-maze ask pipes [ die ] ask pipe-patches [ set pcolor black sprout-pipes 1 [ set color blue let shape# 0 set shape one-of item shape# pipe-shapes set ports item shape# pipe-ports let rotations 0 set ports map [ ((? + rotations) mod 4) ] ports set heading rotations * 90 set new-heading heading set size .999 ] ] cct-mazers 1 [ let start one-of pipe-patches goto-agent start set heading 0 maze-step die ] end to maze-step let location one-of pipes-here let open-directions value-from location [ unconnected-ports ] while [ length open-directions > 0 ] [ let new-direction 0 ;; give straight-through connections preference ifelse length open-directions = 3 and random 100 < 100 [ ifelse not member? 0 open-directions [ set new-direction 2 ][ ifelse not member? 1 open-directions [ set new-direction 3 ][ ifelse not member? 2 open-directions [ set new-direction 0 ][ ifelse not member? 3 open-directions [ set new-direction 1 ][ ]]]] set new-direction item 1 sort open-directions ] [ set new-direction one-of open-directions ] ask location [ if not member? new-direction ports [ set ports fput new-direction ports ] ] goto-coords item new-direction pipe-port-coords ask one-of pipes-here [ set ports fput ((new-direction + 2) mod 4) ports ] maze-step goto-agent location set open-directions value-from location [ unconnected-ports ] ] ask location [ set-shape-and-heading-from-ports ] end to-report unconnected-ports let open-ports [ ] foreach [ 0 1 2 3 ] [ let this-pipe pipe-at-port ? if not member? ? ports and is-turtle? this-pipe and ports-of this-pipe = [] [ set open-ports lput ? open-ports ] ] report open-ports end to goto-agent [ agent ] setxy pxcor-of agent pycor-of agent end to goto-coords [ coord-pair ] let xx first coord-pair let yy last coord-pair setxy ( xcor + xx ) ( ycor + yy ) end to-report pipe-patch-at-port [ port# ] let coord-pair item port# pipe-port-coords let xx pxcor + first coord-pair let yy pycor + last coord-pair let patches-there pipe-patches with [ pxcor = xx and pycor = yy ] ifelse any? patches-there [ report one-of patches-there ] [ report nobody ] end to-report pipe-at-port [ port# ] let coord-pair item port# pipe-port-coords let xx pxcor + first coord-pair let yy pycor + last coord-pair let pipes-there pipes with [ pxcor = xx and pycor = yy ] ifelse any? pipes-there [ report one-of pipes-there ] [ report nobody ] end to-report ports-at-port [ port# ] let the-pipe pipe-at-port port# ifelse is-turtle? the-pipe [ report ports-of the-pipe ] [ report [] ] end to set-shape-and-heading-from-ports ;; put the ports in order set ports sort ports ;; find the class of ports that matches these ports let port-config position ports pipe-port-map-ports ;; pick the port arrangement that goes with this port class let port-shape item port-config pipe-port-map-shape let port-rotation item port-config pipe-port-map-rotation ;; pick one of the shapes that goes with this port arrangement set shape one-of item port-shape pipe-shapes set heading port-rotation * 90 set new-heading heading end to twist let new-rotation random 4 set ports sort map [ ((? + new-rotation) mod 4) ] ports set-shape-and-heading-from-ports end to-report pipes-at-ports let port-coords map [ item ? pipe-port-coords ] ports let port-pipes pipes-on patches at-points port-coords report port-pipes end to check-game-over if game-over? = false [ if clock-running? != true [ set clock-running? true set game-time timer ] if clock-running? = true [ ask patch max-pxcor max-pycor [ let time (int (timer - game-time )) set plabel (word "Time: " time) ] ] if any? pipes with [ color = connected-color ] and not any? pipes with [ shade-of? color open-color ] [ set game-over? true ask patch int (min-pxcor + world-width * .66) (min-pycor + 1) [ set plabel "YOU WIN!! Press reset to play again." set plabel-color orange ] ask pipes [ set color 5 + 10 * (pxcor mod 12) ] if clock-running? = true [ let time (int (timer - game-time )) if best-time = 0 or time < best-time [ set best-time time set plabel-of patch max-pxcor min-pycor "BEST TIME!" ] ] if not is-turtle? hovered [ set hovered one-of pipes ] ask hovered [ set color white ] set stack [] cct-mazers 1 [ set shape "plumb-o-taur" set color white goto-agent hovered set traveller self ] ] ] end to do-game-over-business ;; game-over business ifelse value-from traveller [ patch-here ] != value-from hovered [ patch-here ] [ ask traveller [ face hovered jump .2 ] ] [ ask hovered [ let nextone one-of (pipes-at-ports with [ color != color-of myself ]) ifelse is-turtle? nextone [ set color-of nextone color-of hovered ;; if any? (pipes-at-ports with [ color != color-of myself ]) ;; [ set stack lput hovered stack ;; ] set hovered nextone ] [ ifelse length stack > 0 [ set hovered last stack set stack but-last stack ] [ set hovered one-of pipes ask hovered [ set color 5 + 10 * random 14 ] ] ] ] ] end @#$#@#$#@ GRAPHICS-WINDOW 194 10 639 447 -1 -1 29.0 1 30 1 1 1 0 0 0 1 0 14 0 13 CC-WINDOW 5 522 648 617 Command Center 0 BUTTON 16 15 80 48 Reset reset-game NIL 1 T OBSERVER T NIL BUTTON 16 55 79 88 Play! go T 1 T OBSERVER T NIL TEXTBOX 15 102 180 508 Press Play.\n\nRotate pipe pieces by clicking.\n\nFor criminals in ancient Crete, imprisonment forever in an endless maze was bad. The giant flesh-eating Bull-man in the maze was worse. But no toilets? No running water? That's inhumane!\n\nSo, King Minos sent his Royal Plumber into the Labyrinth. Many years and many Royal Plumbers later, all the pipe is finally laid, it just needs to be connected.\n\nAs the newest of Minos' Plumbers, finish the job by correctly orienting all of the Plumbing of Minos.\n\nSolve the maze, and you'll get a visit from a very *special* plumbing inspector!\n SLIDER 87 16 179 49 difficulty difficulty 1 4 4 1 1 NIL @#$#@#$#@ WHAT IS IT? ----------- The Plumber of Minos, a game where scattered pipes are rotated until the are fully connected, forming a single-path maze. HOW IT WORKS ------------ First, a maze is constructed. Then the maze is converted to pipes, and the pipes rotated randomly. HOW TO USE IT ------------- Clicking the mouse on a pipe rotates the pipe 90 degrees clockwise. @#$#@#$#@ default true 0 link true 0 link direction true 0 cursor true 0 Polygon -955883 false false 45 105 105 45 195 45 255 105 255 195 195 255 105 255 45 195 Polygon -1184463 false false 30 105 105 30 195 30 270 105 270 195 195 270 105 270 30 195 Polygon -955883 true false 15 165 45 105 75 165 Polygon -955883 true false 135 15 195 45 135 75 Polygon -955883 true false 285 135 255 195 225 135 Polygon -955883 true false 165 285 105 255 165 225 Polygon -1184463 true false 120 0 180 30 120 60 Polygon -1184463 true false 0 180 30 120 60 180 Polygon -1184463 true false 300 120 270 180 240 120 Polygon -1184463 true false 180 300 120 270 180 240 figure-plumber false 0 Polygon -6459832 true false 135 45 165 45 180 90 120 90 Circle -6459832 true false 105 -15 90 Polygon -6459832 true false 105 90 195 75 195 135 180 180 225 300 165 300 150 210 135 300 75 300 120 180 105 135 Polygon -6459832 true false 105 120 15 30 45 0 105 75 Polygon -13840069 true false 105 15 135 0 120 -15 120 0 105 -15 105 0 90 0 Polygon -13840069 true false 195 15 165 0 180 -15 180 0 195 -15 195 0 210 0 Polygon -1 true false 105 75 120 75 195 135 180 180 210 255 90 225 120 180 105 135 Polygon -6459832 true false 195 75 285 165 255 195 195 120 Polygon -1184463 true false 15 -105 30 -120 75 -120 90 -105 45 -105 45 -60 90 -60 75 -45 60 -45 60 15 30 45 30 75 60 75 60 45 30 15 30 -45 15 -60 logo-minos false 0 Polygon -7500403 true true -15 165 15 45 45 45 60 105 75 45 105 45 135 165 90 180 90 90 75 150 45 150 30 90 30 180 Polygon -7500403 true true 135 150 135 90 150 90 150 75 135 75 135 60 150 60 150 135 Polygon -7500403 true true 150 150 150 75 165 75 165 90 195 75 195 135 180 150 180 90 165 90 165 135 Polygon -7500403 true true 195 150 195 90 240 75 240 135 195 150 210 135 225 135 225 90 210 90 210 135 Polygon -7500403 true true 285 75 285 45 300 45 285 75 285 90 255 90 285 135 240 150 240 135 270 135 240 90 Line -16777216 false 150 45 150 165 Line -16777216 false 195 45 195 165 Line -16777216 false 240 45 240 165 Line -16777216 false 135 45 135 180 logo-plumber false 0 Polygon -7500403 true true 0 60 0 150 15 150 15 105 30 105 45 90 45 75 30 60 15 60 15 75 30 75 30 90 15 90 15 60 Polygon -7500403 true true 45 60 45 150 75 150 75 135 60 135 60 60 Polygon -7500403 true true 75 60 75 135 90 150 105 150 120 135 120 60 105 60 105 135 90 135 90 60 Polygon -7500403 true true 120 150 120 60 135 60 150 105 165 60 180 60 180 150 165 150 165 90 150 135 135 90 135 150 Polygon -7500403 true true 180 60 210 60 225 75 225 90 210 105 225 120 225 135 210 150 180 150 180 135 210 135 210 120 195 105 210 90 210 75 195 75 195 135 180 135 Polygon -7500403 true true 225 60 270 60 270 75 240 75 240 90 255 90 255 105 240 105 240 135 270 135 270 150 225 150 Polygon -7500403 true true 270 60 300 60 315 75 315 90 300 105 285 105 315 135 315 150 300 150 300 135 285 120 285 150 270 150 270 75 285 75 285 90 300 90 300 75 270 75 Line -16777216 false 45 45 45 165 Line -16777216 false 75 45 75 165 Line -16777216 false 120 45 120 165 Line -16777216 false 180 45 180 165 Line -16777216 false 225 45 225 165 Line -16777216 false 270 60 270 180 pipe-0-null false 1 Circle -2674135 true true 90 90 120 pipe-1-drain true 4 Rectangle -1184463 true true 105 45 195 75 Rectangle -1184463 true true 90 0 210 30 Circle -1184463 true true 60 60 180 Circle -16777216 true false 75 75 150 Circle -1184463 true true 90 90 120 Circle -16777216 true false 105 105 90 Rectangle -1184463 true true 135 75 165 225 Rectangle -1184463 true true 75 135 225 165 Circle -1184463 true true 120 120 60 Rectangle -1 true false 105 30 195 45 pipe-1-end true 4 Rectangle -1184463 true true 105 45 195 120 Rectangle -1184463 true true 90 0 210 30 Circle -1184463 true true 90 90 120 Rectangle -1 true false 105 30 195 45 pipe-2-ess true 5 Rectangle -10899396 true true 90 270 210 300 Rectangle -10899396 true true 90 0 210 30 Rectangle -1 true false 105 255 195 270 Rectangle -1 true false 105 30 195 45 Polygon -10899396 true true 195 255 105 255 120 225 135 210 165 195 165 180 105 195 60 165 195 105 240 135 255 180 240 225 210 240 Polygon -10899396 true true 105 45 195 45 180 75 165 90 135 105 135 120 195 105 240 135 105 195 60 165 45 120 60 75 90 60 pipe-2-thin true 5 Rectangle -10899396 true true 90 270 210 300 Rectangle -10899396 true true 90 0 210 30 Rectangle -1 true false 105 255 195 270 Rectangle -1 true false 105 30 195 45 Polygon -10899396 true true 195 45 180 75 165 150 180 225 195 255 105 255 120 225 135 150 120 75 105 45 pipe-2-thru true 5 Rectangle -10899396 true true 105 45 195 255 Rectangle -10899396 true true 90 270 210 300 Rectangle -10899396 true true 90 0 210 30 Rectangle -1 true false 105 255 195 270 Rectangle -1 true false 105 30 195 45 pipe-2-valve true 5 Rectangle -10899396 true true 105 45 195 255 Rectangle -10899396 true true 90 270 210 300 Rectangle -10899396 true true 90 0 210 30 Rectangle -1 true false 105 255 195 270 Rectangle -1 true false 105 30 195 45 Rectangle -10899396 true true 195 135 255 165 Polygon -2674135 true false 240 75 270 90 270 210 240 225 255 195 255 105 pipe-2-wide true 5 Rectangle -10899396 true true 90 270 210 300 Rectangle -10899396 true true 90 0 210 30 Rectangle -1 true false 105 255 195 270 Rectangle -1 true false 105 30 195 45 Polygon -10899396 true true 195 45 225 90 240 150 225 210 195 255 105 255 75 210 60 150 75 90 105 45 pipe-3-arr true 7 Polygon -14835848 true true 255 105 210 75 195 45 105 45 105 75 135 105 45 105 45 195 255 195 Rectangle -14835848 true true 270 90 300 210 Rectangle -14835848 true true 90 0 210 30 Rectangle -14835848 true true 0 90 30 210 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 105 30 195 45 Line -16777216 false 255 105 135 105 pipe-3-tee true 7 Rectangle -14835848 true true 0 90 30 210 Rectangle -14835848 true true 90 0 210 30 Rectangle -14835848 true true 270 90 300 210 Polygon -14835848 true true 45 105 105 105 105 45 195 45 195 105 255 105 255 195 45 195 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Line -16777216 false 105 105 150 195 Line -16777216 false 195 105 150 195 pipe-3-vee true 7 Rectangle -14835848 true true 0 90 30 210 Rectangle -14835848 true true 90 0 210 30 Rectangle -14835848 true true 270 90 300 210 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Polygon -14835848 true true 45 105 90 90 105 45 195 45 210 90 255 105 255 195 210 180 150 135 90 180 45 195 Line -16777216 false 180 90 150 135 Line -16777216 false 180 90 195 45 pipe-3-why true 7 Polygon -14835848 true true 45 105 90 75 105 45 195 45 195 75 165 105 255 105 255 195 45 195 Rectangle -14835848 true true 0 90 30 210 Rectangle -14835848 true true 90 0 210 30 Rectangle -14835848 true true 270 90 300 210 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Line -16777216 false 45 105 165 105 pipe-4-cross true 8 Polygon -11221820 true true 45 105 105 105 105 45 195 45 195 105 255 105 255 195 195 195 195 255 105 255 105 195 45 195 Rectangle -11221820 true true 0 90 30 210 Rectangle -11221820 true true 90 0 210 30 Rectangle -11221820 true true 270 90 300 210 Rectangle -11221820 true true 90 270 210 300 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 105 255 195 270 Line -16777216 false 105 195 120 180 Line -16777216 false 120 120 105 105 Line -16777216 false 195 105 180 120 Line -16777216 false 180 180 195 195 pipe-4-ex true 8 Rectangle -11221820 true true 0 90 30 210 Rectangle -11221820 true true 90 0 210 30 Rectangle -11221820 true true 270 90 300 210 Rectangle -11221820 true true 90 270 210 300 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 105 255 195 270 Polygon -11221820 true true 255 195 240 195 210 210 195 240 195 255 105 255 105 225 120 180 180 120 225 105 255 105 Polygon -11221820 true true 45 105 60 105 90 90 105 60 105 45 195 45 195 75 180 120 120 180 75 195 45 195 Line -16777216 false 120 180 180 120 pipe-4-lap true 8 Polygon -11221820 true true 105 30 195 30 195 105 180 150 150 180 105 195 30 195 30 105 90 105 105 90 Polygon -11221820 true true 195 270 105 270 105 195 120 150 150 120 195 105 270 105 270 195 210 195 195 210 Rectangle -11221820 true true 0 90 30 210 Rectangle -11221820 true true 90 0 210 30 Rectangle -11221820 true true 270 90 300 210 Rectangle -11221820 true true 90 270 210 300 Rectangle -1 true false 30 105 45 195 Rectangle -1 true false 105 30 195 45 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 105 255 195 270 Line -16777216 false 45 195 105 195 Line -16777216 false 105 195 150 180 Line -16777216 false 150 180 180 150 Line -16777216 false 180 150 195 105 Line -16777216 false 195 105 195 45 pipe-bend true 2 Rectangle -955883 true true 150 105 255 195 Rectangle -955883 true true 105 45 195 150 Circle -955883 true true 105 105 90 Rectangle -955883 true true 270 90 300 210 Rectangle -955883 true true 90 0 210 30 Rectangle -1 true false 105 30 195 45 Rectangle -1 true false 255 105 270 195 Line -16777216 false 195 105 165 135 pipe-bend-loop true 2 Circle -955883 true true 0 90 210 Rectangle -955883 true true 270 90 300 210 Rectangle -955883 true true 90 0 210 30 Rectangle -1 true false 105 30 195 45 Rectangle -1 true false 255 105 270 195 Line -16777216 false 195 105 105 90 Circle -16777216 true false 75 165 60 Polygon -955883 true true 105 45 195 45 195 105 255 105 255 195 195 195 105 105 Line -16777216 false 210 195 105 165 pipe-bend-oxbow true 2 Rectangle -955883 true true 270 90 300 210 Rectangle -955883 true true 90 0 210 30 Polygon -955883 true true 105 45 60 45 30 60 15 75 0 105 0 150 90 165 90 135 105 120 135 120 165 105 180 90 195 60 195 30 Polygon -955883 true true 255 195 255 240 240 270 225 285 195 300 150 300 135 210 165 210 180 195 180 165 195 135 210 120 240 105 270 105 Polygon -955883 true true 90 150 105 180 120 195 150 210 150 300 90 285 60 270 30 240 15 210 0 150 Rectangle -1 true false 255 105 270 195 Rectangle -1 true false 105 30 195 45 plumb-o-taur false 0 Polygon -1 true false 390 -45 315 -30 270 15 240 30 240 90 270 75 330 -15 Polygon -1 true false -90 -45 -15 -30 30 15 60 30 60 90 30 75 -30 -15 Polygon -6459832 true false 60 30 240 30 240 90 225 225 180 255 120 255 75 225 60 90 Polygon -16777216 true false 195 195 165 210 165 240 Polygon -16777216 true false 105 195 135 210 135 240 Line -16777216 false 120 120 105 195 Line -16777216 false 180 120 195 195 Circle -1184463 true false 105 210 90 Circle -16777216 true false 120 225 60 Rectangle -6459832 true false 135 210 165 255 Polygon -16777216 true false 225 90 180 120 225 120 Polygon -16777216 true false 75 90 120 120 75 120 @#$#@#$#@ NetLogo 3.1.1 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@