Commit 590ac30b4c9c25467e3b340ba0493ca2756de189

Authored by Martin CHAUVELIERE
1 parent 65adbf2e

Debut Collision

Collision/Collision.c 0 โ†’ 100644
@@ -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 +}
Collision/Collision.h 0 โ†’ 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +
  4 +void CheckCollision();
Interactif/Interactif.c 0 โ†’ 100644
@@ -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 +}
Interactif/Interactif.h 0 โ†’ 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +
  4 +void Tirer(struct entite, struct liste_entite**);
  5 +
  6 +void DeplacementTire(int,int,struct liste_entite**);
  7 +
  8 +char touche();
  9 +
  10 +void action(struct entite*,char,struct liste_entite**);
@@ -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:
Main/init.c 0 โ†’ 100644
@@ -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 +
Main/init.h 0 โ†’ 100644
@@ -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 +
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;
@@ -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 +}
@@ -2,3 +2,5 @@ @@ -2,3 +2,5 @@
2 #include <stdlib.h> 2 #include <stdlib.h>
3 3
4 void DeplacementLutin(int,struct liste_entite*,int*,int); 4 void DeplacementLutin(int,struct liste_entite*,int*,int);
  5 +
  6 +void Ligne_Monstre(struct liste_entite**,int);