Commit 28da2ac24803c4fd868a10b206b3d70af3af40cb
1 parent
3c835d74
Ajout Victoire, collision Joueur-Enemies, Drop de bombe de l'entite la plus basse de sa colonne
Showing
6 changed files
with
110 additions
and
2 deletions
Show diff stats
Interactif/Interactif.c
@@ -78,6 +78,41 @@ struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1 | @@ -78,6 +78,41 @@ struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1 | ||
78 | } | 78 | } |
79 | 79 | ||
80 | 80 | ||
81 | +void NouveauDroppeurBombe(struct liste_entite** liste, struct entite* ent) | ||
82 | +{ | ||
83 | + int posx = ent->posx; | ||
84 | + int posy = ent->posy; | ||
85 | + struct liste_entite* pListe = *liste; | ||
86 | + struct entite* ent_bas = NULL; | ||
87 | + | ||
88 | + // On parcourt la liste et on cherche l'entité la plus basse ayant la même position x | ||
89 | + while (pListe != NULL) | ||
90 | + { | ||
91 | + if (pListe->entite.posy != posy) | ||
92 | + { | ||
93 | + if (pListe->entite.posx == posx && ent_bas == NULL) | ||
94 | + { | ||
95 | + ent_bas = &pListe->entite; | ||
96 | + } | ||
97 | + else if (pListe->entite.posx == posx && pListe->entite.posy > ent_bas->posy) | ||
98 | + { | ||
99 | + ent_bas = &pListe->entite; | ||
100 | + } | ||
101 | + } | ||
102 | + pListe = pListe->suivant; | ||
103 | + } | ||
104 | + | ||
105 | + // Si aucune entité n'est située plus bas que l'entité en question, on ne peut pas dropper la bombe | ||
106 | + if (ent_bas == NULL) | ||
107 | + { | ||
108 | + return; | ||
109 | + } | ||
110 | + | ||
111 | + ent_bas->dropbombe = 1; | ||
112 | +} | ||
113 | + | ||
114 | + | ||
115 | + | ||
81 | 116 | ||
82 | 117 | ||
83 | int SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, struct liste_entite** Liste2, int L2, int H2) | 118 | int SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, struct liste_entite** Liste2, int L2, int H2) |
@@ -89,6 +124,15 @@ int SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, st | @@ -89,6 +124,15 @@ int SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, st | ||
89 | struct entite* entite1 = &collision->entite; | 124 | struct entite* entite1 = &collision->entite; |
90 | struct entite* entite2 = &collision->suivant->entite; | 125 | struct entite* entite2 = &collision->suivant->entite; |
91 | 126 | ||
127 | + if (entite1->dropbombe == 1) | ||
128 | + { | ||
129 | + NouveauDroppeurBombe(Liste1,entite1); | ||
130 | + } | ||
131 | + | ||
132 | + if (entite2->dropbombe == 1) | ||
133 | + { | ||
134 | + NouveauDroppeurBombe(Liste2,entite2); | ||
135 | + } | ||
92 | // Suppression de l'entité 1 de la liste 1 | 136 | // Suppression de l'entité 1 de la liste 1 |
93 | SupprimerEntite(Liste1, entite1); | 137 | SupprimerEntite(Liste1, entite1); |
94 | 138 |
Interactif/Interactif.h
@@ -6,6 +6,8 @@ int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int); | @@ -6,6 +6,8 @@ int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int); | ||
6 | 6 | ||
7 | struct entite* 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 | +void NouveauDroppeurBombe(struct liste_entite**,struct entite*); | ||
10 | + | ||
9 | struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int); | 11 | struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int); |
10 | 12 | ||
11 | void Tirer(struct entite, struct liste_entite**); | 13 | void Tirer(struct entite, struct liste_entite**); |
No preview for this file type
Main/init.c
@@ -190,3 +190,29 @@ void pageGameOver() | @@ -190,3 +190,29 @@ void pageGameOver() | ||
190 | TailleY / 2 - Hauteur / 2); | 190 | TailleY / 2 - Hauteur / 2); |
191 | 191 | ||
192 | } | 192 | } |
193 | + | ||
194 | + | ||
195 | +void pageVictoire() | ||
196 | +{ | ||
197 | + static const char policeDefaut[] = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"; | ||
198 | + int Largeur = 0; | ||
199 | + int Hauteur = 0; | ||
200 | + char fin[] = "VICTOIRE"; | ||
201 | + | ||
202 | + choisirPolice(policeDefaut, TailleX / 10); | ||
203 | + int LutinFin = lutinTexte(fin, COULEUR_VERT); | ||
204 | + | ||
205 | + rectanglePlein (0, | ||
206 | + 0, | ||
207 | + TailleX, | ||
208 | + TailleY, | ||
209 | + COULEUR_NOIR); | ||
210 | + | ||
211 | + tailleLutin (LutinFin, | ||
212 | + &Largeur, | ||
213 | + &Hauteur); | ||
214 | + afficherLutin (LutinFin, | ||
215 | + TailleX / 2 - Largeur / 2, | ||
216 | + TailleY / 2 - Hauteur / 2); | ||
217 | + | ||
218 | +} |
Main/init.h
Main/main.c
@@ -36,11 +36,14 @@ int main() | @@ -36,11 +36,14 @@ int main() | ||
36 | int CheckAlea=0; | 36 | int CheckAlea=0; |
37 | int mort = 0; | 37 | int mort = 0; |
38 | int nbr_vie = 3; | 38 | int nbr_vie = 3; |
39 | + char Touchememoire = '\0'; | ||
40 | + int compteurtouche = 0; | ||
39 | 41 | ||
40 | - if (pagedemarrage() != 'j') | 42 | + if ( pagedemarrage() != 'j') |
41 | { | 43 | { |
42 | return 0; | 44 | return 0; |
43 | } | 45 | } |
46 | + SDL_Delay(500); | ||
44 | 47 | ||
45 | //Bouble principale | 48 | //Bouble principale |
46 | while(input!='m') | 49 | while(input!='m') |
@@ -84,9 +87,25 @@ int main() | @@ -84,9 +87,25 @@ int main() | ||
84 | CheckAlea=0; | 87 | CheckAlea=0; |
85 | } | 88 | } |
86 | 89 | ||
90 | + | ||
87 | input = touche(); | 91 | input = touche(); |
88 | - action(&Ljoueur->entite,input,&tires); | 92 | + if (input != '\0') |
93 | + { | ||
94 | + Touchememoire = input; | ||
95 | + compteurtouche += 1; | ||
96 | + } | ||
97 | + if (compteurtouche == 2) | ||
98 | + { | ||
99 | + Touchememoire = '\0'; | ||
100 | + compteurtouche = 0; | ||
101 | + } | ||
102 | + else if (compteurtouche == 1) | ||
103 | + { | ||
104 | + action(&Ljoueur->entite,Touchememoire,&tires); | ||
105 | + } | ||
89 | 106 | ||
107 | + | ||
108 | + | ||
90 | if (compteur==10) | 109 | if (compteur==10) |
91 | { | 110 | { |
92 | DeplacementSbire(enemies,&SensVague,1); | 111 | DeplacementSbire(enemies,&SensVague,1); |
@@ -97,12 +116,28 @@ int main() | @@ -97,12 +116,28 @@ int main() | ||
97 | DeplacementBombe(bombe,&bombes); | 116 | DeplacementBombe(bombe,&bombes); |
98 | 117 | ||
99 | SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); | 118 | SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); |
119 | + | ||
100 | if (SupprimerEntitesEnCollision(&bombes,hitboxbombeL,hitboxbombeH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1) | 120 | if (SupprimerEntitesEnCollision(&bombes,hitboxbombeL,hitboxbombeH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1) |
101 | { | 121 | { |
102 | mort = 1; | 122 | mort = 1; |
103 | majSurface(); | 123 | majSurface(); |
104 | SDL_Delay(200); | 124 | SDL_Delay(200); |
105 | } | 125 | } |
126 | + if (SupprimerEntitesEnCollision(&enemies,hitboxsbireL,hitboxsbireH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1) | ||
127 | + { | ||
128 | + pageGameOver(); | ||
129 | + majSurface(); | ||
130 | + SDL_Delay(2000); | ||
131 | + return 0; | ||
132 | + } | ||
133 | + | ||
134 | + if (enemies == NULL) | ||
135 | + { | ||
136 | + pageVictoire(); | ||
137 | + majSurface(); | ||
138 | + SDL_Delay(2000); | ||
139 | + return 0; | ||
140 | + } | ||
106 | 141 | ||
107 | majSurface(); | 142 | majSurface(); |
108 | SDL_Delay(20); | 143 | SDL_Delay(20); |