2010-09-06 18 views
7

Piszę Python snake game using curses, ale mam pewne problemy kontroli węża, mój aktualny kod do kontrolowania węża jest umieszczony wewnątrz pętli głównej i wygląda następująco:Jak uzyskać naciśnięcie ostatniego klawisza ze strzałką za pomocą przekleństw?

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) 

Jednak kod wydaje się traktować klawisze wciśnięte jako que (więc wąż zatrzyma się, gdy zabraknie strzałek), podczas gdy ja naprawdę chcę, aby pobrać ostatni klawisz strzałki, który został naciśnięty.

Jak mogę odzyskać ostatnio wciśnięty klawisz strzałki?

+1

przemyśleć projekt (a 'zmienna direction' byłby odpowiedni) i ten problem zniknie. – You

+0

@ You: Jak rozumiem, to nie rozwiąże mojego problemu. – Zaz

+0

To całkowicie zależy od tego, jak układasz swój program. Tak jak obecnie, wygląda na to, że ruch zależy od danych wejściowych - bardziej odpowiednia zależność będzie polegać na tym, że ruch będzie zależny od czasu, i odpytywania (bez blokowania) dla kluczowych zdarzeń, zmieniając zmienną "kierunek", gdy wystąpią. I tak to widzę. – You

Odpowiedz

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

Odkryłem, że 'curses.halfdelay()' może powodować pewne dziwne błędy, 'screen.nodelay()' + 'time.sleep()' wydaje się działać lepiej. – Zaz

Powiązane problemy