2048年的C,移动问题[重复]
Posted
技术标签:
【中文标题】2048年的C,移动问题[重复]【英文标题】:C in 2048,problems with moving [duplicate] 【发布时间】:2017-08-19 20:36:57 【问题描述】:我正在用 C 语言制作 2048 游戏,我需要帮助。通过按 W、A、S、D 键进行移动,例如W 向上移动,S 向下移动。
但是,在每个字母之后,您必须按 enter 来接受它。如何在不按 enter 的情况下使其工作?
【问题讨论】:
你如何倾听用户的输入?标准输入? 使用一个无限循环,在这个循环中你不断调用一个名为 if(kbhit()) 的函数,如果它返回 true,你可以使用 getch 来获取输入而无需回显 fgetc 是你的朋友 【参考方案1】:c 中没有标准库函数可以实现这一点;相反,您必须使用 termios 函数来控制终端,然后在读取输入后将其重置。
我遇到了一些代码来从标准输入读取输入,而无需等待分隔符 here。
如果您在 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;
【讨论】:
就像阿里的方案只对Windows有效,这个方案也只对Unix(和Linux)有效。【参考方案2】:您要求的是名为 kbhit() 的函数,如果用户按下键盘上的某个键,该函数将返回 true。您也可以使用此功能从使用中获取输入,如查看
char c= ' ';
while(1)
if(kbhit())
c=getch();
if(c=='q')// condition to stop the infinite loop
break;
【讨论】:
C 标准没有提到kbhit()
函数。您正在使用一些编译器特定的库函数。
我的兄弟这是在 conio.h link987654321@中定义的函数
@AliAkberFaiz conio.h
是非标准标头。它是一个仅限 Windows 的头文件,只有在 OP 使用 Windows 操作系统时才能回答。以上是关于2048年的C,移动问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章