12.2 The program

We’re going to use the multiturtle mode and the primitive setturtle. setturtle followed by an integer allows us to select the turtle whose identifier is the integer.

A good schema is better than a thousand explanations....

PIC

Each turtle whose integer is from 2 o 12 will forward one step, when the corresponding dice sum appears. For example, if the two dice scores is 8, then turtle number 8 will forward one step. Between two turtle, there are 30 steps horizontally.

We set all turtles using coordinates.

 setturtle 2 setpos [-150 0]  
 setturtle 3 setpos [-120 0]  
 setturtle 4 setpos [-90 0]  
 setturtle 5 setpos [-60 0]  
 setturtle 6 setpos [-30 0]  
.....

Better than writing 11 times the same command line, we’re going to use the primitive for. With this primitive, we can give a variable a sequence of values. Here, we want that the variable :i to have succesive values 2, 3, 4, ... , 12. We write:
for [i 2 12] [ list of instructions]

To set up all the turtles we create the procedure initialize

to initialize  
  cs ht pu  
  for [i 2 12] [  
      # Set up the turtle  
      setturtle :i setpos list -150+(:i-2)*30 0  
      # We write turtle number 15 steps under  
      pu bk 15 label :i fd 15 pd  
  ]  
end

You must understand the expression -150+(:i-2)*30. We’re beginning from -150, and for each new turtle we add 30. (Test with the different values for :i if you’re sceptic)

Finally this is the program:

to die  
   output 1+random 6  
 end  
 
to initialize  
  cs ht pu  
  for [i 2 12] [  
      # Set up the turtle  
      setturtle :i setpos list -150+(:i-2)*30 0  
      # We write turtle number 15 steps under  
      pu bk 15 label :i fd 15 pd  
  ]  
end  
 
to go  
initialize  
# We make 1000 tries  
repeat 1000 [  
  make "sum die+die  
  setturtle :sum fd 1  
]  
# We display frequencies  
for [i 2 12] [  
  setturtle :i  
  # The Y-coordinates of each turle represents the number of times  
  # a dice scores has appeared  
  localmake "number last pos  
  pu fd 10 lt 90 fd 10 rt 90 pd label :number/1000*100  
]  
end

Here is a more general program. We’ll ask the user the number of dice he wants and the number of tries to make.

 
to initialize  
  cs ht pu setturtlesmax :max+1  
  for sentence list "i :min :max [  
      # Set up the turtle  
      setturtle :i setpos list -150+(:i-2)*30 0  
      # We write turtle number 15 steps under  
      pu bk 15 label :i fd 15 pd  
  ]  
end  
to die  
localmake "somme 0  
repeat :dice [  
   localmake "somme :somme+1 +random 6  
 ]  
output :somme  
end  
 
to go  
read [Number of dice:] "dice  
if not numberp :dice [print [Not a valid number!] stop]  
globalmake "min :dice  
globalmake "max 6*:dice  
read [Number of tries to make: ] "tries  
if not numberp :tries [print [labellength nombre rentré n’est pas valide!] stop]  
initialize  
# We make tries  
repeat :tries [  
  setturtle die forward 1  
]  
# Display frequencies  
for sentence list "i :min :max [  
  setturtle :i  
  # Y-Axis coordinates represent the number of times a score has appeared  
  localmake "effectif last position  
  # Round to 0.1  
  penup forward 10 left 90 forward 10 right 90 pendown label (round :effectif/:tries*1000)/10  
]  
end