La bibliothèque ne gére pas elle-même la boucle des évènements.

Voici un exemple où un pingouin suit la souris dans la fenêtre d'affichage, avec le temps (approximatif) en secondes qui est affiché. Le programme doit effectuer une modification du dessin lors des deux événements suivants :

Dans une "vraie" bibliothèque, on devrait pouvoir être notifié des événements. Ici, c'est à vous de le faire !

#include<stdio.h>
#include<stdlib.h>
#include<graph.h>
#define delta 1000000L
 
void DessinerScene(int sprite,int x,int y,int n)
{
	char buf[100];
	ChoisirEcran(1);
	CopierZone(2,1,0,0,800,500,0,0);
	snprintf(buf,100,"temps : %05d",n);
	EcrireTexte(10,20,buf,0);
	AfficherSprite(sprite,x,y);
	CopierZone(1,0,0,0,800,500,0,0);
}
 
int main()
{
	int pingouin;
	int x,y,old_x,old_y;
	int n;
	unsigned long suivant;
	int go_on=1;
 
	InitialiserGraphique();
	CreerFenetre(0,0,800,500);
	ChoisirEcran(2);
	ChargerImageFond("./images/arctis2.jpg");		 
	pingouin=ChargerSprite("./images/walk-0.png");
	x=y=old_x=old_y=10;
	n=0;
	DessinerScene(pingouin,x,y,0);
	suivant=Microsecondes()+delta;
 
	while(go_on)
	{
		if (SourisCliquee()) go_on=0;
		else
		{
			if (Microsecondes()>suivant)
			{
				n++;
				DessinerScene(pingouin,x,y,n);
				suivant=Microsecondes()+delta;
			}
			SourisPosition();
			x=_X;
			y=_Y;
			if (x!=old_x || y!=old_y)
			{
				DessinerScene(pingouin,x,y,n);
				old_x=x;
				old_y=y;
			}
		}
	}
	FermerGraphique();
}
 

On a une boucle générale (dont on sort en cliquant dans la fenêtre), dans laquelle :

Evidemment, le programme est très gourmand en ressource cpu, puisqu'il n'y a pas d'attente passive.

IUT de Fontainebleau

Haut de la page