3

如何让 4 只不同的海龟同时移动?还有,怎么做人形的Turtle.shape方法呢?我知道有一个 Screen 方法叫做register_shape,但我找不到任何关于它的文档。

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, tSecondantThird是位置, t1, t2, t3,t4是海龟。我希望所有的乌龟都齐声移动。

4

4 回答 4

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()
于 2012-05-08T17:04:22.093 回答
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()
于 2014-01-24T10:49:20.757 回答
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()
于 2016-12-16T11:32:21.887 回答
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)

于 2018-01-20T03:10:41.257 回答