3 votes

Exécution simultanée de tortues avec des graphiques de tortues

Comment puis-je faire bouger 4 tortues différentes en même temps ? Aussi, comment faire une forme de personne pour la Turtle.shape méthode ? Je sais qu'il existe une méthode Screen appelée register_shape mais je n'ai pas trouvé de documentation à ce sujet.

def turtles(self, base):
    self.t4.goto(self.tFirst)
    self.t1.goto(self.tSecond)
    self.t2.goto(self.tThird)
    self.t3.goto(self.tHome)
    if base >= 2:
        self.t4.goto(self.tSecond)
        self.t1.goto(self.tThird)
        self.t2.goto(self.tHome)
    if base >= 3:
        self.t4.goto(self.tThird)
        self.t1.goto(self.tHome)
    if base == 4:
        self.t4.goto(self.tHome)

tFirst , tSecond un tThird sont des positions, et t1 , t2 , t3 , t4 sont des tortues. Je veux que toutes les tortues bougent à l'unisson.

2voto

ajh158 Points 209

Voici la documentation pour enregistrer_la_forme

Pour ce qui est de votre première question, je ne sais pas exactement ce que vous voulez dire. Faire en sorte qu'ils se déplacent tous dans des fils séparés serait ma première idée, mais même dans ce cas, techniquement, ils ne se déplacent pas en même temps. Je n'ai jamais utilisé de graphiques de tortue, mais je connais juste le concept.

Ceci est très proche de ce dont vous parlez.

import turtle
import numpy as np

tlist = list()
colorlist = ["red", "green", "black", "blue", "brown"]
for i in xrange(5):
    tlist.append(turtle.Turtle(shape="turtle"))
    tlist[i].color(colorlist[i])
    tlist[i].speed(1)
screen = turtle.getscreen()
for i in xrange(100):
    screen.tracer(1000)
    for t in tlist:
        t.right((np.random.rand(1) - .5) * 180)
        t.forward(int((np.random.rand(1) - .5) * 100))
    screen.update()

o

import turtle
#import numpy as np
from time import sleep

tlist = list()
colorlist = ["red", "green", "black", "blue", "brown"]
for i in xrange(5):
    tlist.append(turtle.Turtle(shape="turtle"))
    tlist[i].color(colorlist[i])
    tlist[i].speed(1)
screen = turtle.getscreen()
for i in xrange(100):
    screen.tracer(1000)
    for i, t in enumerate(tlist):
        #t.right((np.random.rand(1) - .5) * 180))
        t.right(33 * i)
        #t.forward(int((np.random.rand(1) - .5) * 100))
        t.forward(50 * i)
    sleep(1)
    screen.update()

0voto

OhNoNotScott Points 784

J'ai pensé que ce serait une possibilité. J'ai récemment voulu faire danser toutes mes tortues ensemble et la solution la plus proche que j'ai trouvée était de créer une liste de tous mes objets tortues et d'itérer sur cette liste.

Certes, cela les fait bouger un par un, mais ils ne feront pas un deuxième mouvement tant que tous n'auront pas fait le premier.

J'ai écrit un programme complet ici pour vous, simplement pour vous montrer à quoi cela ressemble. Si ce n'est pas ce que vous recherchez, je m'en excuse, mais c'est au moins une solution possible à un autre problème pour quelqu'un d'autre.

import turtle
import random
wn = turtle.Screen()

bob = turtle.Turtle()
mary = turtle.Turtle()
fred = turtle.Turtle()
jane = turtle.Turtle()

turtles = [bob, mary, fred, jane]

for move in range(10):
    for item in turtles:
        item.left(random.randrange(-180, 180))
        item.forward(50)

wn.exitonclick()

0voto

Noel Augustin Points 11

Essayez ce code :

import turtle
import threading

window = turtle.Screen()
window.bgcolor("red")

class myTurtle (threading.Thread):
    def __init__(self,init_angle):
        threading.Thread.__init__(self)
        self.noel = turtle.Turtle()
        self.noel.rt(init_angle)
        self.init_angle = init_angle
    def run(self):
        for self.i in range(self.init_angle,self.init_angle + 9):
            for self.j in range(4):
                self.noel.fd(100)
                self.noel.rt(90)
                self.noel.rt(1)

t1 = myTurtle(0)
t2 = myTurtle(90)

t1.start()
t2.start()
window.exitonclick()

0voto

Travis Rau Points 11

Pour faire bouger toutes les tortues en même temps (si je comprends bien la question), vous devez utiliser la fonction tracer() méthode.

turtle.tracer(
    (First number is how many frames go by before turtle updates the screen),
    (second number is a delay in milliseconds)
)

Parce que la tortue met à jour l'écran à chaque fois qu'une tortue bouge, le traceur est le moyen de les faire bouger toutes en même temps. Habituellement turtle.tracer(0, 20) devrait convenir ou turtle.tracer(1, 20) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X