2012-07-13 36 views
5

thể trùng lặp:
Non-blocking getch(), ncursesNon chặn getch()

Im cố gắng để làm Tetris trò chơi trong giao diện điều khiển tiêu chuẩn. Tôi cần getch chặn(), vì vậy các khối có thể rơi mà không cần nhấn bất kỳ phím nào. Sẽ tốt hơn nếu có hàm trả về -1 nếu không có phím nào được nhấn, nếu không thì mã khóa.

Tôi rất vui nếu ai đó có thể cho tôi gợi ý hoặc một số liên kết.

+0

Bạn sẽ cần có vòng lặp vô hạn và xử lý các sự kiện _keypress_ bên trong nó. – SingerOfTheFall

+0

@RobKennedy - dupe giả định sử dụng ncurses –

+0

@kittyPL, bạn đang sử dụng hệ điều hành và trình biên dịch nào? Như bạn có thể phỏng đoán từ bỏ phiếu trùng lặp, 'getch()' là một hàm không chuẩn. Các hàm có tên đó được cung cấp trong MS Windows API và trong một thư viện Unix có tên là "curses". Khác với tình cờ chia sẻ một tên, những chức năng đó hoàn toàn không liên quan. –

Trả lời

7

Đó là hệ điều hành cụ thể nhưng thư viện của bạn có thể có một chức năng gọi là kbhit() hoặc tương tự mà sẽ làm điều này

11

Đây là chính xác những gì bạn muốn:

int getch_noblock() { 
    if (_kbhit()) 
     return _getch(); 
    else 
     return -1; 
} 

Về cơ bản kbhit() hiện công việc xác định nếu một phím được nhấn.

Giả sử Windows và Microsoft Visual C++.

+0

Chỉ cần đề cập rằng bạn cần #include để sử dụng _kbhit() – lowtech