Commit 66b129e56791445ce04a9417f5832e44c3798ab9
1 parent
590ac30b
Collisions Sbires Missiles Terminées
Showing
9 changed files
with
224 additions
and
65 deletions
Show diff stats
Interactif/Interactif.c
... | ... | @@ -3,9 +3,79 @@ |
3 | 3 | #include "../Graphique/libgraph.h" |
4 | 4 | #include "../ListeC/Liste.h" |
5 | 5 | #include "Interactif.h" |
6 | +#include "../Main/init.h" | |
6 | 7 | |
7 | 8 | #define TailleX 500 |
8 | 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 | 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 | 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 | 92 | struct liste_entite *ml = *l; |
23 | 93 | while (ml != NULL) |
... | ... | @@ -25,7 +95,7 @@ void DeplacementTire(int tire, int explo, struct liste_entite **l) |
25 | 95 | if (ml->enti.posy <= 0) |
26 | 96 | { |
27 | 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 | 99 | break; |
30 | 100 | } |
31 | 101 | else |
... | ... | @@ -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 | 127 | char touche() |
42 | 128 | { | ... | ... |
Interactif/Interactif.h
1 | 1 | #include <stdio.h> |
2 | 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 | 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 | 17 | char touche(); |
9 | 18 | ... | ... |
ListeC/Liste.c
... | ... | @@ -38,4 +38,41 @@ void imprimer_liste(struct liste_entite *l) |
38 | 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 | +} | ... | ... |
ListeC/Liste.h
Main/init.c
... | ... | @@ -25,6 +25,8 @@ int hitboxmissileL; |
25 | 25 | int hitboxmissileH; |
26 | 26 | int hitboxsbireL; |
27 | 27 | int hitboxsbireH; |
28 | +int hitboxbouillieL; | |
29 | +int hitboxbouillieH; | |
28 | 30 | |
29 | 31 | void initialiser() |
30 | 32 | { |
... | ... | @@ -33,15 +35,10 @@ void initialiser() |
33 | 35 | sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); |
34 | 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 | 43 | #define JoueurX TailleX/2-hitboxcanonL/2 |
47 | 44 | #define JoueurY 9*TailleY/10 | ... | ... |
Main/init.h
Main/main.c
... | ... | @@ -11,42 +11,7 @@ |
11 | 11 | #define TailleX 500 |
12 | 12 | #define TailleY 500 |
13 | 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 | 16 | int main() |
52 | 17 | { |
... | ... | @@ -63,11 +28,8 @@ int main() |
63 | 28 | Ligne_Monstre(&enemies,5); |
64 | 29 | int SensVague=1; |
65 | 30 | int *psens=&SensVague; |
66 | - | |
67 | - printf("%d",hitboxcanonL); | |
68 | - printf("%d",hitboxsbireL); | |
69 | - printf("%d",hitboxmissileL); | |
70 | 31 | |
32 | + | |
71 | 33 | while(input!='m') |
72 | 34 | { |
73 | 35 | rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); |
... | ... | @@ -80,20 +42,10 @@ int main() |
80 | 42 | input = touche(); |
81 | 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 | 49 | afficherLutin(Score,0,Sol); |
98 | 50 | |
99 | 51 | majSurface(); | ... | ... |
Missile/Missile.c
... | ... | @@ -3,6 +3,74 @@ |
3 | 3 | #include "../Graphique/libgraph.h" |
4 | 4 | #include "../ListeC/Liste.h" |
5 | 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 | 76 | void Tirer(struct entite joueur, struct liste_entite **pl) | ... | ... |
Missile/Missile.h
1 | 1 | #include <stdio.h> |
2 | 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 | 10 | void Tirer(struct entite, struct liste_entite**); |
5 | 11 | |
6 | 12 | void DeplacementTire(int,struct liste_entite*); | ... | ... |