Commit 590ac30b4c9c25467e3b340ba0493ca2756de189
1 parent
65adbf2e
Debut Collision
Showing
10 changed files
with
287 additions
and
48 deletions
Show diff stats
@@ -0,0 +1,40 @@ | @@ -0,0 +1,40 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include "../Main/init.h" | ||
4 | +#include "../ListeC/Liste.h" | ||
5 | + | ||
6 | +int CheckCollision(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2) | ||
7 | +{ | ||
8 | + //CheckX | ||
9 | + int gauche1 = enti1.posx-L1; | ||
10 | + int droite1 = enti1.posx+L1; | ||
11 | + int gauche2 = enti2.posx-L2; | ||
12 | + int droite2 = enti2.posx+L2; | ||
13 | + int CheckX=0; | ||
14 | + if(gauche1 >= gauche2 && gauche1 <= droite2) | ||
15 | + { | ||
16 | + CheckX=1; | ||
17 | + } | ||
18 | + else if(droite1 >= gauche2 && droite1 <= droite2) | ||
19 | + { | ||
20 | + CheckX=1; | ||
21 | + } | ||
22 | + | ||
23 | + //CheckY | ||
24 | + int haut1 = enti1.posy-H1; | ||
25 | + int bas1 = enti1.posy+H1; | ||
26 | + int haut2 = enti2.posy-H2; | ||
27 | + int bas2 = enti2.posy+H2; | ||
28 | + int CheckY=0; | ||
29 | + if(haut1 >= bas2 && haut1 <= haut2) | ||
30 | + { | ||
31 | + CheckY=1; | ||
32 | + } | ||
33 | + else if(bas1 >= bas2 && bas1 <= haut2) | ||
34 | + { | ||
35 | + CheckY=1; | ||
36 | + } | ||
37 | + | ||
38 | + if(CheckX+CheckY==2){return 1;} | ||
39 | + return 0; | ||
40 | +} |
@@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include "../Graphique/libgraph.h" | ||
4 | +#include "../ListeC/Liste.h" | ||
5 | +#include "Interactif.h" | ||
6 | + | ||
7 | +#define TailleX 500 | ||
8 | +#define TailleY 500 | ||
9 | + | ||
10 | +void Tirer(struct entite joueur, struct liste_entite **pl) | ||
11 | +{ | ||
12 | + struct liste_entite *ml=*pl; | ||
13 | + if (ml==NULL) | ||
14 | + { | ||
15 | + ajout_tete(pl,creer_entite(joueur.posx+18,joueur.posy-5,0)); | ||
16 | + } | ||
17 | +} | ||
18 | + | ||
19 | + | ||
20 | +void DeplacementTire(int tire, int explo, struct liste_entite **l) | ||
21 | +{ | ||
22 | + struct liste_entite *ml = *l; | ||
23 | + while (ml != NULL) | ||
24 | + { | ||
25 | + if (ml->enti.posy <= 0) | ||
26 | + { | ||
27 | + *l = NULL; | ||
28 | + afficherLutin(explo, ml->enti.posx-20, ml->enti.posy); | ||
29 | + break; | ||
30 | + } | ||
31 | + else | ||
32 | + { | ||
33 | + ml->enti.posy -= 5; | ||
34 | + afficherLutin(tire, ml->enti.posx, ml->enti.posy); | ||
35 | + ml = ml->suivant; | ||
36 | + } | ||
37 | + } | ||
38 | +} | ||
39 | + | ||
40 | + | ||
41 | +char touche() | ||
42 | +{ | ||
43 | + char touche; | ||
44 | + evenement even; | ||
45 | + lireEvenement (&even,&touche,NULL); | ||
46 | + return touche; | ||
47 | +} | ||
48 | + | ||
49 | +void action(struct entite *joueur,char c,struct liste_entite **tires) | ||
50 | +{ | ||
51 | + if(c=='d') | ||
52 | + { | ||
53 | + if (joueur->posx<=9*TailleX/10) {joueur->posx+=3;} | ||
54 | + } | ||
55 | + if(c=='q') | ||
56 | + { | ||
57 | + if (joueur->posx>=TailleX/10) {joueur->posx-=3;} | ||
58 | + } | ||
59 | + if(c=='t'){Tirer(*joueur,tires);} | ||
60 | +} |
Main/Makefile
@@ -11,15 +11,18 @@ Liste.o : ../ListeC/Liste.c ../ListeC/Liste.h | @@ -11,15 +11,18 @@ Liste.o : ../ListeC/Liste.c ../ListeC/Liste.h | ||
11 | Monstre.o : ../Monstre/Monstre.c ../Monstre/Monstre.h ../ListeC/Liste.h | 11 | Monstre.o : ../Monstre/Monstre.c ../Monstre/Monstre.h ../ListeC/Liste.h |
12 | clang $(CFLAGS) -c ../Monstre/Monstre.c | 12 | clang $(CFLAGS) -c ../Monstre/Monstre.c |
13 | 13 | ||
14 | -Missile.o : ../Missile/Missile.c ../Missile/Missile.h ../ListeC/Liste.h | ||
15 | - clang $(CFLAGS) -c ../Missile/Missile.c | 14 | +Interactif.o : ../Interactif/Interactif.c ../Interactif/Interactif.h ../ListeC/Liste.h |
15 | + clang $(CFLAGS) -c ../Interactif/Interactif.c | ||
16 | 16 | ||
17 | +init.o : init.c init.h ../ListeC/Liste.h | ||
18 | + clang $(CFLAGS) -c init.c | ||
19 | + | ||
17 | main.o : main.c ../ListeC/Liste.h | 20 | main.o : main.c ../ListeC/Liste.h |
18 | clang $(CFLAGS) -c main.c | 21 | clang $(CFLAGS) -c main.c |
19 | 22 | ||
20 | 23 | ||
21 | -$(TARGET): Liste.o main.o Monstre.o Missile.o | ||
22 | - clang main.o Liste.o Monstre.o Missile.o -o $(TARGET) $(LDFLAGS) | 24 | +$(TARGET): Liste.o main.o Monstre.o Interactif.o init.o |
25 | + clang main.o Liste.o Monstre.o Interactif.o init.o -o $(TARGET) $(LDFLAGS) | ||
23 | 26 | ||
24 | .PHONY: clean | 27 | .PHONY: clean |
25 | clean: | 28 | clean: |
@@ -0,0 +1,52 @@ | @@ -0,0 +1,52 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include "../Graphique/libgraph.h" | ||
4 | +#include "../ListeC/Liste.h" | ||
5 | +#include "init.h" | ||
6 | + | ||
7 | +#define TailleX 500 | ||
8 | +#define TailleY 500 | ||
9 | + | ||
10 | +int canon; | ||
11 | +int missile; | ||
12 | +int sbire; | ||
13 | +int bouillie; | ||
14 | + | ||
15 | +struct liste_entite *enemies = NULL; | ||
16 | +struct liste_entite *tires = NULL; | ||
17 | +struct entite joueur; | ||
18 | + | ||
19 | +char Nom[20]="Space_Invader"; | ||
20 | +char input='\0'; | ||
21 | + | ||
22 | +int hitboxcanonL; | ||
23 | +int hitboxcanonH; | ||
24 | +int hitboxmissileL; | ||
25 | +int hitboxmissileH; | ||
26 | +int hitboxsbireL; | ||
27 | +int hitboxsbireH; | ||
28 | + | ||
29 | +void initialiser() | ||
30 | +{ | ||
31 | + canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); | ||
32 | + missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); | ||
33 | + sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); | ||
34 | + bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR); | ||
35 | + | ||
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); | ||
45 | + | ||
46 | +#define JoueurX TailleX/2-hitboxcanonL/2 | ||
47 | +#define JoueurY 9*TailleY/10 | ||
48 | + | ||
49 | + joueur.posx = JoueurX; | ||
50 | + joueur.posy = JoueurY ; | ||
51 | +} | ||
52 | + |
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | + | ||
4 | +extern int canon; | ||
5 | +extern int missile; | ||
6 | +extern int sbire; | ||
7 | +extern int bouillie; | ||
8 | +extern struct liste_entite *enemies; | ||
9 | +extern struct liste_entite *tires; | ||
10 | +extern struct entite joueur; | ||
11 | +extern char Nom[20]; | ||
12 | +extern char input; | ||
13 | +extern int hitboxcanonL; | ||
14 | +extern int hitboxcanonH; | ||
15 | +extern int hitboxmissileL; | ||
16 | +extern int hitboxmissileH; | ||
17 | +extern int hitboxsbireL; | ||
18 | +extern int hitboxsbireH; | ||
19 | + | ||
20 | +void initialiser(); | ||
21 | + |
Main/main.c
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | +#include <stdlib.h> | ||
2 | #include <unistd.h> | 3 | #include <unistd.h> |
3 | #include <SDL/SDL.h> | 4 | #include <SDL/SDL.h> |
4 | #include "../Graphique/libgraph.h" | 5 | #include "../Graphique/libgraph.h" |
5 | #include "../ListeC/Liste.h" | 6 | #include "../ListeC/Liste.h" |
6 | #include "../Monstre/Monstre.h" | 7 | #include "../Monstre/Monstre.h" |
7 | -#include "../Missile/Missile.h" | 8 | +#include "../Interactif/Interactif.h" |
9 | +#include "init.h" | ||
8 | 10 | ||
9 | #define TailleX 500 | 11 | #define TailleX 500 |
10 | #define TailleY 500 | 12 | #define TailleY 500 |
11 | -//clang Try.c -I Graphique -l graph -L Graphique -l SDL -l SDL_ttf | 13 | +#define Sol 475 |
12 | 14 | ||
13 | - | ||
14 | -char touche() | 15 | +int CheckCollision(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2) |
15 | { | 16 | { |
16 | - char touche; | ||
17 | - evenement even; | ||
18 | - lireEvenement (&even,&touche,NULL); | ||
19 | - return touche; | 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; | ||
20 | } | 49 | } |
21 | 50 | ||
22 | -void action(struct entite *joueur,char c,struct liste_entite **tires) | 51 | +int main() |
23 | { | 52 | { |
24 | - if(c=='d'){joueur->posx+=3;} | ||
25 | - if(c=='q'){joueur->posx-=3;} | ||
26 | - if(c=='t'){Tirer(*joueur,tires);} | ||
27 | -} | 53 | + creerSurface(TailleX,TailleY,Nom); |
28 | 54 | ||
55 | + initialiser(); | ||
29 | 56 | ||
30 | -int main() | ||
31 | -{ | ||
32 | - struct liste_entite *enemies = NULL; | ||
33 | - creer_liste(enemies); | ||
34 | - ajout_tete(&enemies,creer_entite(50,50,0)); | ||
35 | - ajout_tete(&enemies,creer_entite(150,50,0)); | ||
36 | - ajout_tete(&enemies,creer_entite(250,50,0)); | ||
37 | - imprimer_liste(enemies); | ||
38 | - int sens=1; | ||
39 | - int *psens=&sens; | 57 | + char texte[15]="SCORE : "; |
58 | + int Score = lutinTexte(texte,COULEUR_ROUGE); | ||
40 | 59 | ||
41 | - struct entite joueur; | ||
42 | - joueur.posx=225; | ||
43 | - joueur.posy=470; | ||
44 | - int canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); | ||
45 | - | ||
46 | - struct liste_entite *tires = NULL; | 60 | + creer_liste(enemies); |
47 | creer_liste(tires); | 61 | creer_liste(tires); |
48 | - //Tirer(joueur,&tires); | ||
49 | - //imprimer_liste(tires); | ||
50 | - int missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); | ||
51 | 62 | ||
52 | - char Nom[20]="PremiereFenetre"; | ||
53 | - creerSurface(TailleX,TailleY,Nom); | ||
54 | - int lulu = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); | 63 | + Ligne_Monstre(&enemies,5); |
64 | + int SensVague=1; | ||
65 | + int *psens=&SensVague; | ||
66 | + | ||
67 | + printf("%d",hitboxcanonL); | ||
68 | + printf("%d",hitboxsbireL); | ||
69 | + printf("%d",hitboxmissileL); | ||
55 | 70 | ||
56 | - while(1) | 71 | + while(input!='m') |
57 | { | 72 | { |
73 | + rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); | ||
74 | + rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); | ||
75 | + | ||
58 | afficherLutin(canon,joueur.posx,joueur.posy); | 76 | afficherLutin(canon,joueur.posx,joueur.posy); |
59 | - DeplacementLutin(lulu,enemies,psens,1); | 77 | + DeplacementLutin(sbire,enemies,psens,1); |
78 | + | ||
79 | + | ||
80 | + input = touche(); | ||
81 | + action(&joueur,input,&tires); | ||
82 | + | ||
83 | + DeplacementTire(missile,bouillie,&tires); | ||
60 | 84 | ||
61 | - char c = touche(); | ||
62 | - action(&joueur,c,&tires); | 85 | + /* Test |
86 | + struct entite missile1 = &tires->enti; | ||
87 | + | ||
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); | ||
63 | 98 | ||
64 | - DeplacementTire(missile,tires); | ||
65 | - | ||
66 | majSurface(); | 99 | majSurface(); |
67 | - rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); | 100 | + |
68 | SDL_Delay(20); | 101 | SDL_Delay(20); |
69 | } | 102 | } |
70 | return 0; | 103 | return 0; |
Monstre/Monstre.c
@@ -4,6 +4,9 @@ | @@ -4,6 +4,9 @@ | ||
4 | #include "../ListeC/Liste.h" | 4 | #include "../ListeC/Liste.h" |
5 | #include "Monstre.h" | 5 | #include "Monstre.h" |
6 | 6 | ||
7 | +#define TailleX 500 | ||
8 | +#define TailleY 500 | ||
9 | + | ||
7 | //sens 1 = Va vers la droite | 10 | //sens 1 = Va vers la droite |
8 | void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | 11 | void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) |
9 | { | 12 | { |
@@ -14,13 +17,13 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | @@ -14,13 +17,13 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | ||
14 | if (*psens==1) | 17 | if (*psens==1) |
15 | { | 18 | { |
16 | ml->enti.posx+=speed; | 19 | ml->enti.posx+=speed; |
17 | - if(ml->enti.posx>=450)ind=1; | 20 | + if(ml->enti.posx>=9*TailleX/10)ind=1; |
18 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | 21 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); |
19 | } | 22 | } |
20 | else | 23 | else |
21 | { | 24 | { |
22 | ml->enti.posx-=speed; | 25 | ml->enti.posx-=speed; |
23 | - if(ml->enti.posx<=50)ind=2; | 26 | + if(ml->enti.posx<=TailleX/10)ind=2; |
24 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); | 27 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); |
25 | } | 28 | } |
26 | ml=ml->suivant; | 29 | ml=ml->suivant; |
@@ -47,3 +50,14 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | @@ -47,3 +50,14 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) | ||
47 | } | 50 | } |
48 | } | 51 | } |
49 | 52 | ||
53 | + | ||
54 | +void Ligne_Monstre(struct liste_entite **enemies,int nbr_enemies) | ||
55 | +{ | ||
56 | + int compteurY=TailleY/10; | ||
57 | + int compteurX=TailleX/nbr_enemies; | ||
58 | + for (int i=1; i<=nbr_enemies; i++) | ||
59 | + { | ||
60 | + ajout_tete(enemies,creer_entite(compteurX,compteurY,0)); | ||
61 | + compteurX +=2*TailleX/(3*nbr_enemies); | ||
62 | + } | ||
63 | +} |
Monstre/Monstre.h