2014-10-07 64 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