diff --git a/Collision/Collision.c b/Collision/Collision.c new file mode 100644 index 0000000..ea8ee04 --- /dev/null +++ b/Collision/Collision.c @@ -0,0 +1,40 @@ +#include +#include +#include "../Main/init.h" +#include "../ListeC/Liste.h" + +int CheckCollision(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2) +{ + //CheckX + int gauche1 = enti1.posx-L1; + int droite1 = enti1.posx+L1; + int gauche2 = enti2.posx-L2; + int droite2 = enti2.posx+L2; + int CheckX=0; + if(gauche1 >= gauche2 && gauche1 <= droite2) + { + CheckX=1; + } + else if(droite1 >= gauche2 && droite1 <= droite2) + { + CheckX=1; + } + + //CheckY + int haut1 = enti1.posy-H1; + int bas1 = enti1.posy+H1; + int haut2 = enti2.posy-H2; + int bas2 = enti2.posy+H2; + int CheckY=0; + if(haut1 >= bas2 && haut1 <= haut2) + { + CheckY=1; + } + else if(bas1 >= bas2 && bas1 <= haut2) + { + CheckY=1; + } + + if(CheckX+CheckY==2){return 1;} + return 0; +} diff --git a/Collision/Collision.h b/Collision/Collision.h new file mode 100644 index 0000000..1a5fece --- /dev/null +++ b/Collision/Collision.h @@ -0,0 +1,4 @@ +#include +#include + +void CheckCollision(); diff --git a/Interactif/Interactif.c b/Interactif/Interactif.c new file mode 100644 index 0000000..260f35c --- /dev/null +++ b/Interactif/Interactif.c @@ -0,0 +1,60 @@ +#include +#include +#include "../Graphique/libgraph.h" +#include "../ListeC/Liste.h" +#include "Interactif.h" + +#define TailleX 500 +#define TailleY 500 + +void Tirer(struct entite joueur, struct liste_entite **pl) +{ + struct liste_entite *ml=*pl; + if (ml==NULL) + { + ajout_tete(pl,creer_entite(joueur.posx+18,joueur.posy-5,0)); + } +} + + +void DeplacementTire(int tire, int explo, struct liste_entite **l) +{ + struct liste_entite *ml = *l; + while (ml != NULL) + { + if (ml->enti.posy <= 0) + { + *l = NULL; + afficherLutin(explo, ml->enti.posx-20, ml->enti.posy); + break; + } + else + { + ml->enti.posy -= 5; + afficherLutin(tire, ml->enti.posx, ml->enti.posy); + ml = ml->suivant; + } + } +} + + +char touche() +{ + char touche; + evenement even; + lireEvenement (&even,&touche,NULL); + return touche; +} + +void action(struct entite *joueur,char c,struct liste_entite **tires) +{ + if(c=='d') + { + if (joueur->posx<=9*TailleX/10) {joueur->posx+=3;} + } + if(c=='q') + { + if (joueur->posx>=TailleX/10) {joueur->posx-=3;} + } + if(c=='t'){Tirer(*joueur,tires);} +} diff --git a/Interactif/Interactif.h b/Interactif/Interactif.h new file mode 100644 index 0000000..0e25130 --- /dev/null +++ b/Interactif/Interactif.h @@ -0,0 +1,10 @@ +#include +#include + +void Tirer(struct entite, struct liste_entite**); + +void DeplacementTire(int,int,struct liste_entite**); + +char touche(); + +void action(struct entite*,char,struct liste_entite**); diff --git a/Main/Makefile b/Main/Makefile index 3e94592..90c2099 100644 --- a/Main/Makefile +++ b/Main/Makefile @@ -11,15 +11,18 @@ Liste.o : ../ListeC/Liste.c ../ListeC/Liste.h Monstre.o : ../Monstre/Monstre.c ../Monstre/Monstre.h ../ListeC/Liste.h clang $(CFLAGS) -c ../Monstre/Monstre.c -Missile.o : ../Missile/Missile.c ../Missile/Missile.h ../ListeC/Liste.h - clang $(CFLAGS) -c ../Missile/Missile.c +Interactif.o : ../Interactif/Interactif.c ../Interactif/Interactif.h ../ListeC/Liste.h + clang $(CFLAGS) -c ../Interactif/Interactif.c +init.o : init.c init.h ../ListeC/Liste.h + clang $(CFLAGS) -c init.c + main.o : main.c ../ListeC/Liste.h clang $(CFLAGS) -c main.c -$(TARGET): Liste.o main.o Monstre.o Missile.o - clang main.o Liste.o Monstre.o Missile.o -o $(TARGET) $(LDFLAGS) +$(TARGET): Liste.o main.o Monstre.o Interactif.o init.o + clang main.o Liste.o Monstre.o Interactif.o init.o -o $(TARGET) $(LDFLAGS) .PHONY: clean clean: diff --git a/Main/init.c b/Main/init.c new file mode 100644 index 0000000..7ca21bf --- /dev/null +++ b/Main/init.c @@ -0,0 +1,52 @@ +#include +#include +#include "../Graphique/libgraph.h" +#include "../ListeC/Liste.h" +#include "init.h" + +#define TailleX 500 +#define TailleY 500 + +int canon; +int missile; +int sbire; +int bouillie; + +struct liste_entite *enemies = NULL; +struct liste_entite *tires = NULL; +struct entite joueur; + +char Nom[20]="Space_Invader"; +char input='\0'; + +int hitboxcanonL; +int hitboxcanonH; +int hitboxmissileL; +int hitboxmissileH; +int hitboxsbireL; +int hitboxsbireH; + +void initialiser() +{ + canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); + missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); + sbire = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); + bouillie = chargerLutin("../../Lutins/invader_monstre_bouillie.bmp",COULEUR_NOIR); + + int* hitboxL=&hitboxcanonL; + int* hitboxH=&hitboxcanonH; + tailleLutin(canon,hitboxL,hitboxH); + hitboxL=&hitboxmissileL; + hitboxH=&hitboxmissileH; + tailleLutin(canon,hitboxL,hitboxH); + hitboxL=&hitboxsbireL; + hitboxH=&hitboxsbireH; + tailleLutin(sbire,hitboxL,hitboxH); + +#define JoueurX TailleX/2-hitboxcanonL/2 +#define JoueurY 9*TailleY/10 + + joueur.posx = JoueurX; + joueur.posy = JoueurY ; +} + diff --git a/Main/init.h b/Main/init.h new file mode 100644 index 0000000..40df281 --- /dev/null +++ b/Main/init.h @@ -0,0 +1,21 @@ +#include +#include + +extern int canon; +extern int missile; +extern int sbire; +extern int bouillie; +extern struct liste_entite *enemies; +extern struct liste_entite *tires; +extern struct entite joueur; +extern char Nom[20]; +extern char input; +extern int hitboxcanonL; +extern int hitboxcanonH; +extern int hitboxmissileL; +extern int hitboxmissileH; +extern int hitboxsbireL; +extern int hitboxsbireH; + +void initialiser(); + diff --git a/Main/main.c b/Main/main.c index ed93b92..65a562a 100644 --- a/Main/main.c +++ b/Main/main.c @@ -1,70 +1,103 @@ #include +#include #include #include #include "../Graphique/libgraph.h" #include "../ListeC/Liste.h" #include "../Monstre/Monstre.h" -#include "../Missile/Missile.h" +#include "../Interactif/Interactif.h" +#include "init.h" #define TailleX 500 #define TailleY 500 -//clang Try.c -I Graphique -l graph -L Graphique -l SDL -l SDL_ttf +#define Sol 475 - -char touche() +int CheckCollision(struct entite enti1,int L1,int H1,struct entite enti2 ,int L2, int H2) { - char touche; - evenement even; - lireEvenement (&even,&touche,NULL); - return touche; + //CheckX + int gauche1 = enti1.posx-L1; + int droite1 = enti1.posx+L1; + int gauche2 = enti2.posx-L2; + int droite2 = enti2.posx+L2; + int CheckX=0; + if(gauche1 >= gauche2 && gauche1 <= droite2) + { + CheckX=1; + } + else if(droite1 >= gauche2 && droite1 <= droite2) + { + CheckX=1; + } + + //CheckY + int haut1 = enti1.posy-H1; + int bas1 = enti1.posy+H1; + int haut2 = enti2.posy-H2; + int bas2 = enti2.posy+H2; + int CheckY=0; + if(haut1 >= bas2 && haut1 <= haut2) + { + CheckY=1; + } + else if(bas1 >= bas2 && bas1 <= haut2) + { + CheckY=1; + } + + if(CheckX+CheckY==2){return 1;} + return 0; } -void action(struct entite *joueur,char c,struct liste_entite **tires) +int main() { - if(c=='d'){joueur->posx+=3;} - if(c=='q'){joueur->posx-=3;} - if(c=='t'){Tirer(*joueur,tires);} -} + creerSurface(TailleX,TailleY,Nom); + initialiser(); -int main() -{ - struct liste_entite *enemies = NULL; - creer_liste(enemies); - ajout_tete(&enemies,creer_entite(50,50,0)); - ajout_tete(&enemies,creer_entite(150,50,0)); - ajout_tete(&enemies,creer_entite(250,50,0)); - imprimer_liste(enemies); - int sens=1; - int *psens=&sens; + char texte[15]="SCORE : "; + int Score = lutinTexte(texte,COULEUR_ROUGE); - struct entite joueur; - joueur.posx=225; - joueur.posy=470; - int canon = chargerLutin("../../Lutins/invader_canon.bmp",COULEUR_NOIR); - - struct liste_entite *tires = NULL; + creer_liste(enemies); creer_liste(tires); - //Tirer(joueur,&tires); - //imprimer_liste(tires); - int missile = chargerLutin("../../Lutins/invader_missile.bmp",COULEUR_NOIR); - char Nom[20]="PremiereFenetre"; - creerSurface(TailleX,TailleY,Nom); - int lulu = chargerLutin("../../Lutins/invader_monstre1_1.bmp",COULEUR_NOIR); + Ligne_Monstre(&enemies,5); + int SensVague=1; + int *psens=&SensVague; + + printf("%d",hitboxcanonL); + printf("%d",hitboxsbireL); + printf("%d",hitboxmissileL); - while(1) + while(input!='m') { + rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); + rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT); + afficherLutin(canon,joueur.posx,joueur.posy); - DeplacementLutin(lulu,enemies,psens,1); + DeplacementLutin(sbire,enemies,psens,1); + + + input = touche(); + action(&joueur,input,&tires); + + DeplacementTire(missile,bouillie,&tires); - char c = touche(); - action(&joueur,c,&tires); + /* Test + struct entite missile1 = &tires->enti; + + struct liste_entite *p; + p = enemies; + while (p != NULL) + { + int ok = CheckCollision(missile1,hitboxmissileL,hitboxmissileH,p->enti,hitboxsbireL,hitboxsbireH); + printf("%d \n",ok); + p=p->suivant; + } + */ + afficherLutin(Score,0,Sol); - DeplacementTire(missile,tires); - majSurface(); - rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR); + SDL_Delay(20); } return 0; diff --git a/Monstre/Monstre.c b/Monstre/Monstre.c index 689d6a0..b87d6cf 100644 --- a/Monstre/Monstre.c +++ b/Monstre/Monstre.c @@ -4,6 +4,9 @@ #include "../ListeC/Liste.h" #include "Monstre.h" +#define TailleX 500 +#define TailleY 500 + //sens 1 = Va vers la droite 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) if (*psens==1) { ml->enti.posx+=speed; - if(ml->enti.posx>=450)ind=1; + if(ml->enti.posx>=9*TailleX/10)ind=1; afficherLutin(lutin,ml->enti.posx,ml->enti.posy); } else { ml->enti.posx-=speed; - if(ml->enti.posx<=50)ind=2; + if(ml->enti.posx<=TailleX/10)ind=2; afficherLutin(lutin,ml->enti.posx,ml->enti.posy); } ml=ml->suivant; @@ -47,3 +50,14 @@ void DeplacementLutin(int lutin,struct liste_entite *l, int *psens, int speed) } } + +void Ligne_Monstre(struct liste_entite **enemies,int nbr_enemies) +{ + int compteurY=TailleY/10; + int compteurX=TailleX/nbr_enemies; + for (int i=1; i<=nbr_enemies; i++) + { + ajout_tete(enemies,creer_entite(compteurX,compteurY,0)); + compteurX +=2*TailleX/(3*nbr_enemies); + } +} diff --git a/Monstre/Monstre.h b/Monstre/Monstre.h index 231eafa..5dd58ff 100644 --- a/Monstre/Monstre.h +++ b/Monstre/Monstre.h @@ -2,3 +2,5 @@ #include void DeplacementLutin(int,struct liste_entite*,int*,int); + +void Ligne_Monstre(struct liste_entite**,int); -- libgit2 0.21.2