让乌龟从墙上反弹 [英] Getting Turtle to Bounce Off the Walls

查看:97
本文介绍了让乌龟从墙上反弹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为某人制作节目,所以他们可以锻炼他们的眼睛,我正在使用乌龟,所以它会随机移动。
我希望乌龟从墙上弹开,这样它就不会从侧面消失,永远不会再被看见!
我看过: TurtleGraphics Python:Bouncing turtle离开墙壁?并使用了jnylen的一些代码,所以有些功劳归于他!
无论如何,这是我的旧的,可怕的代码(这是为了参考):

I am making a program for somebody, so they can exercise their eyes, and I am using the turtle, so it will move randomly. I want the turtle to bounce off the walls, so that it does not disappear off the sides, never to be seen again! I have looked at: TurtleGraphics Python: Bouncing turtle off the walls? and used some code from jnylen, so some credit goes to him! Anyway, here is my old, and terrible code (This is kept for reference):

from random import *
from turtle import *
penup() # Get rid of those lines it leaves behind!
def main():
    while True: # I want this to be infinite
        a = randint(1,600)
        print a
        b = randint(1,359)
        print b
        c = randint(1,600)
        print c
        d = randint(1,359)
        print d #Checking my randoms
        forward(a)
        edge() # Keep calling edge, so it will bounce on the edge.
        left(b)
        edge() # Keep calling edge, so it will bounce on the edge.
        forward(c)
        edge() # Keep calling edge, so it will bounce on the edge.
        right(d)
        edge() # Keep calling edge, so it will bounce on the edge.

def edge():
    x, y = position()
    top = window_height()/2
    bottom = -top
    right = window_width()/2
    left = -right
    if (x <= left and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
        f = 178 * h
        left(f)
        main()
    elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
        f = -2 * heading()
        left(f)
        main()
    else:
        main()
main()

然而,当我运行它时,我得到了输出:

However, When I run it, I get the output:

189
199
553
152
26
175
597
263
119
201
582
329
231
267
344
28

Traceback (most recent call last):
  File "C:/Users/George/Desktop/Eyes.py", line 39, in <module>
    main()
  File "C:/Users/George/Desktop/Eyes.py", line 15, in main
    edge()
  File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
    main()
  File "C:/Users/George/Desktop/Eyes.py", line 15, in main
    edge()
  File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
    main()
  File "C:/Users/George/Desktop/Eyes.py", line 15, in main
    edge()
  File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
    main()
  File "C:/Users/George/Desktop/Eyes.py", line 15, in main
    edge()
  File "C:/Users/George/Desktop/Eyes.py", line 31, in edge
    left(f)
TypeError: 'int' object is not callable

拜托,有人可以帮我解决这个问题。我已经尝试将 f 设置为 float 字符串 int ,但没有任何作用!这可能是非常明显的事情,所以如果是,抱歉。

Please, can somebody help me fix this. I have tried setting f to a float, a string and an int, but nothing works! This is probably something really obvious, so if it is, sorry.

这是我新的,希望正确的代码:

Here is my new, and hopefully, correct code:

from random import *
from turtle import *
penup() # Get rid of those lines it leaves behind!
def main():
    while True: # I want this to be infinite
        a = randint(1,600)
        print a
        b = randint(1,359)
        print b
        c = randint(1,600)
        print c
        d = randint(1,359)
        print d #Checking my randoms
        forward(a)

        x, y = position()
        top = window_height()/2
        bottom = -top
        right = window_width()/2
        l = -right

        if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
            f = 178 * heading()
            left(f)
            print "1"
        elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
            f = -2 * heading()
            left(f)
            print "2"
        else:
            print "3"

        left(b)

        x, y = position()
        top = window_height()/2
        bottom = -top
        right = window_width()/2
        l = -right
        if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
            f = 178 * heading()
            left(f)
            print "1"
        elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
            f = -2 * heading()
            left(f)
            print "2"
        else:
            print "3"

        forward(c)

        x, y = position()
        top = window_height()/2
        bottom = -top
        right = window_width()/2
        l = -right
        if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
            f = 178 * heading()
            left(f)
            print "1"
        elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
            f = -2 * heading()
            left(f)
            print "2"
        else:
            print "3"


        right(d)

        x, y = position()
        top = window_height()/2
        bottom = -top
        right = window_width()/2
        l = -right
        if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
            f = 178 * heading()
            left(f)
            print "1"
        elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
            f = -2 * heading()
            left(f)
            print "2"
        else:
            print "3"


main()


推荐答案

你覆盖命令到这里的int值:

You overwritten the left command to the int value here:

left = -right

所以当你试图转动你的乌龟

so when you try to turn your turtle with

left(f)

您尝试调用 int 对象,只需重命名本地变量 left

you try to call the int object, simply rename your local variable left

这篇关于让乌龟从墙上反弹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆