Python 反复按键时,蛇移动得更快

Python 反复按键时,蛇移动得更快,python,curses,Python,Curses,我用python和诅咒库创建了蛇游戏。但是我在程序中发现了错误。反复按键时,蛇移动得更快。这是代码的一部分 # standard initialization s = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK) curses.noecho() curses.curs_set(0) sh, sw = 30, 60 w = curses.newwin

我用python和诅咒库创建了蛇游戏。但是我在程序中发现了错误。反复按键时,蛇移动得更快。这是代码的一部分

# standard initialization
s = curses.initscr()

curses.start_color()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK)

curses.noecho()
curses.curs_set(0)
sh, sw = 30, 60
w = curses.newwin(sh, sw, 0, 0)
w.keypad(1)
w.timeout(100)
w.nodelay(1)

#Snake moving loop

while True:

next_key = w.getch()

#Check if user is pressing the key or not, or pressing the opposite direction key
if (next_key == -1):
    key = key
elif (key == curses.KEY_DOWN and next_key == curses.KEY_UP) or (key == curses.KEY_UP and next_key == curses.KEY_DOWN):
    key = key
elif (key == curses.KEY_LEFT and next_key == curses.KEY_RIGHT) or (key == curses.KEY_RIGHT and next_key == curses.KEY_LEFT):
    key = key
else:
    key = next_key

#Current location of the head
new_head = [snake[0][0], snake[0][1]]

 #moving up, down,left,right according to the key
if key == curses.KEY_DOWN:
    new_head[0] += 1
if key == curses.KEY_UP:
    new_head[0] -= 1
if key == curses.KEY_LEFT:
    new_head[1] -= 1
if key == curses.KEY_RIGHT:
    new_head[1] += 1

snake.insert(0, new_head)
我认为这是因为在按下键时多次调用getch,并且在不等待超时的情况下进入移动循环

我尝试了curses.napms100,curses.cbreak1,curses.halfdelay1没有任何效果。

调用s.nodelay0将nodelaymode设置为0,这意味着false,因此存在延迟,它位于错误的窗口对象s而不是w上

您正在w窗口实例上调用getch,因此我相信您必须调用w.nodelay1才能启用nodelay模式

您还必须修改输入循环,以识别如果getch返回-1,则表示未按下任何键。这将是通常的结果,因为按下一个键需要一秒钟的时间,但是这个循环现在将每秒运行数百甚至数千次

编辑:

我想我有点误解了你的问题。上面的代码很好,但它不能解决核心问题。您可能希望在输入循环中添加一个恒定的延迟,以便更多的按键不允许更多的操作

也许是这样的:

while True:
    keypress = w.getch()
    if keypress != -1:
        # process keypress
    sleep(100 milliseconds)

非常感谢您的回复,但它仍然无法解决多次按下时加速的问题。我已经更新了移动蛇的代码。再次感谢你。