2017-10-10 42 views
0

我需要永久性地让窗口边缘的龟反弹,唯一的问题是我每次遇到龟时都要设置龟的前进方向一堵墙。通过将任何设置的号码放入前进中,它将在几个循环中关闭屏幕。我需要将哪些功能置于前向功能中,以确保它只能走到墙壁并“反弹”?使用python/turtle创建代码将龟离开墙壁

import turtle 

window = turtle.Screen() 

# Create a turtle and name it bob. 
bob = turtle.Turtle() 
window.reset() 
window.setworldcoordinates(-50,-50,50,50) 
bob.left(1) 
bob.fd(51) 
bob.speed(10) 
while True: 
    xBob = bob.xcor() 
    yBob = bob.ycor() 
    print(xBob,yBob) 
    if xBob <= -50: 
     heading = bob.heading() 
     bob.setheading(180 - heading) 
     bob.fd() 
    elif xBob >= 50: 
     heading = bob.heading() 
     bob.setheading(180 - heading) 
     bob.fd() 
    elif yBob <= -50: 
     heading = bob.heading() 
     bob.setheading(180 - heading) 
     bob.fd() 
    elif yBob >= 50: 
     heading = bob.heading() 
     bob.setheading(180 - heading) 
     bob.fd() 
window.exitonclick() 
+1

欢迎来到StackOverflow。你写的问题含糊而宽泛。请添加更多关于您的问题的细节。你显示的代码如何不适合你?你想要什么*特定*的东西不同? –

+0

编辑它,并使其更清晰一点。 – Matt

回答

0

听起来就像你想要一个turtle以合理的角度来回跳动。您的帖子中隐藏了一些问题。首先,不要计算距离墙的距离,你可以继续向前移动1直到碰到墙。这将是近似的;如果你需要它击中墙刚好,那么你需要使用距离公式。此外,当您敲击顶部和底部墙壁时,您改变方向的逻辑已关闭。我还做了一些其他更改,如制作x和y尺寸变量。

import turtle 

window = turtle.Screen() 

# Starting parameters 
MAX_X = 50 
MAX_Y = 50 
initial_angle = 5 
speed = 10 

# Create a turtle and name it Bob. 
Bob = turtle.Turtle() 
window.reset() 
window.setworldcoordinates(-MAX_X,-MAX_Y,MAX_X,MAX_Y) 
Bob.left(initial_angle) 
#Bob.fd(51) No need for this 
Bob.speed(speed) 
while True: 
    xBob = Bob.xcor() 
    yBob = Bob.ycor() 
    print(xBob,yBob) 
    if abs(xBob) >= MAX_X: # Use abs() to capture both walls 
     heading = Bob.heading() 
     Bob.setheading(180 - heading) 
    if abs(yBob) >= MAX_Y: 
     heading = Bob.heading() 
     Bob.setheading(-heading) 
    Bob.fd(1) 
window.exitonclick() 
+0

感谢您清除了一部分,但是当乌龟撞到一个角落时,它会在窗口边界上失控,直到它到达另一边。 – Matt