// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º             º									    		         º \\
// º  SEARCHMAP  º  Code de la map                                       º \\
// º             º      						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On regarde si le code entr‚ correspond … une map existante.       º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


int		SearchMap(long int code)
 {
	FILE    *fichier;                // fichier pour le rapport
	int i=0;
	long int tmp_code;
	char tmp_map[15];

	do
	 {
		if ((fichier=fopen(jeu.path[i].nom_map, "r"))!=NULL) // ouverture du fichier
		 {
			fscanf (fichier, "%s\n%li\n", &tmp_map, &tmp_code);
			if (tmp_code==code)
				return (i+2);
		 }
		fclose(fichier);
		i++;
	 }
	while (i<jeu.nb_nivo);
	return -1;
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º              º									    		         º \\
// º  LOADOPTION  º  Charge le fichier des options                       º \\
// º              º      						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On charge chaque ligne du fichier.  								 º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void	LoadOptions(char *option_name, struct_pacman &pacman)
 {
	FILE    *fichier;                // fichier pour le rapport

	// si le fichier ne s'ouvre pas, sinon s'il s'ouvre correctement
	if ((fichier=fopen(option_name, "r"))==NULL) // ouverture du fichier
	 {
		closegraph();
		clrscr();                    // on efface l'‚cran
		printf("Fichier %s inexistant !", option_name);
		getch();
		EXIT;
	 }
	else
	 {
		fscanf(fichier, "pacman = %d\n", &pacman.color);
		fscanf(fichier, "vie = %d\n", &pacman.vie);
		fscanf(fichier, "son = %d\n", &jeu.son);
		fscanf(fichier, "nom = %d\n", &jeu.nom);
		fscanf(fichier, "background = %d\n", &jeu.bkground);
	 }
	fclose(fichier);
 }



// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º               º									    		     º \\
// º  WRITEOPTION  º  Sauvegarde le fichier des options.                 º \\
// º               º      						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On sauvegarde chaque ligne du fichier.                            º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void	WriteOptions(char *option_name, struct_pacman &pacman)
 {
	FILE    *fichier;                // fichier pour le rapport

	// si le fichier ne s'ouvre pas, sinon s'il s'ouvre correctement
	if ((fichier=fopen(option_name, "w"))==NULL) // ouverture du fichier
	 {
		closegraph();
		clrscr();                    // on efface l'‚cran
		printf("Fichier %s inexistant !", option_name);
		getch();
		EXIT;
	 }
	else
	 {
		fprintf(fichier, "pacman = %d\n", pacman.color);
		fprintf(fichier, "vie = %d\n", pacman.vie);
		fprintf(fichier, "son = %d\n", jeu.son);
		fprintf(fichier, "nom = %s\n", jeu.nom);
		fprintf(fichier, "background = %d\n", jeu.bkground);
	 }
	fclose(fichier);
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º             º									    		         º \\
// º  LOADSCORE  º  Fichier High Score                                   º \\
// º             º      						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On charge chaque ligne du fichier et on retourne le plus petit    º \\
// º   score trouv‚.                                                     º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


int		LoadScore(char *score_name)
 {
	char 	msg[10];				     // message d'erreur
	FILE    *fichier;                // fichier pour le rapport
	int result;

	// si le fichier ne s'ouvre pas, sinon s'il s'ouvre correctement
	if ((fichier=fopen(score_name, "r"))==NULL) // ouverture du fichier
	 {
		closegraph();
		clrscr();                    // on efface l'‚cran
		printf("Fichier %s inexistant !", score_name);
		getch();
		EXIT;
	 }
	else
	 {
		for (int i=0; i<5; i++)
		 {
			fscanf(fichier, "%s = %d\n", msg, &jeu.hscore[i].points);
			strcpy(jeu.hscore[i].nom, msg);
			result=jeu.hscore[i].points;
		 }
	 }
	fclose(fichier);
	return result;
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º              º									    		         º \\
// º  WRITESCORE  º  Fichier High Score, Nom, Score du joueur            º \\
// º              º      						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On va mettre … jour le fichier des High Score, en enregistrant    º \\
// º   le nouveau score ‚tablit.                                         º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void	WriteScore(char *score_name, char j_nom[10], int points)
 {
	FILE    *fichier;                // fichier pour le rapport
	int 	i=0;

	// si le fichier ne s'ouvre pas, sinon s'il s'ouvre correctement
	if ((fichier=fopen(score_name, "w"))==NULL) // ouverture du fichier
	 {
		closegraph();
		clrscr();                    // on efface l'‚cran
		printf("Fichier %s non modifiable !", score_name);
		getch();
		EXIT;
	 }
	else
	 {

		do
		 {
			if (points>=jeu.hscore[i].points)
			 {
				fprintf(fichier, "%s = %d\n", j_nom, points);
				points=-1;
			 }

			fprintf(fichier, "%s = %d\n", jeu.hscore[i].nom, jeu.hscore[i].points);
			i++;
		 }
		while (i<5);
	 }
	fclose(fichier);
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º          									    		             º \\
// º  GETKEY                                                             º \\
// º                						    				         º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On r‚cupŠre le bon num‚ro de touche.                              º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


int getkey()
 {
	int key, lo, hi;

	key = bioskey(0);
	lo = key & 0X00FF;
	hi = (key & 0XFF00) >> 8;

	return ((lo == 0) ? hi + 256 : lo);
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º                º									    		     º \\
// º  RANDOM_TOUCH  º  PremiŠre Touche, Seconde Touche                   º \\
// º                º     						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ touch1 et touch2 permettent de d‚placer le Monstre de fa‡on       º \\
// º   al‚atoire.                                                        º \\
// º þ Plusieurs restrictions sur touch2 :                               º \\
// º    þ touch1 et touch2 ne doivent pas ˆtre oppos‚es (haut-bas,       º \\
// º      bas-haut, gauche-droite, droite-gauche), ce qui correspond …   º \\
// º      "touch1 + touch2 = 3".                                         º \\
// º    þ touch1 et touch2 ne doivent pas ˆtre identiques, ce qui        º \\
// º      correspond … "touch1 - touch2 = 0".                            º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void random_touch(int &touch1, int &touch2)
 {
	if (touch1==0) touch1=random(4)+1;
	do touch2=random(4)+1;
	while ((touch1+touch2==5) || (touch1-touch2==0));
	//   1          haut
	// 2   3   gauche/droite
	//   4          bas
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º            º												         º \\
// º  JOUE_SON  º  Hertz, Dispo                                          º \\
// º            º													     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ Hertz demande une fr‚quence du son.                               º \\
// º   Dispo v‚rifie si le son est activ‚.                               º \\
// º   Delais fait durer le son plus longtemps.                          º \\
// º þ Cette proc‚dure va nous permettre de jouer un son, seulement si   º \\
// º   l'utilisateur l'a d‚cid‚.                                         º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void joue_son(int hertz, int delay_son, int delay_no_son)
 {
	if (jeu.son==1)				     // si le son est activ‚, disponible
	 {
		sound(hertz);                // on joue une douce m‚lodie
		delay(delay_son);               // on attend qq temps, on fait durer la note

		nosound();
		delay(delay_no_son);
	 }
 }


// ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º         º						            		    		     º \\
// º  INTRO  º  Carte                                                    º \\
// º         º      						         				     º \\
// ÌÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On lance l'intro du jeu.                                          º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void intro()
 {
	struct struct_fusee
	 {
		int x;             // matrice de la carte charg‚e (x, y)
		int y;             // matrice de la carte charg‚e (x, y)
		int color;                   // y haut gauche de la map (en pixel)
	 } *fusee;

	//struct_fusee fusee;
	fusee = (struct_fusee *)malloc(1000*sizeof(struct_fusee));

	char *msg;
	char *cmsg;
	msg = (char *)malloc(30*sizeof(char));
	cmsg = (char *)malloc(sizeof(char));

	float t;
	int midx = getmaxx() / 2;
	int midy = getmaxy() / 2;
	int i=0;


	// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \\
	// ³ FUSEE                                                       ³ \\
	// ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ \\
	// ³ þ On va dessiner la fus‚e avec une fonction param‚trique.   ³ \\
	// ³ þ Les ‚quations s'‚crivent en fonction de t, le temps.      ³ \\
	// ³ þ Les couleurs sont g‚n‚r‚es grƒce … t.                     ³ \\
	// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ \\


	for (t=0; t<2*M_PI; t+=M_PI/float(500))
	 {
		fusee[i].x = 10*(5 * cos(t) * 5 * sin(t));//float x = 5 * cos(t) * 5 * sin(t);
		fusee[i].y = 10*(5 * cos(3*t) - 5 * sin(t));//float y = 5 * cos(3*t) - 5 * sin(t);
		fusee[i].color = int(t*500)%16;
		putpixel(fusee[i].x+midx, fusee[i].y+midy, fusee[i].color);
		i++;
		delay(2);
	 }


	for (i=600; i<8000; i+=1000)
		joue_son(i, 100, 10);


	// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \\
	// ³ TEXTES                                                      ³ \\
	// ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ \\
	// ³ þ On va ‚crire les deux textes, mais lettre par lettre pour ³ \\
	// ³   pour avoir l'illusion de l'‚criture.                      ³ \\
	// ³ þ L'un s'‚crit vers la gauche, l'autre vers la droite. La   ³ \\
	// ³   fonction textwidth nous est trŠs utile puisqu'elle nous   ³ \\
	// ³   permet d'‚crire … l'endroit voulu, sans calculs complexes.³ \\
	// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ \\


	setcolor(14);                    // jaune
	settextjustify(CENTER_TEXT, CENTER_TEXT); // centr‚ horizontalement et verticalement
	settextstyle(2, HORIZ_DIR, 10);  // nø de police, ‚crire horizontalement, taille 4
	sprintf(msg, "The Team Rocket");

	int x=0;

	for (i=0; i<=strlen(msg); i++)
	 {
		sprintf(cmsg, "%c", msg[i]);
		outtextxy(midx+x-strlen(msg)*10, 100, cmsg);   // on place et on ‚crit le texte
		x += textwidth(cmsg);
		delay(50);
	 }
	setcolor(15);                    // blanc
	settextstyle(2, HORIZ_DIR,6);  // nø de police, ‚crire horizontalement, taille 4
	sprintf(msg, "PRESENTS");
	x=0;
	for (i=strlen(msg); i>=0; i--)
	 {
		sprintf(cmsg, "%c", msg[i]);
		outtextxy(midx+x+strlen(msg)*6, 400, cmsg);   // on place et on ‚crit le texte
		x -= textwidth(cmsg);
		delay(50);
	 }
	delay(1000);


	// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \\
	// ³ ANIMATIONS                                                  ³ \\
	// ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ \\
	// ³ þ Pour toute animation, il faut afficher l'image, attendre  ³ \\
	// ³   le temps n‚cessaire (pour ‚viter le scintillement) et     ³ \\
	// ³   effacer l'image (ce qui est contraignant).                ³ \\
	// ³   fonction textwidth nous est trŠs utile puisqu'elle nous   ³ \\
	// ³   permet d'‚crire … l'endroit voulu, sans calculs complexes.³ \\
	// ³ þ Entre deux et pour le fun, un son est le bienvenu.        ³ \\
	// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ \\


	settextjustify(CENTER_TEXT, CENTER_TEXT); // centr‚ horizontalement et verticalement
	for (int decal=0; decal<4*midx; decal+=int(decal/10)+1)
	 {
		// affichage
		for (i=0; i<1000; i++)
			putpixel(fusee[i].x+midx-decal, fusee[i].y+midy, fusee[i].color);
		setcolor(15);
		settextstyle(2, HORIZ_DIR,6);  // nø de police, ‚crire horizontalement, taille 4
		outtextxy(midx+13, 400+(decal/4), "PRESENTS");   // on place et on ‚crit le texte
		setcolor(14);
		settextstyle(2, HORIZ_DIR, 10);  // nø de police, ‚crire horizontalement, taille 4
		outtextxy(midx+15+(decal/2), 100, "The Team Rocket");   // on place et on ‚crit le texte

		joue_son(8*decal, 25, 0);

		// effacement
		for (i=0; i<1000; i++)
			putpixel(fusee[i].x+midx-decal, fusee[i].y+midy, 0);
		setcolor(0);
		settextstyle(2, HORIZ_DIR,6);  // nø de police, ‚crire horizontalement, taille 4
		outtextxy(midx+13, 400+(decal/4), "PRESENTS");   // on place et on ‚crit le texte
		settextstyle(2, HORIZ_DIR, 10);  // nø de police, ‚crire horizontalement, taille 4
		outtextxy(midx+15+(decal/2), 100, "The Team Rocket");   // on place et on ‚crit le texte
	 }
	nosound();
	free(fusee);


	// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \\
	// ³ TITRE                                                       ³ \\
	// ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ \\
	// ³ þ Et efin, l'affichage du titre, PACMAN.                    ³ \\
	// ³ þ L'animation, cette fois-ci, n'est pas un d‚placement mais ³ \\
	// ³   un remplissage (et un vidage) de surface.                 ³ \\
	// ³ þ Avec la fonction titre_effect, on peut remplir la surface ³ \\
	// ³   (ici le caractŠre) avec un point et une couleur.          ³ \\
	// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ \\


	setcolor(12);                    // rouge clair
	settextjustify(CENTER_TEXT, CENTER_TEXT); // centr‚ horizontalement et verticalement
	settextstyle(10, HORIZ_DIR, 4);  // nø de police, ‚crire horizontalement, taille 4
	outtextxy(midx, 30, "PACMAN");   // on place et on ‚crit le texte

	delay(1000);
 }


// ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \\
// º                									    		     º \\
// º  INIT_GRAPH                                                         º \\
// º                    						    				     º \\
// ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ \\
// º                                                                     º \\
// º þ On initialise l'affichage et les fonctions graphiques.            º \\
// º                                                                     º \\
// ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \\


void init_graph()
 {
	// d‚tection automatique de la carte graphique
	int gdriver = DETECT, gmode, errorcode;
	initgraph(&gdriver, &gmode, "");

	// r‚sultat de l'initialisation
	errorcode = graphresult();

	// si une erreur se produit
	if (errorcode != grOk)
	 {
		printf("\nErreur : %s\nPressez une touche ...", grapherrormsg(errorcode));
		getch();
		exit(1);
	 }
 }