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 | 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 | 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 | 124 | struct entite* entite1 = &collision->entite; |
90 | 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 | 136 | // Suppression de l'entité 1 de la liste 1 |
93 | 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 | |
7 | 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 | 11 | struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int); |
10 | 12 | |
11 | 13 | void Tirer(struct entite, struct liste_entite**); | ... | ... |
No preview for this file type
Main/init.c
... | ... | @@ -190,3 +190,29 @@ void pageGameOver() |
190 | 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 | 36 | int CheckAlea=0; |
37 | 37 | int mort = 0; |
38 | 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 | 44 | return 0; |
43 | 45 | } |
46 | + SDL_Delay(500); | |
44 | 47 | |
45 | 48 | //Bouble principale |
46 | 49 | while(input!='m') |
... | ... | @@ -84,9 +87,25 @@ int main() |
84 | 87 | CheckAlea=0; |
85 | 88 | } |
86 | 89 | |
90 | + | |
87 | 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 | 109 | if (compteur==10) |
91 | 110 | { |
92 | 111 | DeplacementSbire(enemies,&SensVague,1); |
... | ... | @@ -97,12 +116,28 @@ int main() |
97 | 116 | DeplacementBombe(bombe,&bombes); |
98 | 117 | |
99 | 118 | SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH); |
119 | + | |
100 | 120 | if (SupprimerEntitesEnCollision(&bombes,hitboxbombeL,hitboxbombeH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1) |
101 | 121 | { |
102 | 122 | mort = 1; |
103 | 123 | majSurface(); |
104 | 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 | 142 | majSurface(); |
108 | 143 | SDL_Delay(20); | ... | ... |