是否有替代getch();哪个不会暂停程序?

时间:2017-05-18 15:38:08

标签: c linux ubuntu ncurses

我正在编写一个目前正在使用ncurses的游戏,我有一个由用户控制的船只和一个“自动化”的游戏,它会慢慢向下移动以杀死你。但是,我正在使用包含所有内容的while循环,每次使用getch()时循环都会暂停并等待输入,这意味着敌人只有在用户输入后才会移动。

        c=getch(); //causes a pause until a button is pressed before the next action

        if(c==97) //if a is pressed, move position of '*' left
        {
            dir=-1;

        }

        if(c==100) //if d is pressed, move position of '*' right
        {
            dir=1;

        }

2 个答案:

答案 0 :(得分:2)

由于你正在使用诅咒,只需拨打nodelayhalfdelaytimeout即可使getch无阻塞,或者在短暂等待后返回,如果没有钥匙被按下了。请参阅inopts(3ncurses)手册页。

答案 1 :(得分:0)

在输入文件描述符(0,又名poll)上使用STDIN_FILENO以确定在调用getch之前是否有待处理的输入。通常你会使用非零超时进行轮询,然后调用会加倍作为游戏循环的时间,因此它以你控制的固定滴答速率运行,而不是像cpu /系统负载允许的那样每秒迭代次数。 / p>