2010-12-08 1 views
0

저는 현재 C++로 고전적인 "뱀"프로그램과 매우 유사한 프로그램을 약간 수정하고 있습니다. 나는 ctime에 기반하여 두 번째로 5 번 화면을 업데이트 할 수 있도록 작성했습니다. 처리 할 수 ​​있다면 더 많은 정보를 제공 할 것입니다. 내가하고자하는 한 가지는 프로그램이 .h 파일 "currkeypressed"에 변수를 갖도록 만드는 것입니다. 이 변수는 사용자가 현재 누르고있는 키를 보유 할 것이며 뱀 헤드는 그 방향으로 갈 것입니다. 뱀의 각 노드는 별도의 객체가되므로 currkeypressed는 머리에만 영향을 미칩니다. 방향 및 위치 데이터는 각 업데이트시 노드에서 노드로 전달됩니다.라이브 방식으로 키보드 입력을 수락하는 방법은 무엇입니까?

내 질문은 : 키를 누르거나 특정 간격으로 cin으로 만 업데이트하는 대신이 데이터를 일정하게 유지하도록 프로그램을 어떻게 얻을 수 있습니까? 일종의 for 루프에서 화살표 키의 ascii 값을 받아 들일 수 있다는 것을 알고 있지만 키를 누르고 있으면 루프가 길어서 언론을 놓칠 수 있습니다. 아무도 이것을하는 방법을 아는가?

편집 : 나는 당신이 지향 간단한 선이나 문자의 방향 입력을 넘어보고되면

답변

1

가장 간단한 방법은 ncurse 라이브러리를 사용하는 것입니다. 그러나

, 당신이 선호하는 경우 "원시"리눅스 프로그래밍, 당신은 사용할 수 있습니다 selectgetchar :

#include <sys/time.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() { 
     fd_set readfs; 
     struct timeval timeout; 
     int res, key; 

     while (1) { 
     /* .. do something else .. */ 

     FD_SET(0, &readfs); /* 0 is STDIN */ 
     timeout.tv_usec = 10; /* milliseconds */ 
     timeout.tv_sec = 0; /* seconds */ 
     res = select(maxfd, &readfs, NULL, NULL, &timeout); 
     if (res) { 
      /* key pressed */ 
      key = getchar(); 
      if (key == 'A') { /* blar */ } 
     } 
     } 
} 
+0

usec은 마이크로 초 (밀리 초가 아님)를 의미합니다. 나는 이걸 유령에 대한 맨 페이지 때문에 말합니다. –

+0

오류 : 'maxfd'내 방법은 당신이 그것을 위해 투표하고 또 다른 문제가있는 경우 지금 나를 주시기 바랍니다 근무하는 경우 –

1

더 정확하게하기 위해 리눅스 OS, 우분투를 사용하고, 당신은 사용자 입력 장치의 세부 사항에 있습니다. 각 운영 체제에는 keydown 및 keyup과 같은 이벤트를 프로그램에 알리는 특별한 메커니즘이 있습니다.

당신이있는 프로그래밍 환경에 태그 추가 답변을 얻으려면 : 등 MSWindows, 리눅스, 안드로이드, 맥 OS를

+0

수정 됨. Linux OS –

+0

XWindows, Gnome 또는 일반 터미널 창입니까? – wallyk

+0

터미널. 나는 뱀 "음식"이 마침표로 화면에 나타나고, 뱀 머리는 @이며, 몸은 o (s)의 무리라는 알고리즘을 작성했습니다. –

-1

가장 간단한 방법은 스레드를하는 것 (정말 간단하지가 있지만) 사용자 입력을 캡처 한 다음 뱀의 머리를 알려주는 이벤트 구동 시스템을 사용하거나 뱀이 현재 키를 폴링 할 수 있습니다.

0

라이브러리 conio.h을 사용할 수 있으며 라이브 얻기 위해 루프에서 함수 _getch()을 사용할 수 있습니다 아무런 제한없이 입력.

+0

을 (먼저이 기능에 사용) 선언되지 않은 : – Weaboo