Commit 28da2ac24803c4fd868a10b206b3d70af3af40cb

Authored by Martin CHAUVELIERE
1 parent 3c835d74

Ajout Victoire, collision Joueur-Enemies, Drop de bombe de l'entite la plus basse de sa colonne

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**);
Main/.nfs00000000073b016100000009 0 → 100755
No preview for this file type
@@ -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 +}
@@ -27,3 +27,4 @@ void initialiserjoueur(struct entite*); @@ -27,3 +27,4 @@ void initialiserjoueur(struct entite*);
27 char pagedemarrage(); 27 char pagedemarrage();
28 void pagemort(int); 28 void pagemort(int);
29 void pageGameOver(); 29 void pageGameOver();
  30 +void pageVictoire();
@@ -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);