Commit 4d73f71eb18f55dd9ab02cb1f1e895e0ae91ab98

Authored by Martin CHAUVELIERE
1 parent d132aafe

Principal du jeu terminé, beaucoup d'optimisations à venir

Interactif/Interactif.c
... ... @@ -80,7 +80,7 @@ struct liste_entite* CheckCollisionListeListe(struct liste_entite *Liste1,int L1
80 80  
81 81  
82 82  
83   -void SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, struct liste_entite** Liste2, int L2, int H2)
  83 +int SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, struct liste_entite** Liste2, int L2, int H2)
84 84 {
85 85 struct liste_entite* collision = CheckCollisionListeListe(*Liste1, L1, H1, *Liste2, L2, H2);
86 86  
... ... @@ -96,7 +96,10 @@ void SupprimerEntitesEnCollision(struct liste_entite** Liste1, int L1, int H1, s
96 96 SupprimerEntite(Liste2, enti2);
97 97  
98 98 afficherLutin(bouillie, enti2->posx - hitboxbouillieL/2 + ErreurHitbox, enti2->posy - hitboxbouillieH/2 + ErreurHitbox);
  99 +
  100 + return 1;
99 101 }
  102 + return 0;
100 103 }
101 104  
102 105  
... ... @@ -208,7 +211,7 @@ void DeplacementBombe(int bombe, struct liste_entite** l)
208 211  
209 212 while (ml != NULL)
210 213 {
211   - if (ml->enti.posy + hitboxbombeH - ErreurHitbox >= Sol)
  214 + if (ml->enti.posy + hitboxbombeH/2 - ErreurHitbox >= Sol)
212 215 {
213 216 struct entite* a_supprimer = &ml->enti;
214 217 ml = ml->suivant;
... ... @@ -217,7 +220,7 @@ void DeplacementBombe(int bombe, struct liste_entite** l)
217 220 else
218 221 {
219 222 ml->enti.posy += 2;
220   - afficherLutin(bombe, ml->enti.posx - hitboxbombeL/2 + ErreurHitbox, ml->enti.posy);
  223 + afficherLutin(bombe, ml->enti.posx - hitboxbombeL/2 + ErreurHitbox, ml->enti.posy - hitboxbombeH/2 + ErreurHitbox);
221 224 precedent = ml;
222 225 ml = ml->suivant;
223 226 }
... ...
Interactif/Interactif.h
... ... @@ -12,7 +12,7 @@ void Tirer(struct entite, struct liste_entite**);
12 12  
13 13 void DeplacementTire(int,struct liste_entite**);
14 14  
15   -void SupprimerEntitesEnCollision(struct liste_entite**,int,int,struct liste_entite**,int,int);
  15 +int SupprimerEntitesEnCollision(struct liste_entite**,int,int,struct liste_entite**,int,int);
16 16  
17 17 char touche();
18 18  
... ...
Main/init.c
... ... @@ -7,11 +7,12 @@
7 7  
8 8 #define TailleX 500
9 9 #define TailleY 500
  10 +#define Sol 475
10 11 #define ErreurHitbox 2
11 12 #define JoueurX TailleX/2
12 13 #define JoueurY 9*TailleY/10
13 14  
14   -struct entite joueur = {JoueurX,JoueurY,-1};
  15 +struct entite joueur;
15 16  
16 17 int canon=0;
17 18 int missile=0;
... ... @@ -19,8 +20,6 @@ int sbire=0;
19 20 int bouillie=0;
20 21 int bombe=0;
21 22  
22   -
23   -
24 23 char Nom[15]="Space Invader";
25 24 char input='\0';
26 25  
... ... @@ -53,6 +52,14 @@ void initialiser()
53 52  
54 53 }
55 54  
  55 +void initialiserjoueur(struct entite* joueur)
  56 +{
  57 + joueur->posx = JoueurX;
  58 + joueur->posy = JoueurY;
  59 + joueur->dropbombe = -1;
  60 +}
  61 +
  62 +
56 63  
57 64 char pagedemarrage()
58 65 {
... ... @@ -86,3 +93,46 @@ char pagedemarrage()
86 93 }
87 94 return input;
88 95 }
  96 +
  97 +
  98 +void pagemort(int vie)
  99 +{
  100 + static const char policeDefaut[]="/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf";
  101 + int Largeur, Hauteur;
  102 +
  103 + rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR);
  104 + char mort[16]="Vous etes mort";
  105 + char nbr_vie[30];
  106 + sprintf(nbr_vie, "Nombre de vie restante : %d", vie);
  107 +
  108 +
  109 + choisirPolice(policeDefaut,40);
  110 +
  111 + int M = lutinTexte(mort,COULEUR_ROUGE);
  112 + tailleLutin(M,&Largeur,&Hauteur);
  113 + afficherLutin(M,TailleX/2-Largeur/2,TailleY/4+Hauteur/2);
  114 +
  115 + choisirPolice(policeDefaut,20);
  116 +
  117 + int V = lutinTexte(nbr_vie,COULEUR_BLANC);
  118 + tailleLutin(V,&Largeur,&Hauteur);
  119 + afficherLutin(V,TailleX/2-Largeur/2,TailleY/2-Hauteur/2);
  120 +}
  121 +
  122 +
  123 +void pageGameOver()
  124 +{
  125 + static const char policeDefaut[]="/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf";
  126 + int Largeur, Hauteur;
  127 +
  128 + rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR);
  129 + char fin[11]="GAME OVER";
  130 +
  131 + choisirPolice(policeDefaut,40);
  132 +
  133 + int F = lutinTexte(fin,COULEUR_ROUGE);
  134 + tailleLutin(F,&Largeur,&Hauteur);
  135 + afficherLutin(F,TailleX/2-Largeur/2,TailleY/2);
  136 +
  137 +}
  138 +
... ...
Main/init.h
... ... @@ -23,4 +23,7 @@ extern int hitboxbombeL;
23 23 extern int hitboxbombeH;
24 24  
25 25 void initialiser();
  26 +void initialiserjoueur(struct entite*);
26 27 char pagedemarrage();
  28 +void pagemort(int);
  29 +void pageGameOver();
... ...
Main/main.c
... ... @@ -18,14 +18,14 @@ int main()
18 18 creerSurface(TailleX,TailleY,Nom);
19 19  
20 20 initialiser();
21   -
22   -
  21 + initialiserjoueur(&joueur);
  22 +
23 23 struct liste_entite *enemies = NULL;
24 24 struct liste_entite *tires = NULL;
25 25 struct liste_entite *bombes = NULL;
26   -
27   - char texte[15]="SCORE : ";
28   - int Score = lutinTexte(texte,COULEUR_BLANC);
  26 + //joueur est dans une liste pour que je puisse utiliser des fonctions deja créé
  27 + struct liste_entite* Ljoueur = NULL;
  28 + ajout_tete(&Ljoueur,joueur);
29 29  
30 30  
31 31 LigneSbire(&enemies,8,3);
... ... @@ -34,22 +34,46 @@ int main()
34 34 int compteur=0;
35 35 int DropAlea=0;
36 36 int CheckAlea=0;
37   -
  37 + int mort = 0;
  38 + int nbr_vie = 3;
  39 +
38 40 if (pagedemarrage() != 'j')
39 41 {
40 42 return 0;
41 43 }
42 44  
43   -
44 45 //Bouble principale
45 46 while(input!='m')
46 47 {
  48 + if (mort == 1)
  49 + {
  50 + nbr_vie-=1;
  51 + if (nbr_vie > 0)
  52 + {
  53 + pagemort(nbr_vie);
  54 + printf("%d \n",joueur.posx);
  55 + majSurface();
  56 + SDL_Delay(2000);
  57 + mort = 0;
  58 + }
  59 + else
  60 + {
  61 + pageGameOver();
  62 + majSurface();
  63 + SDL_Delay(2000);
  64 + return 0;
  65 + }
  66 + ajout_tete(&Ljoueur,joueur);
  67 + tires = NULL;
  68 + bombes = NULL;
  69 + }
  70 +
47 71 rectanglePlein(0,0,TailleX,TailleY,COULEUR_NOIR);
48 72 rectanglePlein(0,Sol,TailleX,2,COULEUR_VERT);
49   - afficherLutin(Score,0,Sol+ErreurHitbox);
50   -
51   - afficherLutin(canon,joueur.posx - hitboxcanonL/2 + ErreurHitbox,joueur.posy);
52 73  
  74 + afficherLutin(canon,Ljoueur->enti.posx - hitboxcanonL/2 + ErreurHitbox,Ljoueur->enti.posy);
  75 + AfficherSbire(sbire,hitboxsbireL,hitboxsbireH,enemies);
  76 +
53 77 if (DropAlea == 0)
54 78 {
55 79 DropAlea = rand() % 31 + 100;
... ... @@ -61,10 +85,8 @@ int main()
61 85 CheckAlea=0;
62 86 }
63 87  
64   - AfficherSbire(sbire,hitboxsbireL,hitboxsbireH,enemies);
65   -
66 88 input = touche();
67   - action(&joueur,input,&tires);
  89 + action(&Ljoueur->enti,input,&tires);
68 90  
69 91 if (compteur==10)
70 92 {
... ... @@ -73,13 +95,17 @@ int main()
73 95 }
74 96  
75 97 DeplacementTire(missile,&tires);
76   -
77 98 DeplacementBombe(bombe,&bombes);
78 99  
79 100 SupprimerEntitesEnCollision(&tires,hitboxmissileL,hitboxmissileH,&enemies,hitboxsbireL,hitboxsbireH);
  101 + if (SupprimerEntitesEnCollision(&bombes,hitboxbombeL,hitboxbombeH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1)
  102 + {
  103 + mort = 1;
  104 + majSurface();
  105 + SDL_Delay(200);
  106 + }
80 107  
81 108 majSurface();
82   -
83 109 SDL_Delay(20);
84 110  
85 111 compteur+=1;
... ...