Q: Función getch() bloquea programa ncurses Estoy empezando a implementar un juego de ping pong básico con 2 raquetas a los lados y 1 bola. El rebote de la bola funcionaba bien antes de incluir el getch(). Lo incluyo para leer las teclas y así desplazar las palas hacia arriba o hacia abajo, pero creo que al llamar a la función el bucle while se detiene hasta que no detecta una tecla.
Necesito que la pelota se vaya moviendo constantemente al igual que las palas tienen que actualizarse cuando se pulsa una tecla. Código:

#include <ncurses.h>
#include <unistd.h>

#define DELAY 30000

int main(int argc, char *argv[]) {
    int max_y = 52, max_x = 212;
    bool salir = false;

    // VARIABLES PELOTA
    int pelotaX = 0, pelotaY = 0;
    int next_pelotaX = 0, next_pelotaY = 0;
    int directionPelotaX = 1, directionPelotaY = 1;

    // VARIABLES PALA IZQUIERDA
    int palaIX = 0, palaIY = 0;
    int next_palaIX = 0, next_palaIY = 0;

    // VARIABLES PALA DERECHA
    int palaDX = max_x - 2, palaDY = 0;
    int next_palaDX = 0, next_palaDY = 0;

    initscr();
    noecho();
    curs_set(FALSE);

    while (!salir) {
        clear();
        // PELOTA
        mvprintw(pelotaY, pelotaX, "o");
        // PALA IZQUIERDA
        mvprintw(palaIY, palaIX, "O>");
        mvprintw(palaIY + 1, palaIX, "|");
        mvprintw(palaIY + 2, palaIX, "|");
        mvprintw(palaIY + 3, palaIX, "|");
        mvprintw(palaIY + 4, palaIX, "|");
        mvprintw(palaIY + 5, palaIX, "|");
        mvprintw(palaIY + 6, palaIX, "O>");
        // PALA DERECHA
        mvprintw(palaDY, palaDX, "<O");
        mvprintw(palaDY + 1, palaDX + 1, "|");
        mvprintw(palaDY + 2, palaDX + 1, "|");
        mvprintw(palaDY + 3, palaDX + 1, "|");
        mvprintw(palaDY + 4, palaDX + 1, "|");
        mvprintw(palaDY + 5, palaDX + 1, "|");
        mvprintw(palaDY + 6, palaDX, "<O");

        refresh();

        usleep(DELAY);

        // MOVIMIENTO DE LA PELOTA
        next_pelotaX = pelotaX + directionPelotaX;
        next_pelotaY = pelotaY + directionPelotaY;

        if (next_pelotaX >= max_x || next_pelotaX <= 0) { // LLEGA A LOS BORDES X
            directionPelotaX *= -1;
        } else {
            pelotaX += directionPelotaX;
        }

        if (next_pelotaY >= max_y || next_pelotaY < 0) { // LLEGA A LOS BORDES Y
            directionPelotaY *= -1;
        } else {
            pelotaY += directionPelotaY;
        }

        switch (getch()) {
            case 'w':
                palaIY -= 4;
                break;
            case 's':
                palaIY += 4;
                break;
            case 'o':
                palaDY -= 4;
                break;
            case 'l':
                palaDY += 4;
                break;
            case 'f':
                salir = true;
                break;
            default:
                break;
        }
    }

    endwin();
}

Para que se publique la cuestión explico el código. En primer lugar declaro las variables de la posición de la pelota, de la pala izquierda y de la pala derecha. A continuación, hago un bucle while, del cual no se saldrá mientras no pulse la tecla f. Cuando el usuario pulse la tecla f, el juego se cerrará.
