Commit 590ac30b4c9c25467e3b340ba0493ca2756de189
1 parent
65adbf2e
Debut Collision
Showing
10 changed files
with
287 additions
and
48 deletions
Show diff stats
... | ... | @@ -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 @@ |
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 | 11 | Monstre.o : ../Monstre/Monstre.c ../Monstre/Monstre.h ../ListeC/Liste.h |
12 | 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 | 20 | main.o : main.c ../ListeC/Liste.h |
18 | 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 | 27 | .PHONY: clean |
25 | 28 | clean: | ... | ... |
... | ... | @@ -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 @@ |
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 | 1 | #include <stdio.h> |
2 | +#include <stdlib.h> | |
2 | 3 | #include <unistd.h> |
3 | 4 | #include <SDL/SDL.h> |
4 | 5 | #include "../Graphique/libgraph.h" |
5 | 6 | #include "../ListeC/Liste.h" |
6 | 7 | #include "../Monstre/Monstre.h" |
7 | -#include "../Missile/Missile.h" | |
8 | +#include "../Interactif/Interactif.h" | |
9 | +#include "init.h" | |
8 | 10 | |
9 | 11 | #define TailleX 500 |
10 | 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 | 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 | 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 | 99 | majSurface(); |
67 | - rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); | |
100 | + | |
68 | 101 | SDL_Delay(20); |
69 | 102 | } |
70 | 103 | return 0; | ... | ... |
Monstre/Monstre.c
... | ... | @@ -4,6 +4,9 @@ |
4 | 4 | #include "../ListeC/Liste.h" |
5 | 5 | #include "Monstre.h" |
6 | 6 | |
7 | +#define TailleX 500 | |
8 | +#define TailleY 500 | |
9 | + | |
7 | 10 | //sens 1 = Va vers la droite |
8 | 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 | 17 | if (*psens==1) |
15 | 18 | { |
16 | 19 | ml->enti.posx+=speed; |
17 | - if(ml->enti.posx>=450)ind=1; | |
20 | + if(ml->enti.posx>=9*TailleX/10)ind=1; | |
18 | 21 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); |
19 | 22 | } |
20 | 23 | else |
21 | 24 | { |
22 | 25 | ml->enti.posx-=speed; |
23 | - if(ml->enti.posx<=50)ind=2; | |
26 | + if(ml->enti.posx<=TailleX/10)ind=2; | |
24 | 27 | afficherLutin(lutin,ml->enti.posx,ml->enti.posy); |
25 | 28 | } |
26 | 29 | ml=ml->suivant; |
... | ... | @@ -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