2010-09-06 57 views
7

我正在寫一個Python snake game using curses,但我有一些難以控制的蛇,我的電流控制蛇代碼放置在主循環內,並且看起來是這樣的:如何獲得使用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) 

然而代碼似乎對待鍵作爲一個按鈕被按下(所以蛇在箭頭按下時會停止),而我實際上想讓它檢索被按下的最後一個箭頭鍵。

如何檢索按下的最後一個箭頭鍵?

+1

重新考慮你的設計('direction'變量將是合適的),而這個問題消失。 – You 2010-09-06 13:30:02

+0

@You:據我瞭解,這不能解決我的問題。 – Zaz 2010-09-06 21:16:28

+0

這完全取決於你如何佈置你的程序。現在看起來,運動取決於輸入 - 更合適的依賴關係是運動僅取決於時間,並對關鍵事件進行輪詢(非阻塞),當發生這種情況時更改變量「方向」。無論如何,我就是這麼看的。 – You 2010-09-06 21:37:38

回答

3

套裝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

我發現'curses.halfdelay()'會導致一些奇怪的錯誤,'screen.nodelay()'+'time.sleep()'似乎更好。 – Zaz 2010-09-08 19:46:13

相關問題