我正在编写一个贪吃蛇游戏...是的,我知道,多么原始。
我的问题如下:我通过写入 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 成为非阻塞调用。
(您可能没有注意到小于十分之一秒和根本没有延迟之间的区别(。