나는 2048 년에 C 게임을 만들고 있는데 도움이 필요해. 이동은 예컨대 W , , S, D 키를 누름으로써 이루어진다 W은 위로 이동하는 데 사용되며 은 down입니다.C in 2048, moving problems
그러나 문자를 입력 할 때마다 을 입력해야합니다. 수락하려면을 입력하십시오. 누르지 않고 어떻게 작동시킬 수 있습니까? 을 입력 하시겠습니까?
나는 2048 년에 C 게임을 만들고 있는데 도움이 필요해. 이동은 예컨대 W , , S, D 키를 누름으로써 이루어진다 W은 위로 이동하는 데 사용되며 은 down입니다.C in 2048, moving problems
그러나 문자를 입력 할 때마다 을 입력해야합니다. 수락하려면을 입력하십시오. 누르지 않고 어떻게 작동시킬 수 있습니까? 을 입력 하시겠습니까?
사용자가 키보드에서 키를 누르면 true를 반환하는 kbhit() 함수가 있습니다. 이 함수를 사용하여 사용법에 대한 입력을 얻을 수도 있습니다.
char c= ' ';
while(1){
if(kbhit())
c=getch();
if(c=='q')// condition to stop the infinite loop
break;
}
C 표준은'kbhit()'함수를 언급하지 않습니다. 일부 컴파일러 관련 라이브러리 함수를 사용하고 있습니다. – user694733
내 동료 그것은 conio.h에 정의 된 함수입니다. [link] (http://www.programmingsimplified.com/c/conio.h/kbhit) –
@AliAkberFaiz'conio.h'는 비표준 헤더입니다. OP가 Windows OS를 사용하는 경우에만 유용하게 응답하는 창 전용 헤더 파일입니다. – muXXmit2X
이렇게하려면 표준 라이브러리 함수가 없습니다. 대신 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;
}
Ali의 솔루션은 Windows에만 유효하므로이 솔루션은 Unix (및 Linux)에만 유효합니다. –
사용자의 입력을 어떻게 들으십니까? stdin? – xhg
if (kbhit()) 함수를 계속 호출하는 무한 루프를 사용하고 true를 반환하는 경우 getch를 사용하여 반향없이 입력을 얻을 수 있습니다 –
[fgetc] (https://linux.die.net/man/3/fgetc)은 여러분의 친구입니다. – LPs