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   Angry_Panda  阅读(1030)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
历史上的今天:
2021-07-25 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第一部分:依赖环境的安装
2021-07-25 国产计算框架Mindspore1.3.0 gpu源代码中的cmake文件存在问题(bug),openmpi的url错误,导致不能正常编译——成功解决mindspore-gpu-1.3.0版本不能从源代码中编译的问题

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示