# s11ami4_turtle_marche_aleatoire_multi_turtles.py # Série 11, activité MI.4 # Utilisant : turtle # Simulation d'une marche aléatoire, la marche de l'ivrogne # Une variante, ou la rotation est aussi aléatoire # Il y a plusieurs 'turtles' qui se déplacent. # La tortue rouge donne la moyenne des positions. # Python reference : # https://docs.python.org/3/ # Python library : # https://docs.python.org/3/library/index.html # Language Reference : # c.f. https://docs.python.org/3/reference/index.html # Arrays : # https://docs.python.org/3/library/array.html?highlight=list#array.array.fromlist # Lists : # https://docs.python.org/3/tutorial/datastructures.html?highlight=lists # c.f. https://docs.python.org/3/library/turtle.html # c.f. https://docs.python.org/3/library/turtle.html#turtle.speed from turtle import * from random import randrange MAXTurtle = 10 # nombre de tortues noires + 1 pour la rouge setup(width=700, height=550, startx=10, starty=15) # Position et dimension de la fenêtre graphique title("Marche aléatoire, marche de l'ivrogne") # c.f. https://stackoverflow.com/questions/10502492/running-turtles-simultaneously-with-turtle-graphics # c.f. dir(colorlist) colorlist = ["#8000ff","#8000ff", "yellow", "green", "black", "blue", "brown", "purple", "cyan", "magenta"] # c.f. https://matplotlib.org/examples/color/named_colors.html aList = list() for ii in range(MAXTurtle+1): aList.append(Turtle(shape="circle")) # “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”. #aList[ii].color(colorlist[ii % len(colorlist)]) aList[ii].speed(0) # 0 = vitesse maximale, 10 = rapide, 1 = lent aList[ii].turtlesize(0.5) aList[ii].up() # les tortues se déplacent, mais ne dessinent rien. aList[0].color('red') # Fonction __main__ nn = 0 # compte le nombre de pas fait par l'ivrogne. while (nn < 60): nn += 1 for ii in range(MAXTurtle+1): # Aléatoirement, tourne d'un angle multiple de 10° aList[ii].left(10 * randrange(36)) # puis avance de 5 pixels. aList[ii].forward(5) # Calcule la position moyenne des tortues de 1 à 9 sumX = 0 sumY = 0 for ii in range(1, MAXTurtle+1): xx, yy = aList[ii].pos() sumX = sumX + xx sumY = sumY + yy # La tortue 0, en rouge, donne la moyenne des positions. aList[0].setx(sumX/MAXTurtle) aList[0].sety(sumY/MAXTurtle)