python curses while循环和超时

时间:2018-01-20 20:03:58

标签: python while-loop timeout curses

我很难理解window.timeout()函数。更具体地说,我正在玩一条"蛇" python中的游戏:

s = curses.initscr()
curses.curs_set(0)
w = curses.newwin()
w.timeout(100)

while True:
    move snake until it hits the wall

据我所知,在这种情况下,超时(100)决定了蛇"移动的速度,即在屏幕上打印出新字符。但是,当我想修改代码时,我就陷入困境,等到有人按下" start"。我写了类似的东西:

w.timeout(100)

while True:
    if w.getch() is not start: 
        stay at the initial screen
    else:
        while True:
            move the snake until it hits the wall

然而,在这种情况下,超时(100)似乎控制程序每次等待w.getch()多长时间,而不是每次蛇移动之间等待多长时间。另外,我注意到在第一个例子中,超时是在while循环之外的顶部声明的。这对我来说很奇怪,因为通常如果我想暂停一个while循环,我会把sleep()放在while循环的底部。

1 个答案:

答案 0 :(得分:2)

如果要在蛇动作之间暂停,可以使用napms等待一定的毫秒数(与sleep不同,不会干扰屏幕更新)。将w.timeout设置为100(毫秒)可能太长。如果您不关心阅读功能键,可以使用nodelayw.getch设置为非阻止,依靠napms来减慢循环。

关于后续评论:在ncurses中,wtimeout函数设置名为 _delay 的窗口的属性,该窗口在getch function内最终作用{ {3}}如果要读取数据,它会提前返回。