• 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
  • 相关阅读:
    国内HTML5前端开发框架汇总
    vs2012不能打开项目解决办法
    Java Linux 语法
    Java MySQL慢查询优化
    Java 基本数据类型
    Java 多线程同步
    Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
    Spring Boot 项目学习 (三) Spring Boot + Redis 搭建
    Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
    Java Mybatis 缓存介绍
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/16516157.html
Copyright © 2020-2023  润新知