2017-03-27 8 views
0

私は2048ゲームをCで作っています。私は助けが必要です。移動は、W,A,S,Dなどのキーを押して行います。 Wは、アップ用です。Sダウンです。C in 2048、moving with problems

ただし、すべての文字の後にを入力すると、それを受け入れるにはと入力する必要があります。 を入力しないと、どうやって動作させることができますか?

+1

どのようにユーザーの入力を聞きますか? stdin? – xhg

+0

if(kbhit())という名前の関数を呼び出し続けている無限ループを使用し、trueを返す場合は、getchを使用してエコーなしで入力を得ることができます –

+0

[fgetc](https://linux.die.net/man/3/fgetc)はあなたの友だちです – LPs

答えて

2

あなたが求めているのはkbhit()という名前の関数で、ユーザーがキーボードのキーを押すとtrueを返します。この関数を使用して、同じように使用するための入力を得ることができます

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を使用している場合にのみ有用な答えを出すのは、Windowsのみのヘッダーファイルです。 – 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)でのみ有効です。 –