如何在按键时创建暂停功能

How to create a pause function when pressing a key

我正在尝试发明一种在按下 P 时暂停游戏的功能。我还希望它在游戏 运行 时显示在屏幕上。但是,我不知道如何继续我的职能。另外,是否可以在不使用 import time 的情况下执行此操作?

用我的代码,开始游戏后,P只暂停其中一个方块,它再也不会移动了。

def play():
    onkey(None,"space")
    clear()
    hanoi(6, t1, t2, t3)
    write("press STOP button to exit",
          align="center", font=("Courier", 16, "bold"))

def pause():
    onkey(None,"p")
    clear()
    hanoi(6, t1, t2 ,t3)
    write("Press P to Pause",
          align="center", font=("Courier", 16, "bold"))
    if onkeypress("p"):
        Pause = True

def main():
    global t1, t2, t3
    ht(); penup(); goto(0, -225)   # writer turtle
    t1 = Tower(-250)
    t2 = Tower(0)
    t3 = Tower(250)
    # make tower of 6 discs
    for i in range(6,0,-1):
        t1.push(Disc(i))
    # prepare spartanic user interface ;-)
    write("Aleksandar Stefanov's ToH. Press spacebar to start game",
          align="center", font=("Courier", 16, "bold"))
    onkey(play, "space")
    onkey(pause, "p")
    listen()
    return "EVENTLOOP"

if __name__=="__main__":
    msg = main()
    print(msg)
    mainloop()

您应该跟踪游戏状态以在按下 p

时切换它

类似的东西:

def pause():
    if (GameStatus == 'play'):
         GameStatus = 'pause'
         #GAME IS ON PAUSE
    elif (GameStatus == 'pause'):
         GameStatus = 'play'
         #GAME IS ON PLAY

def main():
   global GameStatus
   GameStatus = 'play'
   onkey(pause, "p")

如果您想暂停 onpress 和取消暂停 onrelease,您可以使用 onkeypressonkeyrelease 注册您的活动

类似的东西:

def pause():
    if (GameStatus == 'play'):
         GameStatus = 'pause'
         #GAME IS ON PAUSE

def unpause():
    if (GameStatus == 'pause'):
         GameStatus = 'play'
         #GAME IS ON PLAY

def main():
   global GameStatus
   GameStatus = 'play'
   onkeypress(pause, "p")
   onkeyrelease(unpause, "p")

我刚刚完成了这个工作,在开始工作之后我将它简化为这个。它通过将内容包装在 if 语句中来暂停 while 循环。

#screen.tracer is set to 0
#variable for if statement
PAUSED = False
#function to change variable
def pause_game():
    global PAUSED
    if PAUSED:
        PAUSED = False
    elif not PAUSED:
        PAUSED = True

#function tied to key press
screen.onkeypress(pause_game, "space")

#if statement I wrapped all content of while game_is_on loop
if not PAUSED:
     #(perform all function of game)
elif PAUSED:
    time.sleep(.01)
    screen.update()

C/P将此代码添加到我的贪吃蛇游戏中,效果相同。