簡體   English   中英

Python烏龜wn.ontimer在if語句中

[英]Python turtle wn.ontimer in an if statement

如下所示,我的代碼中包含Turtle命令。 我想在if語句中的這些命令上放置一個計時器。 我當前的代碼如下所示:

'#用戶按下空格時,指示燈變為綠色

'#當光是綠色箭頭移動50像素時

        player1.pendown()
        player1.forward(50)
        player2.pendown()
        player2.forward(50)

每次按空格鍵,箭頭實際上只移動一次。 我想將其變成一個計時器,以便箭頭每60毫秒移動一次,直到用戶再次按下空格鍵。

我嘗試使用wn.ontimer,但我一直在弄亂一些東西。 下面是代碼的外觀:

def advance_state_machine():
    global state_num
    if state_num == 0:
        tess.forward(70)
        tess.fillcolor("red")
        state_num = 1
    else:
        tess.back(70)
        tess.fillcolor("green")
        state_num = 0
        player1.pendown()
        player1.forward(50)
        player2.pendown()
        player2.forward(50)


    wn.onkey(advance_state_machine, "space")

wn.listen()                   
wn.mainloop()

您對問題的描述不一致,並且代碼與您的描述不同步。 這是我認為您說過要執行的代碼:

每60毫秒烏龜向前移動1步,每當按下空格鍵時,烏龜就會在紅色/向前和綠色/向后交替。

我相信這段代碼實現了,一個關鍵事件用於檢測空格鍵,而一個計時器事件則用於使烏龜運動:

from turtle import Turtle, Screen, mainloop

def advance_state_machine():
    global state_num

    wn.onkey(None, 'space')  # avoid overlapping events

    if state_num > 0:
        tess.fillcolor('green')
    else:
        tess.fillcolor('red')

    state_num = -state_num

    wn.onkey(advance_state_machine, 'space')

def advance_tess():
    tess.forward(state_num)
    wn.ontimer(advance_tess, 60)

wn = Screen()
tess = Turtle()
tess.fillcolor('red')

state_num = 1

wn.onkey(advance_state_machine, 'space')
wn.ontimer(advance_tess, 60)
wn.listen()

mainloop()

在嘗試使用空格鍵之前,請確保單擊該窗口使其處於活動狀態。 如果無人看管,烏龜最終將離開屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM