2010-09-06 18 views
7

Sto scrivendo un Python snake game using curses, ma sto avendo qualche difficoltà a controllare il serpente, il mio codice corrente per controllare il serpente è collocato all'interno del ciclo principale e si presenta così:Come si fa a premere l'ultimo tasto freccia usando curses?

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) 

Tuttavia il codice sembra trattare la i tasti premuti come una coda (in modo che il serpente si fermi quando esaurisce i tasti freccia), mentre in realtà voglio che recuperi l'ultimo tasto freccia premuto.

Come posso recuperare l'ultimo tasto freccia premuto?

+1

Ripensare il vostro disegno (una variabile 'direction' sarebbe adatto) e questo problema scompare. – You

+0

@You: A quanto ho capito, questo non risolverà il mio problema. – Zaz

+0

Ciò dipende completamente dalla modalità di layout del programma. Come è ora, sembra che il movimento dipenda dall'input: una dipendenza più adatta sarebbe quella di avere il movimento dipendente solo dal tempo e il polling (non bloccante) per gli eventi chiave, cambiando una 'direzione 'variabile quando questi si verificano. È così che lo vedo, comunque. – You

risposta

3

Set 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

Ho scoperto che 'curses.halfdelay()' può causare alcuni bug strani, 'screen.nodelay()' + 'time.sleep()' sembra funzionare meglio. – Zaz

Problemi correlati