animation de terminal linux – meilleur moyen de retarder l’impression de ‘frame’ (en C)

Je travaille sur un simple clone pong pour le terminal et j’ai besoin d’un moyen de retarder l’impression d’un ‘cadre’.

J’ai un tableau à deux dimensions

screen[ROWS][COLUMNS] 

et une fonction qui imprime l’écran

 void printScreen() { int i = 0; int j; while(i < ROWS) { j = 0; while(j < COLUMNS) { printf("%c", screen[i][j]); j++; } i++; } } 

Il semble que quand je fais

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

il va printScreen() l’exécution pendant printScreen() .

Tous les conseils pour faire ce type d’animation sur le terminal seraient très appréciés. Peut-être que je fais ça complètement faux. Comment cela se passe-t-il avec des films ASCII comme celui-ci ?

EDIT je vais avec ncurses. Merci à vous deux pour la suggestion.

Sur Ubuntu sudo aptitude install libncurses5-dev et comstack avec -lncurses .

Les films Ascii sont réalisés avec aalib, qui fonctionne comme un pilote d’affichage graphique. La plupart des personnes développant des applications et des jeux pour console à part entière utilisent le framework curses ou une version de celui-ci telle que ncurses. La seule ressortingction réelle à cette route est que vous devez vouloir le ptty complet (vous ne pouvez pas en prendre une partie).

stdout est tamponné. Il n’enverra pas réellement la sortie au terminal tant qu’il n’aura pas été invité à imprimer une nouvelle ligne ou à être vidé explicitement.

Pour vider la sortie, ajoutez simplement:

 fflush(stdout); 

De plus, comme vous ne faites qu’imprimer un seul caractère, printf est excessif. Vous pouvez remplacer votre printf par:

 putchar(screen[i][j]); 

Si je vous ai bien compris, vous devez append fflush(stdout); avant de revenir de printScreen() . Mais il existe des moyens bien plus simples (plus faciles) d’animation de texte et de contrôle terminal. Regardez ncurses par exemple.