私は2048ゲームをCで作っています。私は助けが必要です。移動は、W,A,S,Dなどのキーを押して行います。 Wは、アップ用です。Sダウンです。C in 2048、moving with problems
ただし、すべての文字の後にを入力すると、それを受け入れるにはと入力する必要があります。 を入力しないと、どうやって動作させることができますか?
私は2048ゲームをCで作っています。私は助けが必要です。移動は、W,A,S,Dなどのキーを押して行います。 Wは、アップ用です。Sダウンです。C in 2048、moving with problems
ただし、すべての文字の後にを入力すると、それを受け入れるにはと入力する必要があります。 を入力しないと、どうやって動作させることができますか?
あなたが求めているのはkbhit()という名前の関数で、ユーザーがキーボードのキーを押すとtrueを返します。この関数を使用して、同じように使用するための入力を得ることができます
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を使用している場合にのみ有用な答えを出すのは、Windowsのみのヘッダーファイルです。 – 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