在Cygwin中使用NCurses扫描来自USB设备的输入

时间:2019-11-17 16:46:43

标签: c cygwin ncurses

在学校的实验室中工作,我们必须使用PS4控制器从PS4控制器获取陀螺仪值,并使用Cygwin在NCurses中在屏幕上移动化身。目前,我有一个scanf()语句,用于扫描来自PS4控制器在正常的Cygwin窗口/程序中可以正常工作,但是我知道NCurses不使用STDIN,因此scanf()数据不会在NCurses窗口中更新。有谁知道我必须在程序中使用什么功能或如何在命令行中使用它?谢谢!

我正在使用的当前命令:

 ./ds4rd.exe -d 054c:09cc -D DS4_USB -t -g -b | ./lab8.exe 80

主要代码:

// Main - Run with './ds4rd.exe -t -g -b' piped into STDIN
int main(int argc, char* argv[])
{
    int t,b_Triangle, b_X, b_Square, b_Circle;
    double g_x, g_y, g_z;
    if (argc <2) { printf("You forgot the difficulty\n"); return 1;}
    int difficulty = atoi(argv[1]); // get difficulty from first command line arg
    // setup screen    
    initscr();
    refresh();

    // Generate and draw the maze, with initial avatar
    srand(time(0));
    int colAvatar, rowAvatar;

    rowAvatar = 0;
    colAvatar = rand() % NUMCOLS;

    generate_maze(difficulty);
    draw_maze();
    draw_character(colAvatar,rowAvatar,AVATAR);

    // Read gyroscope data to get ready for using moving averages.    



    // Event loop
    do
    {

        // Read data, update average
        noecho();
        scanf("%d, %lf, %lf, %lf, %d, %d, %d, %d", &t, &g_x, &g_y, &g_z, &b_Triangle, &b_Circle, &b_X, &b_Square);

        // Is it time to move?  if so, then move avatar
        sleep(1);

        rowAvatar += 1;

        if(g_x > 0){
            colAvatar -= 1;
        }
        if(g_x < 0){
            colAvatar += 1;
        }

        MAZE[rowAvatar][colAvatar] = EMPTY_SPACE;
        MAZE[rowAvatar][colAvatar] = AVATAR;
        mvaddch(rowAvatar,colAvatar,EMPTY_SPACE);
        mvaddch(rowAvatar,colAvatar,AVATAR);

        refresh();
        fflush(stdout);



    } while(b_Square != 1); // Change this to end game at right time 

    // Print the win message
    endwin();

    printf("YOU WIN!\n");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可能会想到scanw

int scanw(const char *fmt, ...);

  

转换格式          从诅咒窗口输入