2014-10-07 39 views
-1
import turtle 
wn=turtle.Screen() 
wn.bgcolor("white") 


#-Turtle_box- 
alex=turtle.Turtle() 
alex.shape("turtle") 
alex.speed(10) 
alex.pensize(2) 
alex.color("red") 
#-Turtle_box_end- 

#-Turtle_first- 
sapa=turtle.Turtle() 
sapa.shape("turtle") 
sapa.speed(2) 
sapa.pensize(2) 
sapa.color("red") 
#-Turtle_first_end- 

#-Var&list-start- 
liss=[] 
#-Var&list-end- 


#-Turtle_box_start- 
alex.penup() 
alex.forward(300) 
alex.left(90) 
alex.pendown() 

for i in range(300): 
    alex.forward(1) 
    x=alex.position() 
    liss.append(x) 
for i in range(3): 
    alex.left(90) 
    for i in range(600): 
     alex.forward(1) 
     liss.append(alex.position()) 
alex.left(90) 
for i in range(300): 
    alex.forward(1) 
    liss.append(alex.position()) 
#-Turtle_box_end- 


#-Turtle_first_start- 
for i in range(100000): 
    sapa.forward(1) 
    if sapa.position() in liss: 
     sapa.left(150) 

wn.exitonclick 

移动无穷大乌龟问:海龟“亚历克斯”使矩形(盒)600像素* 600像素,写在清单LISS所有坐标。然后乌龟“萨帕”前进,如果乌龟碰墙长方形,他必须向左转150度。而乌龟“萨帕”必须在矩形无限长,但在我的计划乌龟转向左侧一次,然后龟没有看到墙。问题在哪里。甲鱼蟒蛇 - 试图让这矩形

+0

什么是“去无穷大”是什么意思? – user2357112 2014-10-07 04:20:26

+0

海龟沙巴必须打到墙上,然后转向150度,然后他向前走,直到他再次撞上墙并再次转向150度。他必须去无限 – iSapar 2014-10-07 04:44:47

回答

1

由于亚历描绘出一个简单的矩形起始于整数坐标和移动每步1个单位,全部存储在liss[]位置的是整数。但萨帕已经150度一次反弹后,他的坐标不再是整数,所以他们不太可能的值liss[]完全匹配。

解决这个问题的方法是使用四舍五入坐标到int修改的位置的功能。例如,把这个功能您附近的程序的开头:

def int_position(t): 
    x, y = t.position() 
    return int(x + 0.5), int(y + 0.5) 

现在改变所有

liss.append(alex.position())

liss.append(int_position(alex))

,不要忘记修复x=alex.position()liss.append(x)

现在改变萨帕东西

for i in range(100000): 
    sapa.forward(1) 
    if int_position(sapa) in liss: 
     sapa.left(150) 

FWIW,在我的版本的程序,我用sapa.color("blue"),使其更容易地看到发生了什么事情。

由于您使用的Python 2,你应该改变range(100000)等,对xrange(100000),因为它的效率更高,并且使用较少的内存。

0

由于您列表liss所有的值都是整数之后sapa's反弹,所有的坐标值在点(浮点值),则需要将其与liss值相比较之前四舍五入这些值。

+0

嗯,我刚才说的......它可能是更有效的空间,明智的存储坐标'int'了。 – 2014-10-07 08:24:48

+0

是的,后来看到:) – Niyojan 2014-10-07 08:27:39