Commit 66b129e56791445ce04a9417f5832e44c3798ab9

Authored by Martin CHAUVELIERE
1 parent 590ac30b

Collisions Sbires Missiles Terminées

Interactif/Interactif.c
@@ -3,9 +3,79 @@ @@ -3,9 +3,79 @@
3 #include "../Graphique/libgraph.h" 3 #include "../Graphique/libgraph.h"
4 #include "../ListeC/Liste.h" 4 #include "../ListeC/Liste.h"
5 #include "Interactif.h" 5 #include "Interactif.h"
  6 +#include "../Main/init.h"
6 7
7 #define TailleX 500 8 #define TailleX 500
8 #define TailleY 500 9 #define TailleY 500
  10 +#define ErreurHitbox 2
  11 +
  12 +
  13 +int CheckCollisionEntiteEntite(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2)
  14 +{
  15 + //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 +
  30 + //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;
  46 +}
  47 +
  48 +
  49 +int CheckCollisionListeEntite(struct liste_entite *Liste1,int L1,int H1,struct entite enti2, int L2, int H2)
  50 +{
  51 + struct liste_entite *pL1=Liste1;
  52 + while (pL1 != NULL)
  53 + {
  54 + if(CheckCollisionEntiteEntite(pL1->enti,L1,H1,enti2,L2,H2) == 1)
  55 + {
  56 + return 1;
  57 + }
  58 + pL1=pL1->suivant;
  59 + }
  60 + return 0;
  61 +}
  62 +
  63 +
  64 +struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1,int H1,struct liste_entite *Liste2,int L2, int H2)
  65 +{
  66 + struct liste_entite *pL2=Liste2;
  67 + while (pL2 != NULL)
  68 + {
  69 + if(CheckCollisionListeEntite(Liste1,L1,H1,pL2->enti,L2,H2) == 1)
  70 + {
  71 + return pL2;
  72 + }
  73 + else
  74 + pL2=pL2->suivant;
  75 + }
  76 + return NULL;
  77 +}
  78 +
9 79
10 void Tirer(struct entite joueur, struct liste_entite **pl) 80 void Tirer(struct entite joueur, struct liste_entite **pl)
11 { 81 {
@@ -17,7 +87,7 @@ void Tirer(struct entite joueur, struct liste_entite **pl) @@ -17,7 +87,7 @@ void Tirer(struct entite joueur, struct liste_entite **pl)
17 } 87 }
18 88
19 89
20 -void DeplacementTire(int tire, int explo, struct liste_entite **l) 90 +void DeplacementTire(int tire,struct liste_entite **l)
21 { 91 {
22 struct liste_entite *ml = *l; 92 struct liste_entite *ml = *l;
23 while (ml != NULL) 93 while (ml != NULL)
@@ -25,7 +95,7 @@ void DeplacementTire(int tire, int explo, struct liste_entite **l) @@ -25,7 +95,7 @@ void DeplacementTire(int tire, int explo, struct liste_entite **l)
25 if (ml->enti.posy <= 0) 95 if (ml->enti.posy <= 0)
26 { 96 {
27 *l = NULL; 97 *l = NULL;
28 - afficherLutin(explo, ml->enti.posx-20, ml->enti.posy); 98 + afficherLutin(bouillie, ml->enti.posx-hitboxbouillieL/2, ml->enti.posy);
29 break; 99 break;
30 } 100 }
31 else 101 else
@@ -37,6 +107,22 @@ void DeplacementTire(int tire, int explo, struct liste_entite **l) @@ -37,6 +107,22 @@ void DeplacementTire(int tire, int explo, struct liste_entite **l)
37 } 107 }
38 } 108 }
39 109
  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 +
40 126
41 char touche() 127 char touche()
42 { 128 {
Interactif/Interactif.h
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 3
  4 +
  5 +int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int);
  6 +
  7 +int CheckCollisionListeEntite(struct liste_entite*,int,int,struct entite,int,int);
  8 +
  9 +struct liste_entite* CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int);
  10 +
4 void Tirer(struct entite, struct liste_entite**); 11 void Tirer(struct entite, struct liste_entite**);
5 12
6 -void DeplacementTire(int,int,struct liste_entite**); 13 +void DeplacementTire(int,struct liste_entite**);
  14 +
  15 +void SupprIfTouch(struct liste_entite**,int,int,struct liste_entite**,int,int);
7 16
8 char touche(); 17 char touche();
9 18
@@ -38,4 +38,41 @@ void imprimer_liste(struct liste_entite *l) @@ -38,4 +38,41 @@ void imprimer_liste(struct liste_entite *l)
38 printf("\n"); 38 printf("\n");
39 } 39 }
40 40
41 - 41 +
  42 +void Supprimerentite(struct liste_entite** l, struct liste_entite* suppr)
  43 +{
  44 + //Liste ou Element NULL
  45 + if(*l == NULL || suppr == NULL)
  46 + {
  47 + return;
  48 + }
  49 +
  50 + //Dernier et Seul élément
  51 + if (*l == suppr && suppr->suivant == NULL)
  52 + {
  53 + *l = NULL;
  54 + return;
  55 + }
  56 +
  57 + //1er element
  58 + if(*l == suppr)
  59 + {
  60 + *l=suppr->suivant;
  61 + }
  62 +
  63 + else
  64 + {
  65 + struct liste_entite* precedent = *l;
  66 + while(precedent->suivant != NULL && precedent->suivant != suppr)
  67 + {
  68 + precedent=precedent->suivant;
  69 + }
  70 +
  71 + if(precedent->suivant == NULL)
  72 + {
  73 + return ;
  74 + }
  75 + precedent->suivant = suppr->suivant;
  76 + }
  77 + free(suppr);
  78 +}
@@ -23,3 +23,5 @@ void creer_liste(struct liste_entite*); @@ -23,3 +23,5 @@ void creer_liste(struct liste_entite*);
23 struct entite creer_entite(int,int,int); 23 struct entite creer_entite(int,int,int);
24 24
25 void imprimer_liste(struct liste_entite*); 25 void imprimer_liste(struct liste_entite*);
  26 +
  27 +void Supprimerentite(struct liste_entite**, struct liste_entite*);
@@ -25,6 +25,8 @@ int hitboxmissileL; @@ -25,6 +25,8 @@ int hitboxmissileL;
25 int hitboxmissileH; 25 int hitboxmissileH;
26 int hitboxsbireL; 26 int hitboxsbireL;
27 int hitboxsbireH; 27 int hitboxsbireH;
  28 +int hitboxbouillieL;
  29 +int hitboxbouillieH;
28 30
29 void initialiser() 31 void initialiser()
30 { 32 {
@@ -33,15 +35,10 @@ void initialiser() @@ -33,15 +35,10 @@ void initialiser()
33 sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); 35 sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR);
34 bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR); 36 bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR);
35 37
36 - int* hitboxL=&hitboxcanonL;  
37 - int* hitboxH=&hitboxcanonH;  
38 - tailleLutin(canon,hitboxL,hitboxH);  
39 - hitboxL=&hitboxmissileL;  
40 - hitboxH=&hitboxmissileH;  
41 - tailleLutin(canon,hitboxL,hitboxH);  
42 - hitboxL=&hitboxsbireL;  
43 - hitboxH=&hitboxsbireH;  
44 - tailleLutin(sbire,hitboxL,hitboxH); 38 + tailleLutin(canon,&hitboxcanonL,&hitboxcanonH);
  39 + tailleLutin(missile,&hitboxmissileL,&hitboxmissileH);
  40 + tailleLutin(sbire,&hitboxsbireL,&hitboxsbireH);
  41 + tailleLutin(bouillie,&hitboxbouillieL,&hitboxbouillieH);
45 42
46 #define JoueurX TailleX/2-hitboxcanonL/2 43 #define JoueurX TailleX/2-hitboxcanonL/2
47 #define JoueurY 9*TailleY/10 44 #define JoueurY 9*TailleY/10
@@ -16,6 +16,8 @@ extern int hitboxmissileL; @@ -16,6 +16,8 @@ extern int hitboxmissileL;
16 extern int hitboxmissileH; 16 extern int hitboxmissileH;
17 extern int hitboxsbireL; 17 extern int hitboxsbireL;
18 extern int hitboxsbireH; 18 extern int hitboxsbireH;
  19 +extern int hitboxbouillieL;
  20 +extern int hitboxbouillieH;
19 21
20 void initialiser(); 22 void initialiser();
21 23
@@ -11,42 +11,7 @@ @@ -11,42 +11,7 @@
11 #define TailleX 500 11 #define TailleX 500
12 #define TailleY 500 12 #define TailleY 500
13 #define Sol 475 13 #define Sol 475
14 -  
15 -int CheckCollision(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2)  
16 -{  
17 - //CheckX  
18 - int gauche1 = enti1.posx-L1;  
19 - int droite1 = enti1.posx+L1;  
20 - int gauche2 = enti2.posx-L2;  
21 - int droite2 = enti2.posx+L2;  
22 - int CheckX=0;  
23 - if(gauche1 >= gauche2 && gauche1 <= droite2)  
24 - {  
25 - CheckX=1;  
26 - }  
27 - else if(droite1 >= gauche2 && droite1 <= droite2)  
28 - {  
29 - CheckX=1;  
30 - }  
31 -  
32 - //CheckY  
33 - int haut1 = enti1.posy-H1;  
34 - int bas1 = enti1.posy+H1;  
35 - int haut2 = enti2.posy-H2;  
36 - int bas2 = enti2.posy+H2;  
37 - int CheckY=0;  
38 - if(haut1 >= bas2 && haut1 <= haut2)  
39 - {  
40 - CheckY=1;  
41 - }  
42 - else if(bas1 >= bas2 && bas1 <= haut2)  
43 - {  
44 - CheckY=1;  
45 - }  
46 -  
47 - if(CheckX+CheckY==2){return 1;}  
48 - return 0;  
49 -} 14 +#define ErreurHitbox 2
50 15
51 int main() 16 int main()
52 { 17 {
@@ -63,11 +28,8 @@ int main() @@ -63,11 +28,8 @@ int main()
63 Ligne_Monstre(&enemies,5); 28 Ligne_Monstre(&enemies,5);
64 int SensVague=1; 29 int SensVague=1;
65 int *psens=&SensVague; 30 int *psens=&SensVague;
66 -  
67 - printf("%d",hitboxcanonL);  
68 - printf("%d",hitboxsbireL);  
69 - printf("%d",hitboxmissileL);  
70 31
  32 +
71 while(input!='m') 33 while(input!='m')
72 { 34 {
73 rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); 35 rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR);
@@ -80,20 +42,10 @@ int main() @@ -80,20 +42,10 @@ int main()
80 input = touche(); 42 input = touche();
81 action(&joueur,input,&tires); 43 action(&joueur,input,&tires);
82 44
83 - DeplacementTire(missile,bouillie,&tires); 45 + DeplacementTire(missile,&tires);
84 46
85 - /* Test  
86 - struct entite missile1 = &tires->enti; 47 + SupprIfTouch(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH);
87 48
88 - struct liste_entite *p;  
89 - p = enemies;  
90 - while (p != NULL)  
91 - {  
92 - int ok = CheckCollision(missile1,hitboxmissileL,hitboxmissileH,p->enti,hitboxsbireL,hitboxsbireH);  
93 - printf("%d \n",ok);  
94 - p=p->suivant;  
95 - }  
96 - */  
97 afficherLutin(Score,0,Sol); 49 afficherLutin(Score,0,Sol);
98 50
99 majSurface(); 51 majSurface();
@@ -3,6 +3,74 @@ @@ -3,6 +3,74 @@
3 #include "../Graphique/libgraph.h" 3 #include "../Graphique/libgraph.h"
4 #include "../ListeC/Liste.h" 4 #include "../ListeC/Liste.h"
5 #include "Missile.h" 5 #include "Missile.h"
  6 +#define ErreurHitbox 2
  7 +
  8 +
  9 +int CheckCollisionEntiteEntite(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2)
  10 +{
  11 + //CheckX
  12 + int gauche1 = enti1.posx+ErreurHitbox;
  13 + int droite1 = enti1.posx+L1-ErreurHitbox;
  14 + int gauche2 = enti2.posx+ErreurHitbox;
  15 + int droite2 = enti2.posx+L2-ErreurHitbox;
  16 + int CheckX=0;
  17 + if(gauche1 >= gauche2 && gauche1 <= droite2)
  18 + {
  19 + CheckX=1;
  20 + }
  21 + else if(droite1 >= gauche2 && droite1 <= droite2)
  22 + {
  23 + CheckX=1;
  24 + }
  25 +
  26 + //CheckY
  27 + int haut1 = enti1.posy+ErreurHitbox;
  28 + int bas1 = enti1.posy+H1-ErreurHitbox;
  29 + int haut2 = enti2.posy+ErreurHitbox;
  30 + int bas2 = enti2.posy+H2-ErreurHitbox;
  31 + int CheckY=0;
  32 + if(haut1 <= bas2 && haut1 >= haut2)
  33 + {
  34 + CheckY=1;
  35 + }
  36 + else if(bas1 <= bas2 && bas1 >= haut2)
  37 + {
  38 + CheckY=1;
  39 + }
  40 + if(CheckX+CheckY==2){return 1;}
  41 + else return 0;
  42 +}
  43 +
  44 +
  45 +int CheckCollisionListeEntite(struct liste_entite *Liste1,int L1,int H1,struct entite enti2, int L2, int H2)
  46 +{
  47 + struct liste_entite *pL1=Liste1;
  48 + while (pL1 != NULL)
  49 + {
  50 + if(CheckCollisionEntiteEntite(pL1->enti,L1,H1,enti2,L2,H2) == 1)
  51 + {
  52 + return 1;
  53 + }
  54 + pL1=pL1->suivant;
  55 + }
  56 + return 0;
  57 +}
  58 +
  59 +
  60 +int CheckCollisionListeListe(struct liste_entite *Liste1,int L1,int H1,struct liste_entite *Liste2,int L2, int H2)
  61 +{
  62 + struct liste_entite *pL2=Liste2;
  63 + while (pL2 != NULL)
  64 + {
  65 + if(CheckCollisionListeEntite(Liste1,L1,H1,pL2->enti,L2,H2) == 1)
  66 + {
  67 + return 1;
  68 + }
  69 + else
  70 + pL2=pL2->suivant;
  71 + }
  72 + return 0;
  73 +}
6 74
7 75
8 void Tirer(struct entite joueur, struct liste_entite **pl) 76 void Tirer(struct entite joueur, struct liste_entite **pl)
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 3
  4 +int CheckCollisionEntiteEntite(struct entite,int,int,struct entite,int,int);
  5 +
  6 +int CheckCollisionListeEntite(struct liste_entite*,int,int,struct entite,int,int);
  7 +
  8 +int CheckCollisionListeListe(struct liste_entite*,int,int,struct liste_entite*,int,int);
  9 +
4 void Tirer(struct entite, struct liste_entite**); 10 void Tirer(struct entite, struct liste_entite**);
5 11
6 void DeplacementTire(int,struct liste_entite*); 12 void DeplacementTire(int,struct liste_entite*);