Each of a thousand of turtles is drawing a line in a pompon. Turtles are described by a model class, which defines a handling function for the "step" signal. This function does the step forward with a small, random change of the heading and the step length.
The program creates 1000 turtles, but you can increase the number to the maximum your CPU can handle.

Take a look at the following features illustrated in the code:

  • "step" signal is sent by a dedicated turtle, it does not belong to the model class and does not draw anything; the forever loop that the turtle runs could be done also on the main turtle but it would block commands issued from the command line;
  • "Stop"/"Go!" button switches the value of shared variable :go (seen by all turtles) and allows to freeze the drawing; when :go = true the :u turtle is sending "step" signal at the maximum speed, when :go = false the :u turtle is waiting 10 milliseconds in each iteration to avoid loading the cpu with an empty loop execution;
  • "step" signal is blocking, it means that execution of the sender's code is suspended until all triggered handling functions are finished; this ensures all turtles are doing the same number of steps;
  • turtles are created simulteneously with the asynchronous constructor: (anewt $model :h :c); if you change this instruction to: (newt $model :h :c) (no "a" at the beginning) turtles will be created sequentially, which will slow down startup a lot if :n, the number of turtles, is high.

download project