2012-05-08 97 views
3

如何讓4只不同的海龜同時移動?另外,如何爲Turtle.shape方法創建一個人形狀?我知道有一個名爲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) 

tFirsttSecond一個tThird是位置,並且t1t2t3t4是海龜。我希望所有的海龜一致移動。

回答

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

我想製作一個運動場的圖形與球員,所以我需要讓他們每個人在不同的方向同時移動。 –

+0

您也可以嘗試延遲動畫更新,以使它們似乎同時移動[turtle.update](http://docs.python.org/library/turtle.html#turtle.update) – Matt

+0

我沒有認爲更新會有所幫助。另外,我正在運行python 3.2,延遲是一種屏幕方法,它可能在以前的版本中有所不同。我稱延遲,它改變了動畫的時間,而不是動畫之間的時間。所以一個screen.delay(200)需要200毫秒,但screen.delay(5)需要5個,而海龜仍然分開。 thx爲你提供幫助 –

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