Commit 0cc8564cb3163fb9bd9447db41253fc0516eb3a5
1 parent
f1ab2b42
Fin des colisions améliorées
Showing
9 changed files
with
237 additions
and
108 deletions
Show diff stats
Interactif/Interactif.c
1 | 1 | #include <stdio.h> |
2 | 2 | #include <stdlib.h> |
3 | +#include <string.h> | |
3 | 4 | #include "../Graphique/libgraph.h" |
4 | 5 | #include "../ListeC/Liste.h" |
5 | 6 | #include "Interactif.h" |
... | ... | @@ -10,65 +11,64 @@ |
10 | 11 | #define ErreurHitbox 2 |
11 | 12 | |
12 | 13 | |
13 | -int CheckCollisionEntiteEntite(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2) | |
14 | +int CheckCollisionEntiteEntite(struct entite enti1, int L1, int H1, struct entite enti2, int L2, int H2) | |
14 | 15 | { |
15 | 16 | //CheckX |
16 | - int gauche1 = enti1.posx+ErreurHitbox; | |
17 | - int droite1 = enti1.posx+L1-ErreurHitbox; | |
18 | - int gauche2 = enti2.posx+ErreurHitbox; | |
19 | - int droite2 = enti2.posx+L2-ErreurHitbox; | |
20 | - int CheckX=0; | |
21 | - if(gauche1 >= gauche2 && gauche1 <= droite2) | |
22 | - { | |
23 | - CheckX=1; | |
24 | - } | |
25 | - else if(droite1 >= gauche2 && droite1 <= droite2) | |
26 | - { | |
27 | - CheckX=1; | |
28 | - } | |
29 | - | |
17 | + int gauche1 = enti1.posx + ErreurHitbox; | |
18 | + int droite1 = enti1.posx + L1 - ErreurHitbox; | |
19 | + int gauche2 = enti2.posx + ErreurHitbox; | |
20 | + int droite2 = enti2.posx + L2 - ErreurHitbox; | |
21 | + int CheckX = (gauche1 >= gauche2 && gauche1 <= droite2) || (droite1 >= gauche2 && droite1 <= droite2); | |
22 | + | |
30 | 23 | //CheckY |
31 | - int haut1 = enti1.posy+ErreurHitbox; | |
32 | - int bas1 = enti1.posy+H1-ErreurHitbox; | |
33 | - int haut2 = enti2.posy+ErreurHitbox; | |
34 | - int bas2 = enti2.posy+H2-ErreurHitbox; | |
35 | - int CheckY=0; | |
36 | - if(haut1 <= bas2 && haut1 >= haut2) | |
37 | - { | |
38 | - CheckY=1; | |
39 | - } | |
40 | - else if(bas1 <= bas2 && bas1 >= haut2) | |
41 | - { | |
42 | - CheckY=1; | |
43 | - } | |
44 | - if(CheckX+CheckY==2){return 1;} | |
45 | - else return 0; | |
24 | + int haut1 = enti1.posy + ErreurHitbox; | |
25 | + int bas1 = enti1.posy + H1 - ErreurHitbox; | |
26 | + int haut2 = enti2.posy + ErreurHitbox; | |
27 | + int bas2 = enti2.posy + H2 - ErreurHitbox; | |
28 | + int CheckY = (haut1 <= bas2 && haut1 >= haut2) || (bas1 <= bas2 && bas1 >= haut2); | |
29 | + | |
30 | + return CheckX && CheckY; | |
46 | 31 | } |
47 | 32 | |
48 | 33 | |
49 | -int CheckCollisionListeEntite(struct liste_entite *Liste1,int L1,int H1,struct entite enti2, int L2, int H2) | |
34 | +struct entite* CheckCollisionListeEntite(struct liste_entite *Liste1,int L1,int H1,struct entite enti2, int L2, int H2) | |
50 | 35 | { |
51 | 36 | struct liste_entite *pL1=Liste1; |
52 | 37 | while (pL1 != NULL) |
53 | 38 | { |
54 | 39 | if(CheckCollisionEntiteEntite(pL1->enti,L1,H1,enti2,L2,H2) == 1) |
55 | 40 | { |
56 | - return 1; | |
41 | + return &pL1->enti; | |
57 | 42 | } |
58 | 43 | pL1=pL1->suivant; |
59 | 44 | } |
60 | - return 0; | |
45 | + return NULL; | |
61 | 46 | } |
62 | 47 | |
63 | 48 | |
49 | + | |
50 | + | |
64 | 51 | struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1,int H1,struct liste_entite *Liste2,int L2, int H2) |
65 | 52 | { |
66 | 53 | struct liste_entite *pL2=Liste2; |
67 | 54 | while (pL2 != NULL) |
68 | 55 | { |
69 | - if(CheckCollisionListeEntite(Liste1,L1,H1,pL2->enti,L2,H2) == 1) | |
56 | + struct entite* collision = CheckCollisionListeEntite(Liste1,L1,H1,pL2->enti,L2,H2); | |
57 | + if (collision != NULL) | |
70 | 58 | { |
71 | - return pL2; | |
59 | + // Création des nœuds pour les deux entités | |
60 | + struct liste_entite* Enti1 = malloc(sizeof(struct liste_entite)); | |
61 | + struct liste_entite* Enti2 = malloc(sizeof(struct liste_entite)); | |
62 | + | |
63 | + // Remplissage des nœuds avec les entités correspondantes | |
64 | + Enti1->enti = *collision; | |
65 | + Enti2->enti = pL2->enti; | |
66 | + | |
67 | + // Relier les nœuds entre eux | |
68 | + Enti1->suivant = Enti2; | |
69 | + Enti2->suivant = NULL; | |
70 | + | |
71 | + return Enti1; | |
72 | 72 | } |
73 | 73 | else |
74 | 74 | pL2=pL2->suivant; |
... | ... | @@ -77,26 +77,98 @@ struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1 |
77 | 77 | } |
78 | 78 | |
79 | 79 | |
80 | + | |
81 | + | |
82 | +void SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, struct liste_entite** Liste2, int L2, int H2) | |
83 | +{ | |
84 | + struct liste_entite* collision = CheckCollisionListeListe(*Liste1, L1, H1, *Liste2, L2, H2); | |
85 | + | |
86 | + if (collision != NULL) { | |
87 | + // Récupération des entités impliquées | |
88 | + struct entite enti1 = collision->enti; | |
89 | + struct entite enti2 = collision->suivant->enti; | |
90 | + | |
91 | + //Suppression de l'entité 1 de la liste 1 | |
92 | + | |
93 | + //precedant1 garde en memoire l'element precedant de la liste | |
94 | + struct liste_entite* precedant1 = NULL; | |
95 | + //courant1 garde en memoire l'element courant de la liste | |
96 | + struct liste_entite* courant1 = *Liste1; | |
97 | + | |
98 | + while (courant1 != NULL) | |
99 | + { | |
100 | + //Comparaison des entites avec memcmp | |
101 | + if (memcmp(&courant1->enti, &enti1, sizeof(struct entite)) == 0) | |
102 | + { | |
103 | + //Si l'element à supprimer est le 1er de la liste | |
104 | + if (precedant1 == NULL) | |
105 | + { | |
106 | + *Liste1 = courant1->suivant; | |
107 | + } | |
108 | + else | |
109 | + { | |
110 | + precedant1->suivant = courant1->suivant; | |
111 | + } | |
112 | + free(courant1); | |
113 | + break; | |
114 | + } | |
115 | + | |
116 | + precedant1 = courant1; | |
117 | + courant1 = courant1->suivant; | |
118 | + } | |
119 | + | |
120 | + // Suppression de l'entité 2 de la liste 2 | |
121 | + struct liste_entite* precedant2 = NULL; | |
122 | + struct liste_entite* courant2 = *Liste2; | |
123 | + | |
124 | + while (courant2 != NULL) | |
125 | + { | |
126 | + if (memcmp(&courant2->enti, &enti2, sizeof(struct entite)) == 0) | |
127 | + { | |
128 | + if (precedant2 == NULL) | |
129 | + { | |
130 | + *Liste2 = courant2->suivant; | |
131 | + } else | |
132 | + { | |
133 | + precedant2->suivant = courant2->suivant; | |
134 | + } | |
135 | + free(courant2); | |
136 | + break; | |
137 | + } | |
138 | + | |
139 | + precedant2 = courant2; | |
140 | + courant2 = courant2->suivant; | |
141 | + } | |
142 | + afficherLutin(bouillie, enti2.posx - L1/2 - ErreurHitbox, enti2.posy); | |
143 | + } | |
144 | +} | |
145 | + | |
146 | + | |
147 | + | |
148 | + | |
149 | + | |
80 | 150 | void Tirer(struct entite joueur, struct liste_entite **pl) |
81 | 151 | { |
82 | - struct liste_entite *ml=*pl; | |
83 | - if (ml==NULL) | |
152 | + if (*pl==NULL) | |
84 | 153 | { |
85 | - ajout_tete(pl,creer_entite(joueur.posx+18,joueur.posy-5,0)); | |
154 | + ajout_tete(pl,creer_entite(joueur.posx+hitboxcanonL/2-2*ErreurHitbox,joueur.posy,0)); | |
86 | 155 | } |
87 | 156 | } |
88 | 157 | |
158 | + | |
159 | + | |
160 | + | |
89 | 161 | |
90 | -void DeplacementTire(int tire,struct liste_entite **l) | |
91 | -{ | |
162 | +void DeplacementTire(int tire, struct liste_entite **l) { | |
92 | 163 | struct liste_entite *ml = *l; |
93 | - while (ml != NULL) | |
164 | + while (ml != NULL) | |
94 | 165 | { |
95 | - if (ml->enti.posy <= 0) | |
166 | + if (ml->enti.posy <= 0) | |
96 | 167 | { |
97 | - *l = NULL; | |
98 | - afficherLutin(bouillie, ml->enti.posx-hitboxbouillieL/2, ml->enti.posy); | |
99 | - break; | |
168 | + *l = ml->suivant; | |
169 | + afficherLutin(bouillie, ml->enti.posx - hitboxbouillieL / 2, ml->enti.posy); | |
170 | + free(ml); | |
171 | + ml = *l; | |
100 | 172 | } |
101 | 173 | else |
102 | 174 | { |
... | ... | @@ -107,22 +179,6 @@ void DeplacementTire(int tire,struct liste_entite **l) |
107 | 179 | } |
108 | 180 | } |
109 | 181 | |
110 | - | |
111 | - | |
112 | -void SupprIfTouch(struct liste_entite **Liste1,int L1,int H1,struct liste_entite **Liste2,int L2, int H2) | |
113 | -{ | |
114 | - struct liste_entite *suppr = CheckCollisionListeListe(*Liste1,L1,H1,*Liste2,L2,H2); | |
115 | - if (suppr != NULL) | |
116 | - { | |
117 | - int x = suppr->enti.posx-ErreurHitbox; | |
118 | - int y = suppr->enti.posy; | |
119 | - Supprimerentite(Liste2,suppr); | |
120 | - majSurface(); | |
121 | - afficherLutin(bouillie,x,y); | |
122 | - *Liste1=NULL; | |
123 | - } | |
124 | -} | |
125 | - | |
126 | 182 | |
127 | 183 | char touche() |
128 | 184 | { |
... | ... | @@ -132,15 +188,29 @@ char touche() |
132 | 188 | return touche; |
133 | 189 | } |
134 | 190 | |
135 | -void action(struct entite *joueur,char c,struct liste_entite **tires) | |
191 | + | |
192 | + | |
193 | +void action(struct entite *joueur, char c, struct liste_entite **tires) | |
136 | 194 | { |
137 | - if(c=='d') | |
195 | + switch (c) | |
138 | 196 | { |
139 | - if (joueur->posx<=9*TailleX/10) {joueur->posx+=3;} | |
140 | - } | |
141 | - if(c=='q') | |
142 | - { | |
143 | - if (joueur->posx>=TailleX/10) {joueur->posx-=3;} | |
197 | + case 'd': | |
198 | + if (joueur->posx <= 9*TailleX/10) | |
199 | + { | |
200 | + joueur->posx += 3; | |
201 | + } | |
202 | + break; | |
203 | + case 'q': | |
204 | + if (joueur->posx >= TailleX/10) | |
205 | + { | |
206 | + joueur->posx -= 3; | |
207 | + } | |
208 | + break; | |
209 | + case 't': | |
210 | + Tirer(*joueur, tires); | |
211 | + break; | |
212 | + default: | |
213 | + break; | |
144 | 214 | } |
145 | - if(c=='t'){Tirer(*joueur,tires);} | |
146 | 215 | } |
216 | + | ... | ... |
Interactif/Interactif.h
... | ... | @@ -4,7 +4,7 @@ |
4 | 4 | |
5 | 5 | int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int); |
6 | 6 | |
7 | -int CheckCollisionListeEntite(struct liste_entite*,int,int,struct entite,int,int); | |
7 | +struct entite* CheckCollisionListeEntite(struct liste_entite*,int,int,struct entite,int,int); | |
8 | 8 | |
9 | 9 | struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int); |
10 | 10 | |
... | ... | @@ -12,7 +12,7 @@ void Tirer(struct entite, struct liste_entite**); |
12 | 12 | |
13 | 13 | void DeplacementTire(int,struct liste_entite**); |
14 | 14 | |
15 | -void SupprIfTouch(struct liste_entite**,int,int,struct liste_entite**,int,int); | |
15 | +void SupprimerEntitesEnCollision(struct liste_entite**,int,int,struct liste_entite**,int,int); | |
16 | 16 | |
17 | 17 | char touche(); |
18 | 18 | ... | ... |
ListeC/Liste.c
... | ... | @@ -2,17 +2,13 @@ |
2 | 2 | #include <stdlib.h> |
3 | 3 | #include "Liste.h" |
4 | 4 | |
5 | -void creer_liste(struct liste_entite *l) | |
6 | -{ | |
7 | - l = malloc(sizeof(struct liste_entite)); | |
8 | -} | |
9 | 5 | |
10 | -struct entite creer_entite(int x, int y, int idd) | |
6 | +struct entite creer_entite(int x, int y, int etage) | |
11 | 7 | { |
12 | 8 | struct entite e; |
13 | 9 | e.posx=x; |
14 | 10 | e.posy=y; |
15 | - e.id=idd; | |
11 | + e.etage=etage; | |
16 | 12 | return e; |
17 | 13 | } |
18 | 14 | ... | ... |
ListeC/Liste.h
... | ... | @@ -5,7 +5,7 @@ struct entite |
5 | 5 | { |
6 | 6 | int posx; |
7 | 7 | int posy; |
8 | - int id; | |
8 | + int etage; | |
9 | 9 | }; |
10 | 10 | |
11 | 11 | |
... | ... | @@ -18,8 +18,6 @@ struct liste_entite |
18 | 18 | |
19 | 19 | void ajout_tete(struct liste_entite**, struct entite); |
20 | 20 | |
21 | -void creer_liste(struct liste_entite*); | |
22 | - | |
23 | 21 | struct entite creer_entite(int,int,int); |
24 | 22 | |
25 | 23 | void imprimer_liste(struct liste_entite*); | ... | ... |
Main/init.c
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | #include <stdlib.h> |
3 | 3 | #include "../Graphique/libgraph.h" |
4 | 4 | #include "../ListeC/Liste.h" |
5 | +#include "../Interactif/Interactif.h" | |
5 | 6 | #include "init.h" |
6 | 7 | |
7 | 8 | #define TailleX 500 |
... | ... | @@ -12,11 +13,9 @@ int missile; |
12 | 13 | int sbire; |
13 | 14 | int bouillie; |
14 | 15 | |
15 | -struct liste_entite *enemies = NULL; | |
16 | -struct liste_entite *tires = NULL; | |
17 | 16 | struct entite joueur; |
18 | 17 | |
19 | -char Nom[20]="Space_Invader"; | |
18 | +char Nom[15]="Space Invader"; | |
20 | 19 | char input='\0'; |
21 | 20 | |
22 | 21 | int hitboxcanonL; |
... | ... | @@ -28,6 +27,8 @@ int hitboxsbireH; |
28 | 27 | int hitboxbouillieL; |
29 | 28 | int hitboxbouillieH; |
30 | 29 | |
30 | + | |
31 | + | |
31 | 32 | void initialiser() |
32 | 33 | { |
33 | 34 | canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); |
... | ... | @@ -47,3 +48,36 @@ void initialiser() |
47 | 48 | joueur.posy = JoueurY ; |
48 | 49 | } |
49 | 50 | |
51 | + | |
52 | +char pagedemarrage() | |
53 | +{ | |
54 | + static const char policeDefaut[]="/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"; | |
55 | + int Largeur, Hauteur; | |
56 | + | |
57 | + rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); | |
58 | + char jouer[26]="Appuyer sur j pour Jouer"; | |
59 | + char quitter[30]="Appuyer ailleurs pour Quitter"; | |
60 | + | |
61 | + choisirPolice(policeDefaut,50); | |
62 | + int Bienvenue = lutinTexte(Nom,COULEUR_VERT); | |
63 | + tailleLutin(Bienvenue,&Largeur,&Hauteur); | |
64 | + afficherLutin(Bienvenue,TailleX/2-Largeur/2,TailleY/4+Hauteur/2); | |
65 | + | |
66 | + choisirPolice(policeDefaut,20); | |
67 | + | |
68 | + int J = lutinTexte(jouer,COULEUR_BLANC); | |
69 | + tailleLutin(J,&Largeur,&Hauteur); | |
70 | + afficherLutin(J,TailleX/2-Largeur/2,TailleY/2-Hauteur/2); | |
71 | + | |
72 | + int Q = lutinTexte(quitter,COULEUR_BLANC); | |
73 | + tailleLutin(Q,&Largeur,&Hauteur); | |
74 | + afficherLutin(Q,TailleX/2-Largeur/2,TailleY/2+Hauteur/2); | |
75 | + | |
76 | + attendreEvenement (); | |
77 | + input = touche(); | |
78 | + while (input=='\0') | |
79 | + { | |
80 | + input = touche(); | |
81 | + } | |
82 | + return input; | |
83 | +} | ... | ... |
Main/init.h
... | ... | @@ -5,11 +5,11 @@ extern int canon; |
5 | 5 | extern int missile; |
6 | 6 | extern int sbire; |
7 | 7 | extern int bouillie; |
8 | -extern struct liste_entite *enemies; | |
9 | -extern struct liste_entite *tires; | |
8 | + | |
10 | 9 | extern struct entite joueur; |
11 | -extern char Nom[20]; | |
10 | +extern char Nom[15]; | |
12 | 11 | extern char input; |
12 | + | |
13 | 13 | extern int hitboxcanonL; |
14 | 14 | extern int hitboxcanonH; |
15 | 15 | extern int hitboxmissileL; |
... | ... | @@ -20,4 +20,4 @@ extern int hitboxbouillieL; |
20 | 20 | extern int hitboxbouillieH; |
21 | 21 | |
22 | 22 | void initialiser(); |
23 | - | |
23 | +char pagedemarrage(); | ... | ... |
Main/main.c
... | ... | @@ -18,39 +18,54 @@ int main() |
18 | 18 | creerSurface(TailleX,TailleY,Nom); |
19 | 19 | |
20 | 20 | initialiser(); |
21 | + | |
22 | + | |
23 | + struct liste_entite *enemies = NULL; | |
24 | + struct liste_entite *tires = NULL; | |
21 | 25 | |
22 | 26 | char texte[15]="SCORE : "; |
23 | - int Score = lutinTexte(texte,COULEUR_ROUGE); | |
27 | + int Score = lutinTexte(texte,COULEUR_BLANC); | |
24 | 28 | |
25 | - creer_liste(enemies); | |
26 | - creer_liste(tires); | |
27 | 29 | |
28 | - Ligne_Monstre(&enemies,5); | |
30 | + LigneSbire(&enemies,3,1); | |
29 | 31 | int SensVague=1; |
30 | - int *psens=&SensVague; | |
31 | 32 | |
33 | + int compt=0; | |
34 | + | |
35 | + if (pagedemarrage() != 'j') | |
36 | + { | |
37 | + return 0; | |
38 | + } | |
32 | 39 | |
40 | + | |
41 | + //Bouble principale | |
33 | 42 | while(input!='m') |
34 | 43 | { |
35 | 44 | rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); |
36 | 45 | rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); |
46 | + afficherLutin(Score,0,Sol+ErreurHitbox); | |
37 | 47 | |
38 | 48 | afficherLutin(canon,joueur.posx,joueur.posy); |
39 | - DeplacementLutin(sbire,enemies,psens,1); | |
40 | - | |
41 | 49 | |
50 | + if(compt==10) | |
51 | + { | |
52 | + DeplacementSbire(enemies,&SensVague,1); | |
53 | + compt=0; | |
54 | + } | |
55 | + AfficherSbire(sbire,enemies); | |
56 | + | |
42 | 57 | input = touche(); |
43 | 58 | action(&joueur,input,&tires); |
44 | 59 | |
45 | 60 | DeplacementTire(missile,&tires); |
46 | 61 | |
47 | - SupprIfTouch(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); | |
48 | - | |
49 | - afficherLutin(Score,0,Sol); | |
62 | + SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); | |
50 | 63 | |
51 | 64 | majSurface(); |
52 | 65 | |
53 | 66 | SDL_Delay(20); |
67 | + | |
68 | + compt+=1; | |
54 | 69 | } |
55 | 70 | return 0; |
56 | 71 | } | ... | ... |
Monstre/Monstre.c
... | ... | @@ -8,7 +8,7 @@ |
8 | 8 | #define TailleY 500 |
9 | 9 | |
10 | 10 | //sens 1 = Va vers la droite |
11 | -void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | |
11 | +void DeplacementSbire(struct liste_entite *l, int *psens, int speed) | |
12 | 12 | { |
13 | 13 | int ind=0; |
14 | 14 | struct liste_entite *ml=l; |
... | ... | @@ -18,13 +18,11 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) |
18 | 18 | { |
19 | 19 | ml->enti.posx+=speed; |
20 | 20 | if(ml->enti.posx>=9*TailleX/10)ind=1; |
21 | - afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | |
22 | 21 | } |
23 | 22 | else |
24 | 23 | { |
25 | 24 | ml->enti.posx-=speed; |
26 | 25 | if(ml->enti.posx<=TailleX/10)ind=2; |
27 | - afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | |
28 | 26 | } |
29 | 27 | ml=ml->suivant; |
30 | 28 | } |
... | ... | @@ -51,13 +49,29 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) |
51 | 49 | } |
52 | 50 | |
53 | 51 | |
54 | -void Ligne_Monstre(struct liste_entite **enemies,int nbr_enemies) | |
52 | + | |
53 | +void AfficherSbire(int lutin,struct liste_entite *l) | |
54 | +{ | |
55 | + struct liste_entite *ml=l; | |
56 | + while(ml != NULL) | |
57 | + { | |
58 | + afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | |
59 | + ml=ml->suivant; | |
60 | + } | |
61 | +} | |
62 | + | |
63 | + | |
64 | + | |
65 | +void LigneSbire(struct liste_entite **enemies,int nbr_enemies, int nbr_rangee) | |
55 | 66 | { |
56 | - int compteurY=TailleY/10; | |
57 | - int compteurX=TailleX/nbr_enemies; | |
58 | - for (int i=1; i<=nbr_enemies; i++) | |
67 | + for (int j=1; j<=nbr_rangee; j++) | |
59 | 68 | { |
60 | - ajout_tete(enemies,creer_entite(compteurX,compteurY,0)); | |
61 | - compteurX +=2*TailleX/(3*nbr_enemies); | |
69 | + int compteurY=j*TailleY/10; | |
70 | + int compteurX=TailleX/nbr_enemies; | |
71 | + for (int i=0; i<nbr_enemies; i++) | |
72 | + { | |
73 | + ajout_tete(enemies,creer_entite(compteurX,compteurY,j)); | |
74 | + compteurX +=2*TailleX/(3*nbr_enemies); | |
75 | + } | |
62 | 76 | } |
63 | 77 | } | ... | ... |
Monstre/Monstre.h
1 | 1 | #include <stdio.h> |
2 | 2 | #include <stdlib.h> |
3 | 3 | |
4 | -void DeplacementLutin(int,struct liste_entite*,int*,int); | |
4 | +void DeplacementSbire(struct liste_entite*,int*,int); | |
5 | 5 | |
6 | -void Ligne_Monstre(struct liste_entite**,int); | |
6 | +void AfficherSbire(int,struct liste_entite*); | |
7 | + | |
8 | +void LigneSbire(struct liste_entite**,int,int); | ... | ... |