在学校的实验室中工作,我们必须使用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;
}