2013-10-01 113 views
1

我們剛剛開始在uni編程。我們的任務之一是創建一個帶有龜的L系統的分形樹。這一個:如何讓烏龜記住它在L系統中的位置?

1. variables : X F 
2. constants : + − [ ] 
3. start : X 
4. rules : (X → F-[[X]+X]+F[+FX]-X), (F → FF) 
5. angle : 25° 

代碼:

def fraktal_plante(padde, depth): 
    Xmerke(padde, depth-1)  # X 

def Xmerke(padde, depth): 
    if depth > 0:# X -> 
     padde.forward(10)   #  F 
     padde.right(25)   #  - 
     padde.setposition() 
     padde.setheading()   #   [ 
     padde.setheading()   #   [ 
     Xmerke(padde, depth-1)  #   X 
     padde.heading() 
     padde.goto()    #    ] 
     padde.left(25)    #    + 
     Xmerke(padde, depth-1)  #     X 
     padde.heading()   #     ] 
     padde.left(25)    #     + 
     padde.forward(10)   #     F 
     padde.setposition() 
     padde.setheading()   #      [ 
     padde.left(25)    #      + 
     padde.forward(10)   #      F 
     Xmerke(padde, depth-1)  #       X 
     padde.heading() 
     padde.goto()    #       ] 
     padde.right(25)   #       - 
     Xmerke(padde, depth-1)  #        X 

def Fmerke (padde, depth): 
    if depth > 0:     # Y -> 
     padde.forward(10)   #   F 
     padde.forward(10)   #    F 

正如你可以看到它的混亂。我想知道如何讓烏龜記住它的位置和標題「  [ 」,然後再返回到它「 ]  」。

我真的很陌生,所以請以清晰易懂的方式來理解。

回答

2

你可以通過致電turtle.heading()得到一隻烏龜的當前標題。同樣,其當前位置返回turtle.position()。因此,您可以使用它們來保存其當前狀態,然後再使用這些值來恢復它。下面是一個簡單的例子來說明我的意思:

from turtle import * 

def get_turtle_state(turtle): 
    return turtle.heading(), turtle.position() 

def set_turtle_state(turtle, state): 
    turtle.setheading(state[0]) 
    turtle.setposition(state[1][0], state[1][1]) 

if __name__ == '__main__': 
    turtle = Turtle() 
    saved_state = get_turtle_state(turtle) 
    print 'saved state:', saved_state # saved state: (0.0, (0.00,0.00)) 

    turtle.forward(100) 
    turtle.left(90) 
    print 'changed state:', get_turtle_state(turtle) # changed state: (90.0, (100.00,0.00)) 

    set_turtle_state(turtle, saved_state) 
    print 'restored state:', get_turtle_state(turtle) # restored state: (0.0, (0.00,0.00)) 

    mainloop()