TRAFFIC SOURCE CODE


Back to Traffic

Turtle Procedures Observer Procedures

turtles-own [speed SpeedLimit]
breeds [lefts rights swans polices]
patches-own [flock radar picture]

to setup-cars
   if breed = rights [
      setxy (random (screen-width)) -1
      seth 90
      setspeed ((random 10) / 10) + 0.1
      setSpeedLimit 1]
    if breed = lefts [
      setxy random (screen-width) 3
     seth 270
      setspeed ((random 10) / 10) + 0.1
      setSpeedLimit 1]
end

to swim
if breed = swans
    [ifelse xcor < -18
      [seth 85 + random 10]
      [ifelse xcor < 5
        [seth 58 + random 10]
        [seth 115 + random 10]]

    jump (random 500) / 10000]
end

to drive
   if breed = rights
   [ifelse (count-turtles-at 1 0) > 0
      [setspeed speed-of one-of-turtles-at 1 0
        decelerate]
      [ifelse lookahead = 2
       [ifelse (count-turtles-at 1 0) > 0
         [setspeed speed-of one-of-turtles-at 2 0
           decelerate]
         [accelerate]]
         [accelerate]]
   if speed < 0.01 [setspeed 0.01]
   if speed > SpeedLimit [setspeed SpeedLimit]

   if radar = true [setspeed .10]
   jump speed]

  if breed = lefts
   [ifelse (count-turtles-at (-1) 0) > 0
      [setspeed speed-of one-of-turtles-at (-1) 0
        decelerate]
    [ifelse lookahead = 2
      [ifelse (count-turtles-at (-2) 0) > 0
         [setspeed speed-of one-of-turtles-at (-2) 0
           decelerate]
         [accelerate]]
         [accelerate]]
   if speed < 0.01 [setspeed 0.01]
   if speed > SpeedLimit [setspeed SpeedLimit]

   if radar = true [setspeed .10]
   jump speed]
end

to accelerate
   setspeed (speed + (speedup / 10000))
end

to decelerate
   setspeed speed - (slowdown / 1000)
end

to setup
ask-turtles [die]
create-rights number
create-lefts int (number / 2)
ask-turtles [setup-cars]
swan-flock
ask-patches [if pc = (red - 2)
            [setpc picture] setpicture pc setradar false]
end

to setup-police
create-polices 1
ask-polices [setxy 12 1.5 setc blue]
ask-patches
      [setradar false
      if (distance 12 1) < 3.5
          [setradar true] ]
end

to remove-police
ask-polices [die]
ask-patches [if radar = true [setpc picture]
           setradar false]
end

to see-radar
ask-patches [if radar = true [setpc (red - 2)]]

end

to swan-flock
ask-patches [setflock ((distance -22.5 -21.5) < 2)
        if flock = true [ sprout [ ] ] ]
ask-turtles [if ycor < -10 [setbreed swans setc white]]
ask-swans [setspeed .01
           seth 350 + random 10]
end

to go
drivebutton
swimbutton
end

to stop-it
stopdrivebutton
stopswimbutton
end