Bonjour,


avec mon code en plusieurs partie

laby.h:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
 
#include <stdio.h>
#include <stdlib.h>
#ifndef GRAPHICS
#define GRAPHICS
#include "graphics.h"
#endif
#include <math.h>
 
 
#define true 1
#define false 0
#define mur 1
#define nbCases 481//Nombre de cases
#define hauteur 700//Hauteur du terrain
#define largeur 700//Largeur du terrain
#define COULEUR_TERRAIN gris//Couleur des murs
#define COULEUR_PERSO 0xff0088//Couleur du personnage
#define haut (int)(sqrt(nbCases)) // nb de cases verticales
#define large (int)(sqrt(nbCases)) // nb de cases horizontales
#define ecartCase_x ((largeur)/(large))//ecart entre deux cases horizontales
#define ecartCase_y ((hauteur)/(haut))//ecart entre deux cases horizontales
#define rayon ((ecartCase_x)/2)-2//rayon d'un monstre, personnage et bonus
#define W ((haut)*(ecartCase_x))//du a qulques problemes d'affichage(equivalant de largeur)
#define H ((large)*(ecartCase_y))//du a qulques problemes d'affichage(equivalant de hauteur)
#define iteration (haut)*(large)-2//Nombre d'iterations lors de la creation du labyrinthe aleatoire
#define casesMoinsUnX (W-ecartCase_x)// position de la case moins 1 en x
#define casesMoinsUnY (H-ecartCase_y)// position de la case moins 1 en y
#define N 100
 
typedef struct Cases{
 
	int mg;
	int md;
	int mh;
	int mb;
	POINT curseur1;//bas gauche de la case
	POINT curseur2;//haut droite de la case
	int inChemin;
}Cases;
 
 
typedef struct Perso
{
	POINT pos;
}Perso;
 
typedef struct Monstre
{
	POINT pos;
}Monstre;
 
typedef struct Bonus
{
	POINT pos;
	int trouve;
}Bonus;
 
typedef struct{
  int  Positionx[N];
  int  Positiony[N];
  int taille;
} *PILE;
 
//Initialise une pile
extern PILE init_vide(PILE p);
 
 
//Ajoute un personnage a une pile
extern PILE ajoute_Perso(PILE p,Perso per);
 
 
//Supprime un personnage de la pile
extern PILE supprime_Perso(PILE p);
 
 
//ajoute un personnage a la pile
extern PILE ajoute_Monstre(PILE p,Monstre m);
 
//Supprime un monstre de la pile
extern PILE supprime_Monstre(PILE p);
 
 
//Initialise les valeurs des murs des labyrinthe 
//Trace un quadrillage
extern void initLab(Cases lab[nbCases][nbCases]);
 
 
//Dessine les entrees et sorties du labyrinthe
extern void traceE_S();
 
 
//Affiches les cases du labyrinthe en fonction des cases
extern void afficheCase(Cases lab[nbCases][nbCases]);
 
 
//Charge les valeurs du labyrinthe et les affichent
extern void trace_vide(Cases lab[nbCases][nbCases]);
 
 
//Trace un labyrinthe aleatoire
extern void aleatoire(Cases lab[nbCases][nbCases]);
 
 
//Initialise un personnage
extern Perso initPerso(Perso p, Cases lab[nbCases][nbCases]);
 
 
//Efface un personnage
extern void effacePerso(Perso p);
 
 
//Affiche un personnage
extern void affichePerso(Perso p);
 
//Deplace un personnage
extern Perso deplacePerso(Perso per, Cases lab[nbCases][nbCases], char key, PILE pi, POINT p);
 
 
//Affiche un monstre
extern void afficheMonstre(Monstre m);
 
 
//Efface un monstre
extern void effaceMonstre(Monstre m);
 
 
//Initialise un monstre aleatoirement sur le labyrinthe
extern Monstre initMonstre(Monstre m, Cases lab[nbCases][nbCases]);
 
 
//Fonstion d'affichage compte-a-rebours
extern void attDebut();
 
 
//Affiche les regles du jeu
extern void afficheRegles();
 
 
//Affiche un message de fin de partie
extern void afficheFin();
 
//Affiche un message de victoire
extern void Victoire();
 
 
//Verifie s'il y a contacte entre le personnage et le monstre
extern void Perdu(Perso per, Monstre m, PILE pi);
 
 
//Deplace un monstre sur le labyrinthe et verifie l'appui de la touche n pour les retours en arriere
extern Monstre deplaceMonstre(Monstre m, Cases lab[nbCases][nbCases], Perso per, char key, PILE pi, POINT p);
 
 
//Initialise un bonus aleatoirement sur le labyrinthe
extern Bonus initBonus(Bonus b, Cases lab[nbCases][nbCases]);
 
 
//Affiche un bonus sur le labyrinthe
extern void afficheBonus(Bonus b);
 
 
//Efface le bonus du labyrinthe
extern void effaceBonus(Bonus b);
 
 
//Verifie le contacte entre le bonus et le personnage
//ainsi que l'appui de la touche pour declencher le bonus
extern Bonus recupBonus(Perso per, Bonus b, char key, POINT p, Cases lab [nbCases][nbCases]);

sauvegarde.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#include <stdio.h>
#include <stdlib.h>
#ifndef LABY
#define LABY
#include "laby.h"
#endif
 
//Sauvegarde la position des murs sur un fichier externe
extern void sauvegardeMur(Cases lab[nbCases][nbCases]);
 
 
//Sauvegarde la position du personnage sur un fichier externe
extern void sauvegardePerso(Perso per);
 
//Sauvegarde la position d'un monstre sur un fichier externe
extern void sauvegardeMonstre1(Monstre m1);
 
//Sauvegarde la position d'un monstre sur un fichier externe
extern void sauvegardeMonstre2(Monstre m2);
 
//Sauvegarde la position d'un monstre sur un fichier externe
extern void sauvegardeMonstre3(Monstre m3);
 
//Sauvegarde la position d'un monstre sur un fichier externe
extern void sauvegardeMonstre4(Monstre m4);
 
//Charge la position du personnage depuis un fichier externe
extern Perso ChargerPerso(Perso per);
 
 
//Charge la position d'un monstre depuis un fichier externe
extern Monstre ChargerMonstre1(Monstre m1);
 
//Charge la position d'un monstre depuis un fichier externe
extern Monstre ChargerMonstre2(Monstre m2);
 
//Charge la position d'un monstre depuis un fichier externe
extern Monstre ChargerMonstre3(Monstre m3);
 
//Charge la position d'un monstre depuis un fichier externe
extern Monstre ChargerMonstre4(Monstre m4);
labyrinthe.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 
#include <stdio.h>
#include <stdlib.h>
#include "labyrinthe.h"
//#include "graphics.h"
//#include "laby.h"
#include "sauvegarde.h"
#ifndef LABY
#define LABY
#include "laby.h"
#endif
/*#ifndef GRAPHICS
#define GRAPHICS
#include "graphics.h"
#endif*/
#include <math.h>
//#include "laby.h"
//Execute le jeu
int main(int argc, const char* argv[])
{
	affiche_auto_off();
	init_graphics(W+1, H+1);
 
	Perso per;
	PILE p = 0; p = init_vide(p);
	PILE pi = NULL; pi = init_vide(pi);
	PILE pa = NULL; pa = init_vide(pa);
	PILE pb = NULL; pb = init_vide(pb);
	PILE pc = NULL; pc = init_vide(pc);
	PILE pd = NULL; pd = init_vide(pd);
	PILE pe = NULL; pe = init_vide(pe);
	Monstre m1, m2, m3, m4;
	Cases lab[nbCases][nbCases];
	char key;
	POINT P;
	Bonus b;
	fill_screen(black);
	POINT p0, p1, p2, p4;
	p0.x = largeur/15;
	p0.y = hauteur - (hauteur/10);
	p1.x=largeur/20;
	p2.x=(largeur/2);
	p4.x=p0.x + largeur/4;
	p4.y = hauteur - (hauteur/5);
	p1.y =hauteur/2;
	p2.y =hauteur/2;
	int taille = largeur/20;
	int taille_choix = largeur/5;
	afficheRegles();
	aff_pol("Voulez-vous charger votre partie", taille , p0, red);
	aff_pol("precedente?", taille , p4, red);
	aff_pol("OUI", taille_choix, p1, red); 
	aff_pol("NON", taille_choix, p2, red); 
	FILE* F;
	POINT pu = wait_clic();
	fill_screen(black);
	if(pu.x <(largeur/2))
	{	
		attDebut();
		initLab(lab);
		trace_vide(lab);
		sauvegardeMur(lab);
		per = ChargerPerso(per);
		m1=ChargerMonstre1(m1);
		m2=ChargerMonstre2(m2);
		m3=ChargerMonstre3(m3);
		m4=ChargerMonstre4(m4);
	}
	else if(pu.x >= (largeur/2))
	{	
		attDebut();
		initLab(lab);
		aleatoire(lab);
		sauvegardeMur(lab);
		per = initPerso(per, lab);
		m1=initMonstre(m1, lab);
		m2=initMonstre(m2, lab); 
		m3=initMonstre(m3, lab); 
		m4=initMonstre(m4, lab); 	
	}
		b = initBonus(b, lab);
		afficheBonus(b);
		affichePerso(per);
		afficheMonstre(m1);
		afficheMonstre(m2);
		afficheMonstre(m3);
		afficheMonstre(m4);
 
	while(1)
	{
		P = wait_key(&key);
		per=deplacePerso(per, lab, key, p, P);
		m1=deplaceMonstre(m1, lab, per, key, pi, P);
		m2=deplaceMonstre(m2, lab, per, key, pa, P);
		m3=deplaceMonstre(m3, lab, per, key, pb, P);
		m4=deplaceMonstre(m4, lab, per, key, pc, P);
		sauvegardePerso(per);
		sauvegardeMonstre1(m1);
		sauvegardeMonstre2(m2);
		sauvegardeMonstre3(m3);
		sauvegardeMonstre4(m4);
		b = recupBonus(per, b, key, P, lab);
	}
 
	affiche_auto_on();
	wait_escape();
	exit(0);
}
labyrinthe.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#include <stdio.h>
#include <stdlib.h>
 
//Execute le jeu
int main(int argc, const char* argv[]);
avec le MAKEFILE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
CC=gcc
CFLAGS=-O2 -Wall `sdl-config --cflags`
LIBS=`sdl-config --libs` -lm -lSDL_ttf
 
#Cible generique pour Linux
%: graphics.o %.c
	rm -f $@
	$(CC) $(CFLAGS) graphics.o $@.c -o $@ $(LIBS)
 
graphics.o: graphics.c graphics.h
	rm -f police.h
	touch police.h
	if test -e /usr/include/SDL_ttf.h;           then echo "#define SDL_TTF_OK" > police.h; fi
	if test -e /usr/include/SDL/SDL_ttf.h;       then echo "#define SDL_TTF_OK" > police.h; fi
	if test -e /usr/local/include/SDL_ttf.h;     then echo "#define SDL_TTF_OK" > police.h; fi
	if test -e /usr/local/include/SDL/SDL_ttf.h; then echo "#define SDL_TTF_OK" > police.h; fi
	$(CC) $(CFLAGS) -c graphics.c 
 
sauvegarde.o : sauvegarde.c sauvegarde.h graphics.h 
	$(CC) $(CFLAGS) graphics.o sauvegarde.c -o sauvegarde $(LIBS)
 
laby.o : laby.c  laby.h graphics.h
	$(CC) $(CFLAGS) graphics.o laby.c -o laby $(LIBS)
 
labyrinthe.o : labyrinthe.c labyrinthe.h graphics.h
	$(CC) $(CFLAGS) graphics.o labyrinthe.c -o labybyrinthe $(LIBS)
 
labyrinthe: labyrinthe.o sauvegarde.o laby.o 
	$(CC) $(CFLAGS) -Wall -o labyrinthe labyrinthe.o sauvegarde.o laby.o $(LIBS)
 
clean:
	rm -f *.o
	rm -f labyrinthe
	rm -f *.h
Et j'obtient plein de messages d'erreur du type:

[labyrinthe.c.text.startup+0x7aa): undefined reference to `Chargercode]Monstre4'
collect2: ld a retourné 1 code d'état d'exécution
make: *** [labyrinthe.o] Erreur 1
[/code]

merci de votre aide