Commit 3ab4f73aad534dd0d0bc6237750935c29ecc7313
1 parent
0cc8564c
Amelioration Collisions et Deplacements
Showing
9 changed files
with
203 additions
and
156 deletions
Show diff stats
Interactif/Interactif.c
@@ -8,23 +8,24 @@ | @@ -8,23 +8,24 @@ | ||
8 | 8 | ||
9 | #define TailleX 500 | 9 | #define TailleX 500 |
10 | #define TailleY 500 | 10 | #define TailleY 500 |
11 | +#define Sol 475 | ||
11 | #define ErreurHitbox 2 | 12 | #define ErreurHitbox 2 |
12 | 13 | ||
13 | 14 | ||
14 | int CheckCollisionEntiteEntite(struct entite enti1, int L1, int H1, struct entite enti2, int L2, int H2) | 15 | int CheckCollisionEntiteEntite(struct entite enti1, int L1, int H1, struct entite enti2, int L2, int H2) |
15 | { | 16 | { |
16 | //CheckX | 17 | //CheckX |
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; | 18 | + int gauche1 = enti1.posx - L1/2 + ErreurHitbox; |
19 | + int droite1 = enti1.posx + L1/2 - ErreurHitbox; | ||
20 | + int gauche2 = enti2.posx - L2/2 + ErreurHitbox; | ||
21 | + int droite2 = enti2.posx + L2/2 - ErreurHitbox; | ||
21 | int CheckX = (gauche1 >= gauche2 && gauche1 <= droite2) || (droite1 >= gauche2 && droite1 <= droite2); | 22 | int CheckX = (gauche1 >= gauche2 && gauche1 <= droite2) || (droite1 >= gauche2 && droite1 <= droite2); |
22 | 23 | ||
23 | //CheckY | 24 | //CheckY |
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; | 25 | + int haut1 = enti1.posy - H1/2 + ErreurHitbox; |
26 | + int bas1 = enti1.posy + H1/2 - ErreurHitbox; | ||
27 | + int haut2 = enti2.posy - H2/2 + ErreurHitbox; | ||
28 | + int bas2 = enti2.posy + H2/2 - ErreurHitbox; | ||
28 | int CheckY = (haut1 <= bas2 && haut1 >= haut2) || (bas1 <= bas2 && bas1 >= haut2); | 29 | int CheckY = (haut1 <= bas2 && haut1 >= haut2) || (bas1 <= bas2 && bas1 >= haut2); |
29 | 30 | ||
30 | return CheckX && CheckY; | 31 | return CheckX && CheckY; |
@@ -85,61 +86,16 @@ void SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, s | @@ -85,61 +86,16 @@ void SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, s | ||
85 | 86 | ||
86 | if (collision != NULL) { | 87 | if (collision != NULL) { |
87 | // Récupération des entités impliquées | 88 | // Récupération des entités impliquées |
88 | - struct entite enti1 = collision->enti; | ||
89 | - struct entite enti2 = collision->suivant->enti; | 89 | + struct entite* enti1 = &collision->enti; |
90 | + struct entite* enti2 = &collision->suivant->enti; | ||
90 | 91 | ||
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 | - } | 92 | + // Suppression de l'entité 1 de la liste 1 |
93 | + SupprimerEntite(Liste1, enti1); | ||
119 | 94 | ||
120 | // Suppression de l'entité 2 de la liste 2 | 95 | // Suppression de l'entité 2 de la liste 2 |
121 | - struct liste_entite* precedant2 = NULL; | ||
122 | - struct liste_entite* courant2 = *Liste2; | 96 | + SupprimerEntite(Liste2, enti2); |
123 | 97 | ||
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); | 98 | + afficherLutin(bouillie, enti2->posx - hitboxbouillieL/2 + ErreurHitbox, enti2->posy - hitboxbouillieH/2 + ErreurHitbox); |
143 | } | 99 | } |
144 | } | 100 | } |
145 | 101 | ||
@@ -151,34 +107,32 @@ void Tirer(struct entite joueur, struct liste_entite **pl) | @@ -151,34 +107,32 @@ void Tirer(struct entite joueur, struct liste_entite **pl) | ||
151 | { | 107 | { |
152 | if (*pl==NULL) | 108 | if (*pl==NULL) |
153 | { | 109 | { |
154 | - ajout_tete(pl,creer_entite(joueur.posx+hitboxcanonL/2-2*ErreurHitbox,joueur.posy,0)); | 110 | + ajout_tete(pl,creer_entite(joueur.posx,joueur.posy,-1)); |
155 | } | 111 | } |
156 | } | 112 | } |
157 | 113 | ||
158 | 114 | ||
159 | - | ||
160 | - | ||
161 | - | ||
162 | -void DeplacementTire(int tire, struct liste_entite **l) { | ||
163 | - struct liste_entite *ml = *l; | ||
164 | - while (ml != NULL) | 115 | +void DeplacementTire(int tire, struct liste_entite** l) |
116 | +{ | ||
117 | + struct entite* ml = &(*l)->enti; | ||
118 | + if (ml != NULL) | ||
165 | { | 119 | { |
166 | - if (ml->enti.posy <= 0) | 120 | + if (ml->posy <= 0) |
167 | { | 121 | { |
168 | - *l = ml->suivant; | ||
169 | - afficherLutin(bouillie, ml->enti.posx - hitboxbouillieL / 2, ml->enti.posy); | ||
170 | - free(ml); | ||
171 | - ml = *l; | 122 | + afficherLutin(bouillie, ml->posx - hitboxbouillieL/2 + ErreurHitbox, ml->posy); |
123 | + SupprimerEntite(l, ml); | ||
172 | } | 124 | } |
173 | else | 125 | else |
174 | { | 126 | { |
175 | - ml->enti.posy -= 5; | ||
176 | - afficherLutin(tire, ml->enti.posx, ml->enti.posy); | ||
177 | - ml = ml->suivant; | 127 | + ml->posy -= 5; |
128 | + //Je divise ErreurHitbox par 2 car l'erreur du missile est plus petite que pour les autres images | ||
129 | + afficherLutin(tire, ml->posx - hitboxmissileL/2 + ErreurHitbox/2, ml->posy - hitboxmissileH/2 + ErreurHitbox/2); | ||
178 | } | 130 | } |
179 | } | 131 | } |
180 | } | 132 | } |
181 | 133 | ||
134 | + | ||
135 | + | ||
182 | 136 | ||
183 | char touche() | 137 | char touche() |
184 | { | 138 | { |
@@ -214,3 +168,59 @@ void action(struct entite *joueur, char c, struct liste_entite **tires) | @@ -214,3 +168,59 @@ void action(struct entite *joueur, char c, struct liste_entite **tires) | ||
214 | } | 168 | } |
215 | } | 169 | } |
216 | 170 | ||
171 | + | ||
172 | + | ||
173 | +void MakeBombeDroppable(struct liste_entite* enemies, struct liste_entite** bombes) | ||
174 | +{ | ||
175 | + struct liste_entite* pL = enemies; | ||
176 | + struct liste_entite* Dropable = NULL; | ||
177 | + int taille = 0; | ||
178 | + while (pL != NULL) | ||
179 | + { | ||
180 | + if (pL->enti.dropbombe == 1) | ||
181 | + { | ||
182 | + ajout_tete(&Dropable,pL->enti); | ||
183 | + taille += 1; | ||
184 | + } | ||
185 | + pL=pL->suivant; | ||
186 | + } | ||
187 | + | ||
188 | + if(Dropable == NULL) | ||
189 | + { | ||
190 | + return; | ||
191 | + } | ||
192 | + | ||
193 | + int randomIndex = rand() % taille-1; | ||
194 | + struct liste_entite* pLDropable = Dropable; | ||
195 | + | ||
196 | + for (int i = 0; i <= randomIndex; i++) | ||
197 | + { | ||
198 | + pLDropable = pLDropable->suivant; | ||
199 | + } | ||
200 | + ajout_tete(bombes,creer_entite(pLDropable->enti.posx,pLDropable->enti.posy,-1)); | ||
201 | +} | ||
202 | + | ||
203 | + | ||
204 | +void DeplacementBombe(int bombe, struct liste_entite** l) | ||
205 | +{ | ||
206 | + struct liste_entite* ml = *l; | ||
207 | + struct liste_entite* precedent = NULL; | ||
208 | + | ||
209 | + while (ml != NULL) | ||
210 | + { | ||
211 | + if (ml->enti.posy + hitboxbombeH - ErreurHitbox >= Sol) | ||
212 | + { | ||
213 | + struct entite* a_supprimer = &ml->enti; | ||
214 | + ml = ml->suivant; | ||
215 | + SupprimerEntite(l, a_supprimer); | ||
216 | + } | ||
217 | + else | ||
218 | + { | ||
219 | + ml->enti.posy += 2; | ||
220 | + afficherLutin(bombe, ml->enti.posx - hitboxbombeL/2 + ErreurHitbox, ml->enti.posy); | ||
221 | + precedent = ml; | ||
222 | + ml = ml->suivant; | ||
223 | + } | ||
224 | + } | ||
225 | +} | ||
226 | + |
Interactif/Interactif.h
@@ -17,3 +17,7 @@ void SupprimerEntitesEnCollision(struct liste_entite**,int,int,struct liste_enti | @@ -17,3 +17,7 @@ void SupprimerEntitesEnCollision(struct liste_entite**,int,int,struct liste_enti | ||
17 | char touche(); | 17 | char touche(); |
18 | 18 | ||
19 | void action(struct entite*,char,struct liste_entite**); | 19 | void action(struct entite*,char,struct liste_entite**); |
20 | + | ||
21 | +void MakeBombeDroppable(struct liste_entite*,struct liste_entite**); | ||
22 | + | ||
23 | +void DeplacementBombe(int,struct liste_entite**); |
ListeC/Liste.c
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | +#include <string.h> | ||
3 | #include "Liste.h" | 4 | #include "Liste.h" |
4 | 5 | ||
5 | 6 | ||
6 | -struct entite creer_entite(int x, int y, int etage) | 7 | +struct entite creer_entite(int x, int y, int bombe) |
7 | { | 8 | { |
8 | struct entite e; | 9 | struct entite e; |
9 | - e.posx=x; | ||
10 | - e.posy=y; | ||
11 | - e.etage=etage; | 10 | + e.posx = x; |
11 | + e.posy = y; | ||
12 | + e.dropbombe = bombe; | ||
12 | return e; | 13 | return e; |
13 | } | 14 | } |
14 | 15 | ||
@@ -35,40 +36,29 @@ void imprimer_liste(struct liste_entite *l) | @@ -35,40 +36,29 @@ void imprimer_liste(struct liste_entite *l) | ||
35 | } | 36 | } |
36 | 37 | ||
37 | 38 | ||
38 | -void Supprimerentite(struct liste_entite** l, struct liste_entite* suppr) | 39 | + |
40 | +void SupprimerEntite(struct liste_entite** Liste, struct entite* enti) | ||
39 | { | 41 | { |
40 | - //Liste ou Element NULL | ||
41 | - if(*l == NULL || suppr == NULL) | ||
42 | - { | ||
43 | - return; | ||
44 | - } | ||
45 | - | ||
46 | - //Dernier et Seul élément | ||
47 | - if (*l == suppr && suppr->suivant == NULL) | ||
48 | - { | ||
49 | - *l = NULL; | ||
50 | - return; | ||
51 | - } | 42 | + struct liste_entite* courant = *Liste; |
43 | + struct liste_entite* precedent = NULL; | ||
52 | 44 | ||
53 | - //1er element | ||
54 | - if(*l == suppr) | 45 | + while (courant != NULL) |
55 | { | 46 | { |
56 | - *l=suppr->suivant; | ||
57 | - } | ||
58 | - | ||
59 | - else | ||
60 | - { | ||
61 | - struct liste_entite* precedent = *l; | ||
62 | - while(precedent->suivant != NULL && precedent->suivant != suppr) | 47 | + if (memcmp(&courant->enti, enti, sizeof(struct entite)) == 0) |
63 | { | 48 | { |
64 | - precedent=precedent->suivant; | 49 | + if (precedent == NULL) |
50 | + { | ||
51 | + *Liste = courant->suivant; | ||
52 | + } | ||
53 | + else | ||
54 | + { | ||
55 | + precedent->suivant = courant->suivant; | ||
56 | + } | ||
57 | + free(courant); | ||
58 | + break; | ||
65 | } | 59 | } |
66 | - | ||
67 | - if(precedent->suivant == NULL) | ||
68 | - { | ||
69 | - return ; | ||
70 | - } | ||
71 | - precedent->suivant = suppr->suivant; | 60 | + precedent = courant; |
61 | + courant = courant->suivant; | ||
72 | } | 62 | } |
73 | - free(suppr); | ||
74 | } | 63 | } |
64 | + |
ListeC/Liste.h
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | 3 | ||
4 | +//dropbombe concerne les entités enemies | ||
5 | +//1 les enemies peuvent drop des bombes, 0 ils ne peuvent pas | ||
6 | +//Celles non concernées vallent -1 | ||
4 | struct entite | 7 | struct entite |
5 | { | 8 | { |
6 | int posx; | 9 | int posx; |
7 | int posy; | 10 | int posy; |
8 | - int etage; | 11 | + int dropbombe; |
9 | }; | 12 | }; |
10 | 13 | ||
11 | 14 | ||
@@ -22,4 +25,5 @@ struct entite creer_entite(int,int,int); | @@ -22,4 +25,5 @@ struct entite creer_entite(int,int,int); | ||
22 | 25 | ||
23 | void imprimer_liste(struct liste_entite*); | 26 | void imprimer_liste(struct liste_entite*); |
24 | 27 | ||
25 | -void Supprimerentite(struct liste_entite**, struct liste_entite*); | 28 | +void SupprimerEntite(struct liste_entite**,struct entite*); |
29 | + |
Main/init.c
@@ -7,25 +7,33 @@ | @@ -7,25 +7,33 @@ | ||
7 | 7 | ||
8 | #define TailleX 500 | 8 | #define TailleX 500 |
9 | #define TailleY 500 | 9 | #define TailleY 500 |
10 | +#define ErreurHitbox 2 | ||
11 | +#define JoueurX TailleX/2 | ||
12 | +#define JoueurY 9*TailleY/10 | ||
13 | + | ||
14 | +struct entite joueur = {JoueurX,JoueurY,-1}; | ||
15 | + | ||
16 | +int canon=0; | ||
17 | +int missile=0; | ||
18 | +int sbire=0; | ||
19 | +int bouillie=0; | ||
20 | +int bombe=0; | ||
10 | 21 | ||
11 | -int canon; | ||
12 | -int missile; | ||
13 | -int sbire; | ||
14 | -int bouillie; | ||
15 | 22 | ||
16 | -struct entite joueur; | ||
17 | 23 | ||
18 | char Nom[15]="Space Invader"; | 24 | char Nom[15]="Space Invader"; |
19 | char input='\0'; | 25 | char input='\0'; |
20 | 26 | ||
21 | -int hitboxcanonL; | ||
22 | -int hitboxcanonH; | ||
23 | -int hitboxmissileL; | ||
24 | -int hitboxmissileH; | ||
25 | -int hitboxsbireL; | ||
26 | -int hitboxsbireH; | ||
27 | -int hitboxbouillieL; | ||
28 | -int hitboxbouillieH; | 27 | +int hitboxcanonL=0; |
28 | +int hitboxcanonH=0; | ||
29 | +int hitboxmissileL=0; | ||
30 | +int hitboxmissileH=0; | ||
31 | +int hitboxsbireL=0; | ||
32 | +int hitboxsbireH=0; | ||
33 | +int hitboxbouillieL=0; | ||
34 | +int hitboxbouillieH=0; | ||
35 | +int hitboxbombeL=0; | ||
36 | +int hitboxbombeH=0; | ||
29 | 37 | ||
30 | 38 | ||
31 | 39 | ||
@@ -35,17 +43,14 @@ void initialiser() | @@ -35,17 +43,14 @@ void initialiser() | ||
35 | missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); | 43 | missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); |
36 | sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); | 44 | sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); |
37 | bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR); | 45 | bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR); |
46 | + bombe = chargerLutin("../../Lutins/invader_bombe.bmp",COULEUR_NOIR); | ||
38 | 47 | ||
39 | tailleLutin(canon,&hitboxcanonL,&hitboxcanonH); | 48 | tailleLutin(canon,&hitboxcanonL,&hitboxcanonH); |
40 | tailleLutin(missile,&hitboxmissileL,&hitboxmissileH); | 49 | tailleLutin(missile,&hitboxmissileL,&hitboxmissileH); |
41 | tailleLutin(sbire,&hitboxsbireL,&hitboxsbireH); | 50 | tailleLutin(sbire,&hitboxsbireL,&hitboxsbireH); |
42 | tailleLutin(bouillie,&hitboxbouillieL,&hitboxbouillieH); | 51 | tailleLutin(bouillie,&hitboxbouillieL,&hitboxbouillieH); |
52 | + tailleLutin(bombe,&hitboxbombeL,&hitboxbombeH); | ||
43 | 53 | ||
44 | -#define JoueurX TailleX/2-hitboxcanonL/2 | ||
45 | -#define JoueurY 9*TailleY/10 | ||
46 | - | ||
47 | - joueur.posx = JoueurX; | ||
48 | - joueur.posy = JoueurY ; | ||
49 | } | 54 | } |
50 | 55 | ||
51 | 56 |
Main/init.h
@@ -5,6 +5,7 @@ extern int canon; | @@ -5,6 +5,7 @@ extern int canon; | ||
5 | extern int missile; | 5 | extern int missile; |
6 | extern int sbire; | 6 | extern int sbire; |
7 | extern int bouillie; | 7 | extern int bouillie; |
8 | +extern int bombe; | ||
8 | 9 | ||
9 | extern struct entite joueur; | 10 | extern struct entite joueur; |
10 | extern char Nom[15]; | 11 | extern char Nom[15]; |
@@ -18,6 +19,8 @@ extern int hitboxsbireL; | @@ -18,6 +19,8 @@ extern int hitboxsbireL; | ||
18 | extern int hitboxsbireH; | 19 | extern int hitboxsbireH; |
19 | extern int hitboxbouillieL; | 20 | extern int hitboxbouillieL; |
20 | extern int hitboxbouillieH; | 21 | extern int hitboxbouillieH; |
22 | +extern int hitboxbombeL; | ||
23 | +extern int hitboxbombeH; | ||
21 | 24 | ||
22 | void initialiser(); | 25 | void initialiser(); |
23 | char pagedemarrage(); | 26 | char pagedemarrage(); |
Main/main.c
@@ -22,15 +22,18 @@ int main() | @@ -22,15 +22,18 @@ int main() | ||
22 | 22 | ||
23 | struct liste_entite *enemies = NULL; | 23 | struct liste_entite *enemies = NULL; |
24 | struct liste_entite *tires = NULL; | 24 | struct liste_entite *tires = NULL; |
25 | + struct liste_entite *bombes = NULL; | ||
25 | 26 | ||
26 | char texte[15]="SCORE : "; | 27 | char texte[15]="SCORE : "; |
27 | int Score = lutinTexte(texte,COULEUR_BLANC); | 28 | int Score = lutinTexte(texte,COULEUR_BLANC); |
28 | 29 | ||
29 | 30 | ||
30 | - LigneSbire(&enemies,3,1); | 31 | + LigneSbire(&enemies,8,3); |
31 | int SensVague=1; | 32 | int SensVague=1; |
32 | 33 | ||
33 | - int compt=0; | 34 | + int compteur=0; |
35 | + int DropAlea=0; | ||
36 | + int CheckAlea=0; | ||
34 | 37 | ||
35 | if (pagedemarrage() != 'j') | 38 | if (pagedemarrage() != 'j') |
36 | { | 39 | { |
@@ -45,27 +48,42 @@ int main() | @@ -45,27 +48,42 @@ int main() | ||
45 | rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); | 48 | rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); |
46 | afficherLutin(Score,0,Sol+ErreurHitbox); | 49 | afficherLutin(Score,0,Sol+ErreurHitbox); |
47 | 50 | ||
48 | - afficherLutin(canon,joueur.posx,joueur.posy); | ||
49 | - | ||
50 | - if(compt==10) | 51 | + afficherLutin(canon,joueur.posx - hitboxcanonL/2 + ErreurHitbox,joueur.posy); |
52 | + | ||
53 | + if (DropAlea == 0) | ||
51 | { | 54 | { |
52 | - DeplacementSbire(enemies,&SensVague,1); | ||
53 | - compt=0; | 55 | + DropAlea = rand() % 31 + 100; |
54 | } | 56 | } |
55 | - AfficherSbire(sbire,enemies); | ||
56 | - | 57 | + if (CheckAlea == DropAlea) |
58 | + { | ||
59 | + MakeBombeDroppable(enemies,&bombes); | ||
60 | + DropAlea=0; | ||
61 | + CheckAlea=0; | ||
62 | + } | ||
63 | + | ||
64 | + AfficherSbire(sbire,hitboxsbireL,hitboxsbireH,enemies); | ||
65 | + | ||
57 | input = touche(); | 66 | input = touche(); |
58 | action(&joueur,input,&tires); | 67 | action(&joueur,input,&tires); |
59 | 68 | ||
69 | + if (compteur==10) | ||
70 | + { | ||
71 | + DeplacementSbire(enemies,&SensVague,1); | ||
72 | + compteur=0; | ||
73 | + } | ||
74 | + | ||
60 | DeplacementTire(missile,&tires); | 75 | DeplacementTire(missile,&tires); |
61 | 76 | ||
77 | + DeplacementBombe(bombe,&bombes); | ||
78 | + | ||
62 | SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); | 79 | SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); |
63 | 80 | ||
64 | majSurface(); | 81 | majSurface(); |
65 | 82 | ||
66 | SDL_Delay(20); | 83 | SDL_Delay(20); |
67 | 84 | ||
68 | - compt+=1; | 85 | + compteur+=1; |
86 | + CheckAlea+=1; | ||
69 | } | 87 | } |
70 | return 0; | 88 | return 0; |
71 | } | 89 | } |
Monstre/Monstre.c
@@ -6,8 +6,9 @@ | @@ -6,8 +6,9 @@ | ||
6 | 6 | ||
7 | #define TailleX 500 | 7 | #define TailleX 500 |
8 | #define TailleY 500 | 8 | #define TailleY 500 |
9 | +#define ErreurHitbox 2 | ||
9 | 10 | ||
10 | -//sens 1 = Va vers la droite | 11 | +//Sens = 1 -> Va vers la droite |
11 | void DeplacementSbire(struct liste_entite *l, int *psens, int speed) | 12 | void DeplacementSbire(struct liste_entite *l, int *psens, int speed) |
12 | { | 13 | { |
13 | int ind=0; | 14 | int ind=0; |
@@ -50,28 +51,40 @@ void DeplacementSbire(struct liste_entite *l, int *psens, int speed) | @@ -50,28 +51,40 @@ void DeplacementSbire(struct liste_entite *l, int *psens, int speed) | ||
50 | 51 | ||
51 | 52 | ||
52 | 53 | ||
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) | 54 | void LigneSbire(struct liste_entite **enemies,int nbr_enemies, int nbr_rangee) |
66 | { | 55 | { |
67 | - for (int j=1; j<=nbr_rangee; j++) | 56 | + for (int j=1; j<= nbr_rangee; j++) |
68 | { | 57 | { |
69 | int compteurY=j*TailleY/10; | 58 | int compteurY=j*TailleY/10; |
70 | int compteurX=TailleX/nbr_enemies; | 59 | int compteurX=TailleX/nbr_enemies; |
60 | + | ||
71 | for (int i=0; i<nbr_enemies; i++) | 61 | for (int i=0; i<nbr_enemies; i++) |
72 | { | 62 | { |
73 | - ajout_tete(enemies,creer_entite(compteurX,compteurY,j)); | ||
74 | - compteurX +=2*TailleX/(3*nbr_enemies); | 63 | + if (j == nbr_rangee) |
64 | + { | ||
65 | + ajout_tete(enemies,creer_entite(compteurX,compteurY,1)); | ||
66 | + compteurX +=2*TailleX/(3*nbr_enemies); | ||
67 | + } | ||
68 | + else | ||
69 | + { | ||
70 | + ajout_tete(enemies,creer_entite(compteurX,compteurY,0)); | ||
71 | + compteurX +=2*TailleX/(3*nbr_enemies); | ||
72 | + } | ||
75 | } | 73 | } |
76 | } | 74 | } |
77 | } | 75 | } |
76 | + | ||
77 | + | ||
78 | + | ||
79 | + | ||
80 | +void AfficherSbire(int lutin, int L, int H, struct liste_entite *l) | ||
81 | +{ | ||
82 | + struct liste_entite *ml=l; | ||
83 | + while(ml != NULL) | ||
84 | + { | ||
85 | + afficherLutin(lutin,ml->enti.posx - L/2 + ErreurHitbox,ml->enti.posy - H/2 + ErreurHitbox); | ||
86 | + ml=ml->suivant; | ||
87 | + } | ||
88 | +} | ||
89 | + | ||
90 | + |
Monstre/Monstre.h
@@ -3,6 +3,6 @@ | @@ -3,6 +3,6 @@ | ||
3 | 3 | ||
4 | void DeplacementSbire(struct liste_entite*,int*,int); | 4 | void DeplacementSbire(struct liste_entite*,int*,int); |
5 | 5 | ||
6 | -void AfficherSbire(int,struct liste_entite*); | ||
7 | - | ||
8 | void LigneSbire(struct liste_entite**,int,int); | 6 | void LigneSbire(struct liste_entite**,int,int); |
7 | + | ||
8 | +void AfficherSbire(int,int,int,struct liste_entite*); |