与乌龟图形同时运行海龟

时间:2012-05-08 16:23:58

标签: python turtle-graphics

如何让4只不同的海龟同时移动?另外,如何使Turtle.shape方法的人形状?我知道有一个名为register_shape的Screen方法,但我找不到任何文档。

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)

tFirsttSecondtThird是职位,t1t2t3t4是海龟。我希望所有的乌龟齐声移动。

4 个答案:

答案 0 :(得分:2)

以下是register_shape

的文档

关于你的第一个问题,我不确定你的意思。将它们全部移动到单独的线程中将是我的第一个想法,但即便如此,它们在技术上也不会同时移动。我从来没有真正使用过海龟图形,但只知道这个概念。

这与您所谈论的内容非常接近

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()

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()

答案 1 :(得分:0)

以为我会提出这个可能性。我最近想让所有的乌龟一起跳舞,我得到的最接近的是创建一个所有乌龟对象的列表,然后遍历该列表。

不可否认,这会让他们一次移动一个但是他们不会再做第二步,直到所有人都成为第一个。

我在这里写了一个完整的程序,仅仅是为了展示它的外观。如果它不是你想要的,我会道歉,但至少它可能解决其他人的问题。

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()

答案 2 :(得分:0)

试试这段代码:

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()

答案 3 :(得分:0)

要使所有海龟同时移动(如果我正确理解了问题),您需要使用tracer()方法。

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

因为乌龟每次乌龟移动都会更新屏幕,因此跟踪器就是让你同时移动它们的方式。通常turtle.tracer(0, 20)应该没问题或turtle.tracer(1, 20)