C在2048年,移动问题

时间:2017-03-27 08:23:22

标签: c stdin 2048

我在C中制作2048游戏,我需要帮助。通过按 W A S D 键进行移动,例如 W 用于向上移动, S 用于向下移动。

但是,在每个字母后,您必须按输入才能接受它。如何在不按输入

的情况下使其工作

2 个答案:

答案 0 :(得分:2)

你要求的是名为kbhit()的函数,如果用户按下键盘上的键,则返回true。您可以使用此功能从使用中获取输入,如同参见

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

答案 1 :(得分:2)

c中没有标准库函数来完成此任务;相反,您必须使用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;
}