作者:大好 | 来源:互联网 | 2023-02-03 15:34
我正在为我的老师测试一些东西,他想看看如果我们模拟同步时下面的程序可能运行得更快(我知道它不能完全同步,这只是为了学习/练习)多只乌龟的运动.我已经尝试过使用多处理,线程等模块,甚至还有一些疯狂的愚蠢尝试时间和延迟(我在高中时因为之前的一个问题我刚刚在python学习了一些问题)许多失败的尝试我都在问,是否有人想知道还有什么可尝试的,或者是一个方向来模拟海龟的同步运动
从乌龟进口龟进口龟
turtle.getscreen().delay(0)
class MyTurtle(Turtle):
def petal(self):
for i in range(90):
self.fd(1)
self.rt(1)
self.rt(90)
for i in range(90):
self.fd(1)
self.rt(1)
def stem(self):
self.pencolor('green')
self.fd(250)
def flowerhead(self):
for i in range(9):
self.pencolor('red')
self.begin_fill()
self.petal()
self.lt(230)
self.end_fill()
def stempetal(self):
self.seth(90)
self.rt(15)
self.fillcolor('green')
self.begin_fill()
self.petal()
self.end_fill()
tOny= MyTurtle(shape='turtle')
todd = MyTurtle(shape='turtle')
tina = MyTurtle(shape='turtle')
tiny = MyTurtle(shape='turtle')
tweeny = MyTurtle(shape='turtle')
def flower1():
todd.speed('fastest')
todd.fillcolor('blue')
todd.flowerhead()
todd.seth(270)
todd.stem()
todd.stempetal()
def flower2():
tony.speed('fastest')
tony.setpos(80, -15)
tony.pencolor('green')
tony.goto(0, -200)
tony.fillcolor('purple')
tony.goto(80,-15)
tony.rt(40)
tony.flowerhead()
def flower3():
tina.speed('fastest')
tina.setpos(-80, -15)
tina.pencolor('green')
tina.goto(0, -200)
tina.fillcolor('teal')
tina.goto(-80,-15)
tina.lt(40)
tina.flowerhead()
def flower4():
tiny.speed('fastest')
tiny.setpos(160, -25)
tiny.pencolor('green')
tiny.goto(0, -200)
tiny.fillcolor('black')
tiny.goto(160, -25)
tiny.flowerhead()
def flower5():
tweeny.speed('fastest')
tweeny.setpos(-160, -25)
tweeny.pencolor('green')
tweeny.goto(0, -200)
tweeny.fillcolor('pink')
tweeny.goto(-160,-25)
tweeny.lt(40)
tweeny.flowerhead()
flower2()
tony.hideturtle()
flower4()
tiny.hideturtle()
flower3()
tina.hideturtle()
flower5()
tweeny.hideturtle()
flower1()
todd.hideturtle()
感谢您的时间
1> Akshat Mahaj..:
解决方案是禁用更新每个乌龟的位置,然后在计算新位置后强制整个屏幕更新.
import turtle
# our two turtle instances
first, secOnd= turtle.Turtle(), turtle.Turtle()
first.tracer(False) # disable updating view on screen for this turtle!
second.tracer(False)
# make one move - note this will not appear on screen.
first.forward(50)
second.left(20)
# when you are ready to see the whole screen update
turtle.update()
要做你想做的事,你必须基本上做到这一点,以便每一个新的行动都在a之前完成turtle.update()
.你不能保持它的串行执行,你现在所做的-换句话说,你不能运行flower1
,然后flower2
,按顺序排列.
这是一对龟的例子,它们会同时在屏幕上生成随机图案:
import turtle
import random
# our two turtle instances
turtles = [turtle.Turtle(), turtle.Turtle()]
for turtle_object in turtles:
turtle_object.tracer(False)
for _ in range(10000): # make ten thousand moves.
for t in turtles:
# list the possible moves available
possible_moves = [t.forward, t.back, t.right, t.left]
# give it a random value
random_value = random.randint(0, 100)
# make a random move
random.choice(possible_moves)(random_value)
# update the whole screen now that the new positions have been calculated
turtle.update()
这里的诀窍是要注意每个乌龟的每个新位置都要计算,然后整个屏幕被告知要更新,然后才进行下一步.每一步都必须尽可能精细.