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