Blame view

Space Invader/Envahisseurs/Graphique/src/Main/main.c 7.66 KB
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
1
2
3
4
5
6
7
8
  #include <unistd.h>
  #include <SDL/SDL.h>
  #include "../Graphique/libgraph.h"
  #include "../ListeC/Liste.h"
  #include "../Monstre/Monstre.h"
  #include "../Interactif/Interactif.h"
  #include "init.h"
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
9
10
11
12
  #define TailleX      500
  #define TailleY      500
  #define Sol          475
  #define EpaisseurSol 2
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
13
  #define ErreurHitbox 2
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
14
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
15
16
17
18
19
20
21
22
  #define Nom                  "Space Invader"
  #define NombreEnemieParLigne 8
  #define NombreLigneEnemies   3
  #define NombreVie            3
  
  #define BombeRandomFixe 50
  #define BombeRandomAlea 30
  
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
23
24
25
  //Pour augmenter les deplacements des enemies, vous pouvez:
  //Augmenter VitesseDeplacementEnemie
  //Tout les VitesseDeplacementEnemie tours de boucle les enemies se déplace
7094c494   Martin CHAUVELIERE   Améliorations fin...
26
  #define VitesseDeplacementEnemie 2
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
27
28
29
  // Ou augmenter le PasEnemie (Ecart entre la position n et n+1)
  #define PasEnemie                1
  #define AffichageImageEnemie     8
7094c494   Martin CHAUVELIERE   Améliorations fin...
30
31
32
33
  
  #define Delai0_2s 200
  #define Delai0_5s 500
  #define Delai2s   2000
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
34
35
36
  
  #define VitesseTourdeBoucle      20
  
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
37
38
39
40
41
  int main()
  {
      creerSurface(TailleX,TailleY,Nom);
  
      initialiser();
7094c494   Martin CHAUVELIERE   Améliorations fin...
42
      initialiserjoueur();
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
43
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
44
45
46
47
48
      struct liste_entite* ListeEnemies = NULL;
      struct liste_entite* ListeTires   = NULL;
      struct liste_entite* ListeBombes  = NULL;
      
      //joueur est dans une liste afin d'utiliser des fonctions deja crée
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
49
50
51
52
      struct liste_entite* Ljoueur = NULL;
      ajout_tete(&Ljoueur,joueur);
      
      
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
53
54
55
      LigneEnemie(&ListeEnemies,
                  NombreEnemieParLigne,
                  NombreLigneEnemies);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
56
57
      int SensVague=1;
      
7094c494   Martin CHAUVELIERE   Améliorations fin...
58
59
60
61
62
63
      char input        = '\0';
      int TourdeBoucle  = 0;
      int TimeAlea      = 0;
      int CheckAlea     = 0;
      int mort          = 0;
      int nbr_vie       = NombreVie;
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
64
65
      int QuelMonstre   = 0;
      evenement even    = 0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
66
67
68
      
      int coeur    = chargerLutin ("../../Lutins/Coeur.bmp",
                               COULEUR_NOIR);
7094c494   Martin CHAUVELIERE   Améliorations fin...
69
70
71
      int hitboxcoeurL = 0;
      int hitboxcoeurH = 0;
      
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
72
73
74
75
76
77
78
79
      tailleLutin (coeur,
                   &hitboxcoeurL,
                   &hitboxcoeurH);
  
      if ( pagedemarrage() != 'j')
      {
          return 0;
      }
7094c494   Martin CHAUVELIERE   Améliorations fin...
80
      SDL_Delay(Delai0_5s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
81
82
83
84
      
      //Bouble principale
      while(input!='m')
      {
7094c494   Martin CHAUVELIERE   Améliorations fin...
85
          //Si le joueur est mort
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
86
87
88
          if (mort == 1)
          {
              nbr_vie-=1;
7094c494   Martin CHAUVELIERE   Améliorations fin...
89
              //Si il lui reste des vies
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
90
91
92
93
              if (nbr_vie > 0)
              {
                  pagemort(nbr_vie);
                  majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
94
                  SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
95
96
                  mort = 0;
              }
7094c494   Martin CHAUVELIERE   Améliorations fin...
97
              //Si il n'a plus de vie
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
98
99
100
101
              else
              {
                  pageGameOver();
                  majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
102
                  SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
103
104
                  return 0;
              }
7094c494   Martin CHAUVELIERE   Améliorations fin...
105
              //On ajoute de nouveau le joueur précedement supprimé à sa liste 
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
106
              ajout_tete(&Ljoueur,joueur);
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
107
              //Desallocation dynamique des listes
7094c494   Martin CHAUVELIERE   Améliorations fin...
108
109
              DesallouerListe(&ListeTires);
              DesallouerListe(&ListeBombes);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
110
111
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
112
113
114
115
116
117
          //Affichage Rectangle Noir sur toute la page
          rectanglePlein(0,
                         0,
                         TailleX,
                         TailleY,
                         COULEUR_NOIR);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
118
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
119
120
          //Affichage des coeurs de vie
          for (int i = 1 ; i <= nbr_vie; i++)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
121
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
122
123
124
              afficherLutin(coeur,
                            TailleX - i * hitboxcoeurL,
                            Sol);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
125
          }
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
126
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
127
128
129
130
131
132
          //Affichage du Sol
          rectanglePlein(0,
                         Sol,
                         TailleX,
                         EpaisseurSol,
                         COULEUR_VERT);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
133
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
134
135
136
137
          //Affichage du joueur
          afficherLutin(canon,
                        Ljoueur->entite.posx - hitboxcanonL/2 + ErreurHitbox,
                        Ljoueur->entite.posy);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
138
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
139
          //Affichage des ListeEnemies
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
          if (QuelMonstre > 2 * AffichageImageEnemie)
          {
              QuelMonstre = 0;
          }
          if (QuelMonstre <= AffichageImageEnemie)
          {
              AfficherEnemie (ListeEnemies,
                              enemie1_1,
                              hitboxenemieL,
                              hitboxenemieH);
              QuelMonstre += 1;
          }
          else
          {
              AfficherEnemie (ListeEnemies,
                              enemie1_2,
                              hitboxenemieL,
                              hitboxenemieH);
              QuelMonstre += 1;
          }
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
160
             
7094c494   Martin CHAUVELIERE   Améliorations fin...
161
162
163
164
          //Systeme pour faire drop une bombe dans un temps aléatoire
          //Mise en place d'un timer
          //TimeAlea représente le nombre de tour de boucle à éffectuer
          if (TimeAlea == 0)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
165
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
166
167
168
              //50 tour de boucle minimum + une valeur de 0 à 31
              TimeAlea = rand() % BombeRandomAlea + BombeRandomFixe;
              //Il y a un warning car rand() à une valeur limite que l'on ne dépasse pas
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
169
          }
7094c494   Martin CHAUVELIERE   Améliorations fin...
170
171
172
173
          //CheckAlea est incrémenté de 1 à chaque tour de boucle
          //Lorsque celui ci vaut TimeAlea on peut drop une bombe
          //On reset à 0 le Timer et le Check aprés avoir Drop une bombe
          if (CheckAlea == TimeAlea)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
174
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
175
176
177
              MakeBombeDrop(ListeEnemies,
                            &ListeBombes);
              TimeAlea=0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
178
179
180
              CheckAlea=0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
181
182
183
184
185
186
187
188
189
190
191
          //Gestion des evenements clavier
          //On ne peut appuyer que sur une seule touche à la fois
          lireEvenement (&even,
                         &input,
                         NULL);
          if (even == toucheBas)
          {
              action(&Ljoueur->entite,
                     input,
                     &ListeTires);
          }
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
192
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
193
194
          //Deplacement des enemies tout les X tours de boucle
          if (TourdeBoucle == VitesseDeplacementEnemie)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
195
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
196
197
              DeplacementEnemie(ListeEnemies,
                                &SensVague,
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
198
                                PasEnemie);
7094c494   Martin CHAUVELIERE   Améliorations fin...
199
              TourdeBoucle = 0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
200
201
          } 
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
202
203
204
          //Deplacement des Tires et Bombes
          DeplacementTire(&ListeTires);
          DeplacementBombe(&ListeBombes);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
205
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
206
          //Supression si collision des Tires et Enemies
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
207
208
209
210
211
212
          SupprimerEntitesEnCollision(&ListeTires,
                                      hitboxmissileL,
                                      hitboxmissileH,
                                      &ListeEnemies,
                                      hitboxenemieL,
                                      hitboxenemieH);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
213
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
214
          //Supression si collision des Bombes et Joueur
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
215
216
217
218
219
220
          if (SupprimerEntitesEnCollision(&ListeBombes,
                                          hitboxbombeL,
                                          hitboxbombeH,
                                          &Ljoueur,
                                          hitboxcanonL,
                                          hitboxcanonH) == 1)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
221
222
223
          {
              mort = 1;
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
224
              SDL_Delay(Delai0_2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
225
          }
7094c494   Martin CHAUVELIERE   Améliorations fin...
226
227
          
          //Supression si collision des Enemies et Joueur
a93e7b17   Martin CHAUVELIERE   Reste ReadMe et M...
228
229
230
231
232
233
          if (SupprimerEntitesEnCollision(&ListeEnemies,
                                          hitboxenemieL,
                                          hitboxenemieH,
                                          &Ljoueur,
                                          hitboxcanonL,
                                          hitboxcanonH) == 1)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
234
235
236
          {
              pageGameOver();
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
237
              SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
238
239
240
              return 0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
241
242
          //Si il n'y a plus d'enemies, c'est une victoire !!!
          if (ListeEnemies == NULL)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
243
          {
d0a3f297   Martin CHAUVELIERE   Supression warnings
244
245
              majSurface();
              SDL_Delay(Delai0_2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
246
247
              pageVictoire();
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
248
              SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
249
250
251
              return 0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
252
          
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
253
          majSurface();
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
254
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
255
          TourdeBoucle += 1;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
256
          CheckAlea += 1;
7094c494   Martin CHAUVELIERE   Améliorations fin...
257
258
          
          SDL_Delay(VitesseTourdeBoucle);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
259
260
261
262
  
      }
      return 0;
  }