2017-03-27 6 views
0

Ich mache 2048 Spiel in C und ich brauche Hilfe. Bewegungen werden durch Pressen W, A, S, D Schlüssel z.B. W ist für nach oben, S für down.C in 2048, Probleme mit dem Verschieben

Nach jedem Buchstaben müssen Sie jedoch drücken, geben Sie ein, um es zu akzeptieren. Wie kann ich es funktionieren lassen, ohne einzugeben, geben Sie ein?

+1

Wie hören Sie Benutzereingaben? Stdin? – xhg

+0

Verwenden Sie eine Endlosschleife, in der Sie eine Funktion mit dem Namen if (kbhit()) aufrufen, und wenn sie true zurückgibt, können Sie getch verwenden, um die Eingabe ohne Echo zu erhalten –

+0

[fgetc] (https://linux.die.net/man/3/fgetc) ist dein Freund – LPs

Antwort

2

was Sie fragen, ist die Funktion mit dem Namen kbhit(), die wahr zurückgibt, wenn der Benutzer eine Taste auf der Tastatur drückt. Sie können diese Funktion verwenden, um eine Eingabe von der Verwendung zu erhalten, siehe auch

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

C-Standard erwähnt keine 'kbhit()' -Funktion. Sie verwenden eine Compiler-spezifische Bibliotheksfunktion. – user694733

+0

mein Bruder es ist eine Funktion in conio.h definiert [Link] (http://www.programmingsimplified.com/c/conio.h/kbhit) –

+2

@AliAkberFaiz 'conio.h' ist ein Nicht-Standard-Header. Es ist eine Nur-Windows-Header-Datei, die Sie nur dann sinnvoll beantwortet, wenn das OP ein Windows-Betriebssystem verwendet. – muXXmit2X

2

Es gibt keine Standardbibliotheksfunktion in c, um dies zu erreichen; Stattdessen müssen Sie Ter- miosfunktionen verwenden, um die Kontrolle über das Terminal zu erlangen und es dann nach dem Lesen der Eingabe zurückzusetzen.

Ich stieß auf Code, um Eingaben von Stdin zu lesen, ohne auf ein Trennzeichen zu warten here.

Wenn Sie Linux verwenden und einen Standard-c-Compiler verwenden, wird getch() nicht leicht für Sie verfügbar sein. Daher habe ich den Code in den Link implementiert und Sie müssen nur diesen Code einfügen und verwenden Sie die getch() -Funktion normal.

#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

Genau wie Alis Lösung nur für Windows gültig ist, ist diese Lösung nur für Unix (und Linux) gültig. –