Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Affichage console et seek

2 réponses
Avatar
Mat Free
Bonjour,

je réalise un programme en C. C'est une course de voiture.
L'affichage doit se faire en console. (La question est plus bas)

Voici la description de l'affichage :

# : le decor
+ : ligne de depart arrivée
. : route

Les joueurs sont affichés par leur numéro

####################
####################
####............####
###..1...........###
###......#####....##
###+++++#######...##
###......#####....##
###...............##
######..........####
####################

Mon joueur 1 avance :

####################
####################
####....1.......####
###..............###
###......#####....##
###+++++#######...##
###......#####....##
###...............##
######..........####
####################


Pour le moment pour l'affichage j'utilise

system("clear");
affiche_circuit(...);

calcul_nouvelle_position(...);

system("clear");
affiche_circuit(...);

ect ...

La fonction affiche_circuit, affiche le circuit en fonction d'un
tableau de positions de joueurs qui est passée en paramètre.

A chaque fois qu'un joueur se deplace, le circuit complet est donc
redessiné.

MA QUESTION :

est-il possible lors du deplacement des joueurs de ne pas redesinner
tout le circuit, mais seulement deplacer les numeros des joueurs.

CE QUE J'AI ESSAYE :

J'ai essayé de me positionner dans le flux stdout avec les fonctions
fseek, ce qui est apparement impossible, de meme pour /dev/tty

Pourtant wget affiche une barre de progression et la met à jour sans
rafraichir tout l'affichage. Quelle technique utilise t'il pour y
arriver ??

Merci d'avoir pris le temps de me lire

Mat

2 réponses

Avatar
Stephane Chazelas
2004-01-13, 03:28(+01), Mat Free:
[...]
est-il possible lors du deplacement des joueurs de ne pas redesinner
tout le circuit, mais seulement deplacer les numeros des joueurs.
[...]


regarde du côté des bibliothèques ncurses ou slang. L'idée est
d'envoyer des séquences de control au terminal pour déplacer le
curseur. ncurses et slang font des trucs plus optimisés en
maintenant en mémoire le contenu de l'affichage et en faisant
seulement les mises à jour nécessaires.

Pour une console Linux, par exemple pour se posisionner en
coordonnées (6,7), faut envoyer "e[7;8H"

Ça peut changer suivant le type de terminal, d'où l'intérêt des
bases terminfo ou termcap qui référencent les séquences de
controle pour chaque terminal (se base sur la variable
d'environnement TERM)

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Erwann ABALEA
Bonjour,

On Tue, 13 Jan 2004, Mat Free wrote:

je réalise un programme en C. C'est une course de voiture.
L'affichage doit se faire en console. (La question est plus bas)
[...]

MA QUESTION :

est-il possible lors du deplacement des joueurs de ne pas redesinner
tout le circuit, mais seulement deplacer les numeros des joueurs.


Oui, avec une bibliothèque telle que ncurses.

CE QUE J'AI ESSAYE :

J'ai essayé de me positionner dans le flux stdout avec les fonctions
fseek, ce qui est apparement impossible, de meme pour /dev/tty


Normal.

Pourtant wget affiche une barre de progression et la met à jour sans
rafraichir tout l'affichage. Quelle technique utilise t'il pour y
arriver ??


printf("toto");
printf("r");
printf("tata");

Pas d'effacement complet de l'écran, pas de déplacement dans un flux, mais
ne fonctionne que pour la ligne courante, à condition qu'elle ne soit pas
trop longue.

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
``This talk is like an Infinity commercial. You see lots of pretty
pictures -- waves splashing up on rocks, sunsets, sandy beaches --
but you never see the car.''
Prof. Marv Solomon
After listening to a less-than-perfect talk.