【问题标题】:Python Turtle CollisionPython海龟碰撞
【发布时间】:2013-09-24 21:18:09
【问题描述】:

如何进行碰撞?所以乌龟/蛇不会开箱即用。试图让它们停留在 (-200, -200) 和 (200, 200) 内。

from turtle import *
from random import *

def bounding_box():
    up()
    right(90)
    forward(200)
    down()
    left(90)
    forward(200)
    left(90)
    forward(400)
    left(90)
    forward(400)
    left(90)
    forward(400)
    left(90)
    forward(200)
    up()
    goto(0,0)
    down()

def drawSnakeRec(segments, length):
    if segments <= 0 or length <= 0:
        return 0
    else:
        color(random(), random(), random())
        forward(length)
        pensize(randint(1,10))
        left(randint(-30, 30))
        return length + drawSnakeRec(segments - 1, randint(1,20))

def drawSnakeIter(segments, length):
    TL = 0
    while segments > 0:
        color(random(), random(), random())
        pensize(randint(1,10))
        forward(length)
        left(randint(-30, 30))
        TL += length
        segments -=1
    return TL


def main():
    segments = int(input("Enter the segments between 0 and 500: "))

    bounding_box()

    hideturtle()
    speed('fast')

    if segments < 0 or segments > 500:
        print("Segments is out of range. Segment must be between 0 and 500 inclusive")
        input("Press enter to close")
    else:

        x = drawSnakeRec(segments, randint(1, 20))
        print("Recursive Snake's Length is:",x,"Units")
        input("Press Enter to go on Iterative Snake")
        up()
        goto(0,0)
        reset()
        bounding_box()
        y = drawSnakeIter(segments, randint(1,20))
        print("Iterative Snake's Length is:",y," Units")
        input("Press Enter to exit...")
        bye()
main()

有什么帮助吗?谢谢你。所以,我正在努力完成这件事。是的,这是我要完成的实验室作业。如果你们能帮助我或提供我能做的事情,那就太好了。 PS:我不擅长乌龟。以前没学过turtle,不错python学了一点。

【问题讨论】:

  • 当它到达边缘时你想发生什么?顺便说一句,我见过的最酷的 Turtle 程序。
  • 这是家庭作业吗?如果是这样,你真的应该在你的问题中澄清这一点。 Stackoverflow 可以给你指点,但要求更多是不道德和作弊的。在 turtle 中没有魔法命令可以帮助你做你想做的事……你必须自己检查每个递归步骤/迭代相对于盒子的位置。
  • @yasashiku 是的,这是一个硬件。另外,这怎么会是作弊,因为我需要帮助如何做到这一点。我不知道从哪里开始。
  • @Veedrac 谢谢。我想从墙上弹起来继续画画。
  • 您需要澄清这是家庭作业,您只需要高级指针 - 现在的措辞方式意味着您希望有人为您解决它。这将是作弊。我建议编辑您的问题以强调这一点。

标签: python collision turtle-graphics


【解决方案1】:

如果喜欢,我建议一个大的:

if turtle.ycor() >= 200 or turtle.ycor() <=-200 or  turtle.xcor() >= 200 or turtle.xcor <= -200

这对我有用!

【讨论】:

    【解决方案2】:

    在递归版本和迭代版本中,您都在转向随机方向并向前移动随机长度。如果要避开边界框,这些数字需要知道边界框在那里。

    您可以做的事情很少,具体取决于您想要的行为类型。可能最简单的方法是检查新坐标是否在框外,如果是,则适当地改变路线。

    如果您希望它逐渐避开框,您可以在转弯或移动决策中考虑到最近边缘的距离。

    无论哪种情况,turtle.pos() 都会有所帮助。

    【讨论】:

    • 感谢您的提示。我使用了 setposition() 和 if 语句,我现在得到了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多