热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python多个海龟同时移动(看似)

如何解决《Python多个海龟同时移动(看似)》经验,为你挑选了1个好方法。

我正在为我的老师测试一些东西,他想看看如果我们模拟同步时下面的程序可能运行得更快(我知道它不能完全同步,这只是为了学习/练习)多只乌龟的运动.我已经尝试过使用多处理,线程等模块,甚至还有一些疯狂的愚蠢尝试时间和延迟(我在高中时因为之前的一个问题我刚刚在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()

这里的诀窍是要注意每个乌龟的每个新位置都要计算,然后整个屏幕被告知要更新,然后才进行下一步.每一步都必须尽可能精细.


推荐阅读
author-avatar
大好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有