2013-01-24 71 views
0

这里是我的代码(python初学者,请承担任何不专业的代码),基本上我想要的是让两只乌龟一起在同一个圆上移动(如你猜测的,我的任务是模拟飞船追逐国际空间站),在我的代码中,第一只乌龟会绕着圆圈移动,然后是第二只乌龟。如何让海龟一起移动?

from turtle import * 
rocket=Turtle() 
ISS=Turtle() 
counter=1 
title("ISS") 
screensize(750,750) 
ISS.hideturtle() 
rocket.hideturtle() 
ISS.penup() 
ISS.left(90) 
ISS.fd(250) 
ISS.left(90) 
ISS.showturtle() 
ISS.pendown() 
rocket.penup() 
rocket.fd(250) 
rocket.left(90) 
rocket.showturtle() 
rocket.pendown() 
while counter==1: 
    ISS.speed(1) 
    rocket.speed(2) 
    ISS.circle(250) 
    rocket.circle(250) 

我的老师告诉我“线程化”会为此工作,但我不太明白。如果有人能帮助我解决这个问题,我将非常感激;)

+0

如果你的老师知道如何用线程做到这一点,她比我聪明。建议使用较少的空白。你不需要在每一行之间有一条空行。 – jgritty

回答

1

有一个海龟limitation,它不允许它工作多线程。

虽然,您不必将乌龟绕整个圆圈移动,但您可以将其移动一部分。另外,我认为你误解了speed的功能。这只是乌龟吸引的速度。

from turtle import * 

def move(thing, distance): 
    thing.circle(250, distance) 

def main(): 
    rocket = Turtle() 
    ISS = Turtle() 
    rocket.speed(10) 
    ISS.speed(10) 
    counter = 1 
    title("ISS") 
    screensize(750, 750) 
    ISS.hideturtle() 
    rocket.hideturtle() 
    ISS.penup() 
    ISS.left(90) 
    ISS.fd(250) 
    ISS.left(90) 
    ISS.showturtle() 
    ISS.pendown() 
    rocket.penup() 
    rocket.fd(250) 
    rocket.left(90) 
    rocket.showturtle() 
    rocket.pendown() 

    while counter == 1: 
     move(ISS, 3) 
     move(rocket, 4) 

if __name__ == '__main__': 
    main() 

我拿出了移动物体的重复步骤,无论是国际空间站或火箭,并做了一个函数。我把绘图的速度提高到了10,因为我认为它看起来更平滑。国际空间站现在每步只能移动3/4至火箭。

+0

非常感谢你,它有很大的帮助 – user2006082

+0

也有一种代码的方式,以便当国际空间站和火箭相遇(在相同的位置)去窗口并创建一个新的Tkinter窗口,谢谢:) – user2006082

+0

错误报告这个答案中的链接非常讨论。请记住,标准库中的这个'turtle.py'代码依赖于使用Tk的Tkinter。 Tk和许多其他典型的GUI工具包一样,不允许(在程序运行时会导致错误,而不一定是所有时间)多个线程来修改在单个线程中创建的GUI元素(主线程,例如)。但是你可以在每个线程中运行多个Tcl解释器,并安排它们进行通信。说,这里提出的问题不需要任何形式的线程。 – mmgp