2010-09-06 24 views
7

Estoy escribiendo un Python snake game using curses, pero estoy teniendo algunos problemas para el control de la serpiente, mi código actual para el control de la serpiente se coloca dentro del bucle principal y se ve así:¿Cómo se presiona la última tecla de flecha usando maldiciones?

while True: 
    char = screen.getch() 
    if char == 113: exit() # q 
    elif char == curses.KEY_RIGHT: snake.update(RIGHT) 
    elif char == curses.KEY_LEFT: snake.update(LEFT) 
    elif char == curses.KEY_UP: snake.update(UP) 
    elif char == curses.KEY_DOWN: snake.update(DOWN) 
    else snake.update() 
    time.sleep(0.1) 

Sin embargo, el código parece tratar el teclas presionadas como una que (por lo que la serpiente se detendrá cuando se agota la presión de las flechas), mientras que realmente quiero que recupere la última tecla de flecha que se presionó.

¿Cómo puedo recuperar la última tecla de flecha que se presionó?

+1

, reflexionar sobre el diseño (una variable 'direction' sería adecuado) y este problema desaparece. – You

+0

@You: según tengo entendido, eso no solucionará mi problema. – Zaz

+0

Eso depende completamente de cómo organices tu programa. Tal como está ahora, parece que el movimiento depende de la entrada; una dependencia más adecuada sería hacer que el movimiento dependa únicamente del tiempo, y sondear (no bloquear) eventos clave, cambiando una 'dirección' variable cuando esto ocurra. Así es como lo veo, de todos modos. – You

Respuesta

3

Conjunto screen.nodelay(1):

screen.nodelay(1) 
while True: 
    char = screen.getch() 
    if char == 113: break # q 
    elif char == curses.KEY_RIGHT: snake.update(RIGHT) 
    elif char == curses.KEY_LEFT: snake.update(LEFT) 
    elif char == curses.KEY_UP: snake.update(UP) 
    elif char == curses.KEY_DOWN: snake.update(DOWN) 
    else: snake.update() 
    time.sleep(0.1) 
+1

He descubierto que 'curses.halfdelay()' puede causar algunos errores extraños, 'screen.nodelay()' + 'time.sleep()' parece funcionar mejor. – Zaz

Cuestiones relacionadas