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 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | +#include <string.h> | ||
3 | #include "../Graphique/libgraph.h" | 4 | #include "../Graphique/libgraph.h" |
4 | #include "../ListeC/Liste.h" | 5 | #include "../ListeC/Liste.h" |
5 | #include "Interactif.h" | 6 | #include "Interactif.h" |
@@ -10,65 +11,64 @@ | @@ -10,65 +11,64 @@ | ||
10 | #define ErreurHitbox 2 | 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 | //CheckX | 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 | //CheckY | 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 | struct liste_entite *pL1=Liste1; | 36 | struct liste_entite *pL1=Liste1; |
52 | while (pL1 != NULL) | 37 | while (pL1 != NULL) |
53 | { | 38 | { |
54 | if(CheckCollisionEntiteEntite(pL1->enti,L1,H1,enti2,L2,H2) == 1) | 39 | if(CheckCollisionEntiteEntite(pL1->enti,L1,H1,enti2,L2,H2) == 1) |
55 | { | 40 | { |
56 | - return 1; | 41 | + return &pL1->enti; |
57 | } | 42 | } |
58 | pL1=pL1->suivant; | 43 | pL1=pL1->suivant; |
59 | } | 44 | } |
60 | - return 0; | 45 | + return NULL; |
61 | } | 46 | } |
62 | 47 | ||
63 | 48 | ||
49 | + | ||
50 | + | ||
64 | struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1,int H1,struct liste_entite *Liste2,int L2, int H2) | 51 | struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1,int H1,struct liste_entite *Liste2,int L2, int H2) |
65 | { | 52 | { |
66 | struct liste_entite *pL2=Liste2; | 53 | struct liste_entite *pL2=Liste2; |
67 | while (pL2 != NULL) | 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 | else | 73 | else |
74 | pL2=pL2->suivant; | 74 | pL2=pL2->suivant; |
@@ -77,26 +77,98 @@ struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1 | @@ -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 | void Tirer(struct entite joueur, struct liste_entite **pl) | 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 | struct liste_entite *ml = *l; | 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 | else | 173 | else |
102 | { | 174 | { |
@@ -107,22 +179,6 @@ void DeplacementTire(int tire,struct liste_entite **l) | @@ -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 | char touche() | 183 | char touche() |
128 | { | 184 | { |
@@ -132,15 +188,29 @@ char touche() | @@ -132,15 +188,29 @@ char touche() | ||
132 | return touche; | 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,7 +4,7 @@ | ||
4 | 4 | ||
5 | int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int); | 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 | struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int); | 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,7 +12,7 @@ void Tirer(struct entite, struct liste_entite**); | ||
12 | 12 | ||
13 | void DeplacementTire(int,struct liste_entite**); | 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 | char touche(); | 17 | char touche(); |
18 | 18 |
ListeC/Liste.c
@@ -2,17 +2,13 @@ | @@ -2,17 +2,13 @@ | ||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include "Liste.h" | 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 | struct entite e; | 8 | struct entite e; |
13 | e.posx=x; | 9 | e.posx=x; |
14 | e.posy=y; | 10 | e.posy=y; |
15 | - e.id=idd; | 11 | + e.etage=etage; |
16 | return e; | 12 | return e; |
17 | } | 13 | } |
18 | 14 |
ListeC/Liste.h
@@ -5,7 +5,7 @@ struct entite | @@ -5,7 +5,7 @@ struct entite | ||
5 | { | 5 | { |
6 | int posx; | 6 | int posx; |
7 | int posy; | 7 | int posy; |
8 | - int id; | 8 | + int etage; |
9 | }; | 9 | }; |
10 | 10 | ||
11 | 11 | ||
@@ -18,8 +18,6 @@ struct liste_entite | @@ -18,8 +18,6 @@ struct liste_entite | ||
18 | 18 | ||
19 | void ajout_tete(struct liste_entite**, struct entite); | 19 | void ajout_tete(struct liste_entite**, struct entite); |
20 | 20 | ||
21 | -void creer_liste(struct liste_entite*); | ||
22 | - | ||
23 | struct entite creer_entite(int,int,int); | 21 | struct entite creer_entite(int,int,int); |
24 | 22 | ||
25 | void imprimer_liste(struct liste_entite*); | 23 | void imprimer_liste(struct liste_entite*); |
Main/init.c
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include "../Graphique/libgraph.h" | 3 | #include "../Graphique/libgraph.h" |
4 | #include "../ListeC/Liste.h" | 4 | #include "../ListeC/Liste.h" |
5 | +#include "../Interactif/Interactif.h" | ||
5 | #include "init.h" | 6 | #include "init.h" |
6 | 7 | ||
7 | #define TailleX 500 | 8 | #define TailleX 500 |
@@ -12,11 +13,9 @@ int missile; | @@ -12,11 +13,9 @@ int missile; | ||
12 | int sbire; | 13 | int sbire; |
13 | int bouillie; | 14 | int bouillie; |
14 | 15 | ||
15 | -struct liste_entite *enemies = NULL; | ||
16 | -struct liste_entite *tires = NULL; | ||
17 | struct entite joueur; | 16 | struct entite joueur; |
18 | 17 | ||
19 | -char Nom[20]="Space_Invader"; | 18 | +char Nom[15]="Space Invader"; |
20 | char input='\0'; | 19 | char input='\0'; |
21 | 20 | ||
22 | int hitboxcanonL; | 21 | int hitboxcanonL; |
@@ -28,6 +27,8 @@ int hitboxsbireH; | @@ -28,6 +27,8 @@ int hitboxsbireH; | ||
28 | int hitboxbouillieL; | 27 | int hitboxbouillieL; |
29 | int hitboxbouillieH; | 28 | int hitboxbouillieH; |
30 | 29 | ||
30 | + | ||
31 | + | ||
31 | void initialiser() | 32 | void initialiser() |
32 | { | 33 | { |
33 | canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); | 34 | canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); |
@@ -47,3 +48,36 @@ void initialiser() | @@ -47,3 +48,36 @@ void initialiser() | ||
47 | joueur.posy = JoueurY ; | 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,11 +5,11 @@ 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 struct liste_entite *enemies; | ||
9 | -extern struct liste_entite *tires; | 8 | + |
10 | extern struct entite joueur; | 9 | extern struct entite joueur; |
11 | -extern char Nom[20]; | 10 | +extern char Nom[15]; |
12 | extern char input; | 11 | extern char input; |
12 | + | ||
13 | extern int hitboxcanonL; | 13 | extern int hitboxcanonL; |
14 | extern int hitboxcanonH; | 14 | extern int hitboxcanonH; |
15 | extern int hitboxmissileL; | 15 | extern int hitboxmissileL; |
@@ -20,4 +20,4 @@ extern int hitboxbouillieL; | @@ -20,4 +20,4 @@ extern int hitboxbouillieL; | ||
20 | extern int hitboxbouillieH; | 20 | extern int hitboxbouillieH; |
21 | 21 | ||
22 | void initialiser(); | 22 | void initialiser(); |
23 | - | 23 | +char pagedemarrage(); |
Main/main.c
@@ -18,39 +18,54 @@ int main() | @@ -18,39 +18,54 @@ int main() | ||
18 | creerSurface(TailleX,TailleY,Nom); | 18 | creerSurface(TailleX,TailleY,Nom); |
19 | 19 | ||
20 | initialiser(); | 20 | initialiser(); |
21 | + | ||
22 | + | ||
23 | + struct liste_entite *enemies = NULL; | ||
24 | + struct liste_entite *tires = NULL; | ||
21 | 25 | ||
22 | char texte[15]="SCORE : "; | 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 | int SensVague=1; | 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 | while(input!='m') | 42 | while(input!='m') |
34 | { | 43 | { |
35 | rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); | 44 | rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); |
36 | rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); | 45 | rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); |
46 | + afficherLutin(Score,0,Sol+ErreurHitbox); | ||
37 | 47 | ||
38 | afficherLutin(canon,joueur.posx,joueur.posy); | 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 | input = touche(); | 57 | input = touche(); |
43 | action(&joueur,input,&tires); | 58 | action(&joueur,input,&tires); |
44 | 59 | ||
45 | DeplacementTire(missile,&tires); | 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 | majSurface(); | 64 | majSurface(); |
52 | 65 | ||
53 | SDL_Delay(20); | 66 | SDL_Delay(20); |
67 | + | ||
68 | + compt+=1; | ||
54 | } | 69 | } |
55 | return 0; | 70 | return 0; |
56 | } | 71 | } |
Monstre/Monstre.c
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | #define TailleY 500 | 8 | #define TailleY 500 |
9 | 9 | ||
10 | //sens 1 = Va vers la droite | 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 | int ind=0; | 13 | int ind=0; |
14 | struct liste_entite *ml=l; | 14 | struct liste_entite *ml=l; |
@@ -18,13 +18,11 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | @@ -18,13 +18,11 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | ||
18 | { | 18 | { |
19 | ml->enti.posx+=speed; | 19 | ml->enti.posx+=speed; |
20 | if(ml->enti.posx>=9*TailleX/10)ind=1; | 20 | if(ml->enti.posx>=9*TailleX/10)ind=1; |
21 | - afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | ||
22 | } | 21 | } |
23 | else | 22 | else |
24 | { | 23 | { |
25 | ml->enti.posx-=speed; | 24 | ml->enti.posx-=speed; |
26 | if(ml->enti.posx<=TailleX/10)ind=2; | 25 | if(ml->enti.posx<=TailleX/10)ind=2; |
27 | - afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | ||
28 | } | 26 | } |
29 | ml=ml->suivant; | 27 | ml=ml->suivant; |
30 | } | 28 | } |
@@ -51,13 +49,29 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | @@ -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 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <stdlib.h> | 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); |