我想通過按空格鍵來啓動和停止龜的程序。我得到了啓動烏龜移動的代碼,但是當我再次按下它時,它並沒有停止。它似乎只是提高了速度。這是我的編碼要求和我輸入的代碼。用空格鍵啓動和停止Python龜
創建一個有三個功能的海龜程序來控制海龜。創建一個叫做turnLeft的函數,當鍵盤上的右箭頭被按下時,它會將烏龜向左旋轉90度。創建一個叫做turnRight的函數,當按下右箭頭時,它將右旋90度。創建第三個函數move(),當空格鍵被按下時向前移動烏龜,然後在空格鍵再次被按下時停止烏龜。
import turtle
turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess moves in space")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
def leftTurtle():
tess.left(90)
def rightTurtle():
tess.right(90)
state_num = 0
def advance_state_machine():
global state_num
if state_num == 0:
tess.penup()
state_num = 1
else:
tess.pendown()
tess.forward(2)
state_num = 0
wn.ontimer(advance_state_machine, 25)
def exitWindow():
wn.bye()
wn.onkey(advance_state_machine, "space")
wn.onkey(exitWindow, "q")
wn.onkey(leftTurtle, "Left")
wn.onkey(rightTurtle, "Right")
wn.listen()
wn.mainloop()
此外,重命名'state_num'到'should_draw'並使其成爲一個布爾使代碼讀取更好,並且切換成爲單行:'should_draw = not_draw_不是。 – 9000
謝謝@Claudio和9000你們都很棒...我對編碼和python非常陌生,而這個人正在踢我的屁股。這工作完美。還有一個問題,是否可以將'def movementControl():'和'def advance_state_machine():'合併爲一個函數? –
@DavidWilliam:我不這麼認爲,你需要在不同的時間調用'advance_state_machine'和'movementControl'。 (另外,爲了保持一致性,讓它們既可以是camelCase也可以是兩個underscore_case。) – 9000