2010-09-06 10 views
7

Ich bin ein Python snake game using curses zu schreiben, aber ich einige Probleme mit der Schlange zu steuern, meine aktuellen Code für die Schlange zu steuern ist innerhalb der Hauptschleife gelegt und sieht wie folgt aus:Wie bekommt man die letzte Pfeiltaste mit Curses gedrückt?

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) 

jedoch der Code der zu behandeln scheint Tasten gedrückt als que (so die Schlange wird aufhören, wenn es keine Pfeil-drückt), während ich eigentlich will, dass es die letzte Pfeiltaste abgerufen, die gedrückt wurde.

Wie kann ich die zuletzt gedrückte Pfeiltaste abrufen?

+1

Rethink Ihr Design (eine 'direction' Variable würde geeignet sein), und dieses Problem verschwindet. – You

+0

@You: Wie ich es verstehe, wird das mein Problem nicht beheben. – Zaz

+0

Das hängt vollständig davon ab, wie Sie Ihr Programm gestalten. Wie es jetzt aussieht, hängt Bewegung von der Eingabe ab - eine geeignetere Abhängigkeit wäre es, die Bewegung nur von der Zeit abhängig zu machen und für Schlüsselereignisse abzufragen (nicht blockierend), wenn sie eine Variable "Richtung" ändern. So sehe ich es jedenfalls. – You

Antwort

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

Ich habe entdeckt, dass 'curses.halfdelay()' einige seltsame Fehler verursachen kann, 'screen.nodelay()' + 'time.sleep()' scheint besser zu funktionieren. – Zaz

Verwandte Themen