анимация терминала linux - лучший способ отложить печать «рамки» (на С) - PullRequest
3 голосов
/ 16 января 2010

Я работаю над простым клоном pong для терминала, и мне нужен способ отложить печать "рамки".

У меня есть двумерный массив

screen[ROWS][COLUMNS]

и функция печати экрана

void printScreen() {
    int i = 0;
    int j;

    while(i < ROWS) {
        j = 0;

        while(j < COLUMNS) {
            printf("%c", screen[i][j]);
            j++;
        }
        i++;
    }
}

Кажется, что когда я делаю

printScreen();
usleep(1000000);
printScreen();

будет sleep казнь во время printScreen().

Будем весьма благодарны за любые советы по созданию анимации этого типа на терминале. Может быть, я делаю это совершенно неправильно. Как это делается с фильмами ASCII , как это ?

РЕДАКТИРОВАТЬ Я иду с ncurses. Спасибо вам обоим за предложение.

На Ubuntu sudo aptitude install libncurses5-dev и скомпилировать с -lncurses.

Ответы [ 3 ]

3 голосов
/ 16 января 2010

Фильмы Ascii создаются с помощью aalib, который работает как драйвер графического дисплея.Большинство людей, разрабатывающих полноценные консольные приложения и игры, используют каркас curses или его версию, например ncurses.Единственным реальным ограничением для прохождения этого маршрута является то, что вы должны хотеть полный ptty (вы не можете участвовать в нем).

3 голосов
/ 16 января 2010

стандартный вывод буферизуется. Фактически он не отправит вывод на терминальное устройство, пока ему не будет приказано напечатать новую строку или явно сброшено.

Чтобы очистить вывод, просто добавьте:

fflush(stdout);

Кроме того, поскольку все, что вы делаете - это печатаете один символ, printf - это излишнее количество. Вы можете заменить ваш printf на:

putchar(screen[i][j]);
2 голосов
/ 16 января 2010

Если я вас правильно понял, вам нужно добавить fflush(stdout);, прежде чем вернуться с printScreen(). Но есть намного лучшие (более простые) способы сделать текстовую анимацию и управление терминалом. Посмотрите на ncurses например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...