2013-09-24 4 views
3

어떻게 충돌을합니까? 그래서 거북이/뱀은 상자 밖으로 나가지 않습니다. 그들 (-200, -200)과 (200, 200) 안에 머무르려고합니다.파이썬 거북이 충돌

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() 

도움이 필요하십니까? 고맙습니다. 그래서, 나는 이것을 끝내려고 노력하고 있습니다. 예, 제가 끝내려고하는 연구실 숙제입니다. 여러분이 저를 도울 수 있거나 제게 할 수있는 일을 제공 할 수 있다면 좋을 것입니다. 추신 : 나는 거북이에 나쁘다. 나는 전에 거북이를 배운 적이 없으며, 나는 파이썬을 조금 배웠다.

+0

가장자리에 닿으면 어떻게 될까요? 내가 본 것 중 가장 멋진 거북이 프로그램, btw. – Veedrac

+0

숙제가 있습니까? 그렇다면 귀하의 질문에 그 사실을 분명히 밝혀야합니다. Stackoverflow 당신에게 포인터를 줄 수 있지만 그 이상을 요구하는 것은 비 윤리적이고 부정 행위입니다. 거북이에는 원하는 것을 수행 할 수있는 마법 명령이 없습니다. 각 재귀 단계/반복이 상자와 관련이 있는지 확인해야합니다. – yasashiku

+0

@yasashiku 예예요. 이것은 hw입니다. 또한이 작업을 수행하는 방법에 대한 도움이 필요하기 때문에 이것이 어떻게 부정 행위가 될 수 있습니까? 어디서부터 시작해야할지 모르겠습니다. – Singh2013

답변

0

재귀 버전과 반복 버전 모두에서 임의의 방향을 돌리고 앞으로 임의의 길이 앞으로 이동합니다. 테두리 상자를 사용하지 않으려는 경우이 숫자는 테두리 상자가 있는지 확인해야합니다.

원하는 동작의 종류에 따라 수행 할 수있는 일은 거의 없습니다. 아마도 새 좌표가 상자 밖에 있다면 수표를 넣는 것이 가장 쉽습니다. 그렇다면 적절하게 코스를 변경하십시오.

점차적으로 상자를 피하려면 회전 또는 이동 결정에서 가장 가까운 가장자리까지의 거리를 고려해야합니다.

두 경우 모두 turtle.pos()가 유용합니다.

+0

팁 주셔서 감사합니다. 나는 setposition()과 if 문을 사용했다. 나는 지금 그것을 얻었다. 감사! – Singh2013

1

나는 큰 경우 같은 제안 :

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

이 나를 위해 일했다!