2017-03-27 4 views
0

나는 2048 년에 C 게임을 만들고 있는데 도움이 필요해. 이동은 예컨대 W , , S, D 키를 누름으로써 이루어진다 W은 위로 이동하는 데 사용되며 은 down입니다.C in 2048, moving problems

그러나 문자를 입력 할 때마다 을 입력해야합니다. 수락하려면을 입력하십시오. 누르지 않고 어떻게 작동시킬 수 있습니까? 을 입력 하시겠습니까?

+1

사용자의 입력을 어떻게 들으십니까? stdin? – xhg

+0

if (kbhit()) 함수를 계속 호출하는 무한 루프를 사용하고 true를 반환하는 경우 getch를 사용하여 반향없이 입력을 얻을 수 있습니다 –

+0

[fgetc] (https://linux.die.net/man/3/fgetc)은 여러분의 친구입니다. – LPs

답변

2

사용자가 키보드에서 키를 누르면 true를 반환하는 kbhit() 함수가 있습니다. 이 함수를 사용하여 사용법에 대한 입력을 얻을 수도 있습니다.

char c= ' '; 
while(1){ 
    if(kbhit()) 
     c=getch(); 
    if(c=='q')// condition to stop the infinite loop 
     break; 
} 
+4

C 표준은'kbhit()'함수를 언급하지 않습니다. 일부 컴파일러 관련 라이브러리 함수를 사용하고 있습니다. – user694733

+0

내 동료 그것은 conio.h에 정의 된 함수입니다. [link] (http://www.programmingsimplified.com/c/conio.h/kbhit) –

+2

@AliAkberFaiz'conio.h'는 비표준 헤더입니다. OP가 Windows OS를 사용하는 경우에만 유용하게 응답하는 창 전용 헤더 파일입니다. – muXXmit2X

2

이렇게하려면 표준 라이브러리 함수가 없습니다. 대신 termios 함수를 사용하여 터미널을 제어하고 입력을 읽은 후 다시 설정해야합니다.

단락 기호 here을 기다리지 않고 stdin에서 입력을 읽는 코드가 나타났습니다.

Linux에서 표준 C 컴파일러를 사용하는 경우 getch()를 쉽게 사용할 수 없습니다. 따라서 링크에 코드를 구현했으며이 코드를 붙여 넣고 getch() 함수를 정상적으로 사용해야합니다.

#include <termios.h> 
#include <stdio.h> 

static struct termios old, new; 

/* Initialize new terminal i/o settings */ 
void initTermios(int echo) 
{ 
    tcgetattr(0, &old); /* grab old terminal i/o settings */ 
    new = old; /* make new settings same as old settings */ 
    new.c_lflag &= ~ICANON; /* disable buffered i/o */ 
    new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */ 
    tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */ 
} 

/* Restore old terminal i/o settings */ 
void resetTermios(void) 
{ 
    tcsetattr(0, TCSANOW, &old); 
} 

/* Read 1 character - echo defines echo mode */ 
char getch_(int echo) 
{ 
    char ch; 
    initTermios(echo); 
    ch = getchar(); 
    resetTermios(); 
    return ch; 
} 

/* Read 1 character without echo */ 
char getch(void) 
{ 
    return getch_(0); 
} 

int main() 
{ 
    int ch; 

    ch = getch();//just use this wherever you want to take the input 

    printf("%d", ch); 

    return 0; 
} 
+2

Ali의 솔루션은 Windows에만 유효하므로이 솔루션은 Unix (및 Linux)에만 유효합니다. –