Bonjour,
avec mon code en plusieurs partie
laby.h:
Code:
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
labyrinthe.cCode:
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.hCode:
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); }
avec le MAKEFILECode:
1
2
3
4
5
6 #include <stdio.h> #include <stdlib.h> //Execute le jeu int main(int argc, const char* argv[]);
Et j'obtient plein de messages d'erreur du type:Code:
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
[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