2010-09-06 26 views
7

Tôi đang viết một Python snake game using curses, nhưng đang gặp một số rắc rối kiểm soát con rắn, mã hiện tại của tôi để kiểm soát con rắn được đặt bên trong vòng lặp chính và trông như thế này:Làm thế nào để bạn có được phím mũi tên cuối cùng được nhấn bằng cách sử dụng các lời nguyền?

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) 

Tuy nhiên mã dường như đối xử với các phím được bấm thành một hàng đợi (vì vậy con rắn sẽ dừng lại khi nó hết mũi tên), trong khi tôi thực sự muốn nó truy xuất phím mũi tên cuối cùng được nhấn.

Làm cách nào để truy xuất phím mũi tên cuối cùng đã được nhấn?

+1

suy nghĩ lại thiết kế của bạn (một biến 'direction' sẽ là phù hợp) và vấn đề này sẽ biến mất. – You

+0

@You: Theo tôi hiểu, điều đó sẽ không khắc phục được sự cố của tôi. – Zaz

+0

Điều đó hoàn toàn phụ thuộc vào cách bạn bố trí chương trình của mình. Như bây giờ, có vẻ như chuyển động phụ thuộc vào đầu vào - một phụ thuộc phù hợp hơn sẽ có chuyển động phụ thuộc vào thời gian, và thăm dò (không chặn) cho các sự kiện quan trọng, thay đổi 'hướng' biến khi xảy ra. Đó là cách tôi nhìn thấy nó, anyway. – You

Trả lời

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

Tôi đã phát hiện ra rằng 'curses.halfdelay()' có thể gây ra một số lỗi lạ, 'screen.nodelay()' + 'time.sleep()' dường như hoạt động tốt hơn. – Zaz

Các vấn đề liên quan