为什么当我评论启用 stdscr.nodelay() 的行时没有任何变化



我正在编写一个贪吃蛇游戏...是的,我知道,多么原始。

我的问题如下:我通过写入 stdscr.nodelay(1) 启用了 nodelay((,然后我确实通过编写 stdscr.timeout(100) 将 timeout(( 设置为 100 毫秒。发生我所期望的。一切都很好。

但是当我通过在行首添加一个#来评论我启用 nodelay(( 的行以查看会发生什么时,当我执行程序时没有任何变化。为什么???

import curses
from curses import textpad
from constants import *
def main(stdscr):
    curses.curs_set(0)
#    stdscr.nodelay(1)
    stdscr.timeout(int(1000 / 15))
    screen_height, screen_width = stdscr.getmaxyx()
    if screen_height < 40 or screen_width < 168:
        raise ValueError("Your terminal screen must be 40 rows and 168 columns minimum. ")
    snake = [
        [screen_height // 2, screen_width // 2]
    ]
    stdscr.addch(snake[0][0], snake[0][1], "#")    
    direction = None
    while True:
        key = stdscr.getch()
        if direction == curses.KEY_RIGHT or key == curses.KEY_RIGHT:
            snake[0][1] += 1
            direction = curses.KEY_RIGHT
        if direction == curses.KEY_LEFT or key == curses.KEY_LEFT:
            snake[0][1] -= 1
            direction = curses.KEY_LEFT
        if direction == curses.KEY_UP or key == curses.KEY_UP:
            snake[0][0] -= 1
            direction = curses.KEY_UP
        if direction == curses.KEY_DOWN or key == curses.KEY_DOWN:
            snake[0][0] += 1
            direction = curses.KEY_DOWN
        stdscr.clear()
        stdscr.addch(snake[0][0], snake[0][1], "#")    
curses.wrapper(main)

期望发生的是,每次我做 stdscr.getch(( 时,程序现在都会等待用户的输入

但实际发生的是,程序的行为就像nodelay仍然处于启用状态,因此它不会等待任何输入。

timeout执行类似于nodelay的操作:

timeout wtimeout 例程设置阻塞或非阻塞读取 给定的窗口。

nodelay选项使 getch 成为非阻塞调用。

(您可能没有注意到小于十分之一秒和根本没有延迟之间的区别(。

相关内容

最新更新