2013-09-24 85 views
3

我該如何進行碰撞?所以龜/蛇不會離開盒子。試圖讓他們留在(-200,-200)和(200,200)之內。Python龜碰撞

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:我對龜很不好。我從來沒有學過烏龜,我也學過Python。

+0

你想在碰到邊緣時發生什麼?順便說一句,我見過的最酷的海龜節目。 – Veedrac

+0

這是一項家庭作業嗎?如果是這樣,你真的應該在你的問題中澄清。 Stackoverflow可以給你指針,但要求不止於此是不道德的和作弊的。 龜中沒有魔法命令來幫助你做你想做的事情......你必須檢查每個遞歸步驟/迭代與盒子的相對位置。 – yasashiku

+0

@ yasashiku是這是一個重要的。此外,這將如何作弊,因爲我需要幫助如何做到這一點。我不知道從哪裏開始。 – Singh2013

回答

0

在遞歸版本和迭代版本中,您都在隨機指定一個隨機方向並向前移動一個隨機長度。如果你想避開邊界框,這些數字需要知道邊界框在那裏。

根據您想要的行爲類型,您可以做的事情很少。可能最簡單的方法是檢查新座標是否在框外,如果是,則適當更改路線。

如果您希望逐漸避開此框,您可以在轉向或移動決策中考慮到最近邊緣的距離。

無論哪種情況,turtle.pos()都會有所幫助。

+0

感謝您的提示。我用setposition(),如果我現在明白了。謝謝! – Singh2013

1

我建議一個大的,如果這樣的:

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

這爲我工作!