C语言编写Linux终端环境下无缓冲键盘输入 ,并识别上下左右光标键

自己重构了游戏《2048》并且重构了它的最好启发式AI解法,并上传到了Gitee中的 鬼&泣 / 2048-heuristic的devilmaycry分支,在这个过程中编写了一个C语言版的“无缓冲键盘输入 ,并识别上下左右光标键”的代码,这里记录一下以备以后使用时查看。

 

代码地址:

cpp_source/environment/keyboard_run_app.cpp

 
 
 
 
 第一部分代码:
struct termios cooked, raw;

// 恢复之前的键盘输入和终端缓存的设置
void keyboard_close(int sig=0)
{
    int kfd = 0;
    (void)sig;
    PRINT_ATTR_REC                      // 终端字体颜色恢复
    // system("clear");                 // 情况屏幕
    tcsetattr(kfd, TCSANOW, &cooked);//在程序结束时在恢复原来的配置
    exit(0);
}


// 设置键盘输入,设置终端无缓存输入
void keyboard_open()
{
    signal(SIGINT, keyboard_close);    // 捕获Ctrl+C, 中断退出

    int kfd = 0;

    // get the console in raw mode
    tcgetattr(kfd, &cooked); // 得到 termios 结构体保存,然后重新配置终端
    memcpy(&raw, &cooked, sizeof(struct termios));
    raw.c_lflag &=~ (ICANON | ECHO);
    // Setting a new line, then end of file
    raw.c_cc[VEOL] = 1;
    raw.c_cc[VEOF] = 2;
    tcsetattr(kfd, TCSANOW, &raw);
}

 

 

keyboard_open函数设置无缓冲的键盘输入模式并保存原始的终端设置。在signal函数中设置对ctrl+c的捕获并进行终端设置的恢复操作及程序退出操作。

 

 

 

 

 

第二部分,对光标键的处理

#define KEYCODE_R 185
#define KEYCODE_L 186
#define KEYCODE_U 183
#define KEYCODE_D 184

 

posted on 2022-07-25 08:08  Angry_Panda  阅读(878)  评论(0编辑  收藏  举报

导航