Blame view

Space Invader/Envahisseurs/Graphique/src/Main/main.c 6.22 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
23
24
25
26
27
28
  #define Nom                  "Space Invader"
  #define NombreEnemieParLigne 8
  #define NombreLigneEnemies   3
  #define NombreVie            3
  
  #define BombeRandomFixe 50
  #define BombeRandomAlea 30
  
  #define VitesseTourdeBoucle      20
  #define VitesseDeplacementEnemie 2
  
  #define Delai0_2s 200
  #define Delai0_5s 500
  #define Delai2s   2000
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
29
30
31
32
33
  int main()
  {
      creerSurface(TailleX,TailleY,Nom);
  
      initialiser();
7094c494   Martin CHAUVELIERE   Améliorations fin...
34
      initialiserjoueur();
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
35
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
36
37
38
39
40
      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...
41
42
43
44
      struct liste_entite* Ljoueur = NULL;
      ajout_tete(&Ljoueur,joueur);
      
      
7094c494   Martin CHAUVELIERE   Améliorations fin...
45
      LigneEnemie(&ListeEnemies,NombreEnemieParLigne,NombreLigneEnemies);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
46
47
      int SensVague=1;
      
7094c494   Martin CHAUVELIERE   Améliorations fin...
48
49
50
51
52
53
54
      char input        = '\0';
      int TourdeBoucle  = 0;
      int TimeAlea      = 0;
      int CheckAlea     = 0;
      int mort          = 0;
      int nbr_vie       = NombreVie;
      evenement even = 0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
55
56
57
      
      int coeur    = chargerLutin ("../../Lutins/Coeur.bmp",
                               COULEUR_NOIR);
7094c494   Martin CHAUVELIERE   Améliorations fin...
58
59
60
      int hitboxcoeurL = 0;
      int hitboxcoeurH = 0;
      
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
61
62
63
64
65
66
67
68
      tailleLutin (coeur,
                   &hitboxcoeurL,
                   &hitboxcoeurH);
  
      if ( pagedemarrage() != 'j')
      {
          return 0;
      }
7094c494   Martin CHAUVELIERE   Améliorations fin...
69
      SDL_Delay(Delai0_5s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
70
71
72
73
      
      //Bouble principale
      while(input!='m')
      {
7094c494   Martin CHAUVELIERE   Améliorations fin...
74
          //Si le joueur est mort
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
75
76
77
          if (mort == 1)
          {
              nbr_vie-=1;
7094c494   Martin CHAUVELIERE   Améliorations fin...
78
              //Si il lui reste des vies
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
79
80
81
82
              if (nbr_vie > 0)
              {
                  pagemort(nbr_vie);
                  majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
83
                  SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
84
85
                  mort = 0;
              }
7094c494   Martin CHAUVELIERE   Améliorations fin...
86
              //Si il n'a plus de vie
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
87
88
89
90
              else
              {
                  pageGameOver();
                  majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
91
                  SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
92
93
                  return 0;
              }
7094c494   Martin CHAUVELIERE   Améliorations fin...
94
              //On ajoute de nouveau le joueur précedement supprimé à sa liste 
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
95
              ajout_tete(&Ljoueur,joueur);
7094c494   Martin CHAUVELIERE   Améliorations fin...
96
97
              DesallouerListe(&ListeTires);
              DesallouerListe(&ListeBombes);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
98
99
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
100
101
102
103
104
105
          //Affichage Rectangle Noir sur toute la page
          rectanglePlein(0,
                         0,
                         TailleX,
                         TailleY,
                         COULEUR_NOIR);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
106
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
107
108
          //Affichage des coeurs de vie
          for (int i = 1 ; i <= nbr_vie; i++)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
109
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
110
111
112
              afficherLutin(coeur,
                            TailleX - i * hitboxcoeurL,
                            Sol);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
113
          }
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
114
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
115
116
117
118
119
120
          //Affichage du Sol
          rectanglePlein(0,
                         Sol,
                         TailleX,
                         EpaisseurSol,
                         COULEUR_VERT);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
121
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
122
123
124
125
          //Affichage du joueur
          afficherLutin(canon,
                        Ljoueur->entite.posx - hitboxcanonL/2 + ErreurHitbox,
                        Ljoueur->entite.posy);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
126
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
127
128
129
130
131
          //Affichage des ListeEnemies
          AfficherEnemie(ListeEnemies,
                         enemie,
                         hitboxenemieL,
                         hitboxenemieH);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
132
             
7094c494   Martin CHAUVELIERE   Améliorations fin...
133
134
135
136
          //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...
137
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
138
139
140
              //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...
141
          }
7094c494   Martin CHAUVELIERE   Améliorations fin...
142
143
144
145
          //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...
146
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
147
148
149
              MakeBombeDrop(ListeEnemies,
                            &ListeBombes);
              TimeAlea=0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
150
151
152
              CheckAlea=0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
153
154
155
156
157
158
159
160
161
162
163
          //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...
164
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
165
166
          //Deplacement des enemies tout les X tours de boucle
          if (TourdeBoucle == VitesseDeplacementEnemie)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
167
          {
7094c494   Martin CHAUVELIERE   Améliorations fin...
168
169
170
171
              DeplacementEnemie(ListeEnemies,
                                &SensVague,
                                1);
              TourdeBoucle = 0;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
172
173
          } 
  
7094c494   Martin CHAUVELIERE   Améliorations fin...
174
175
176
          //Deplacement des Tires et Bombes
          DeplacementTire(&ListeTires);
          DeplacementBombe(&ListeBombes);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
177
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
178
179
          //Supression si collision des Tires et Enemies
          SupprimerEntitesEnCollision(&ListeTires,hitboxmissileL,hitboxmissileH,&ListeEnemies,hitboxenemieL,hitboxenemieH);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
180
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
181
182
          //Supression si collision des Bombes et Joueur
          if (SupprimerEntitesEnCollision(&ListeBombes,hitboxbombeL,hitboxbombeH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
183
184
185
          {
              mort = 1;
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
186
              SDL_Delay(Delai0_2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
187
          }
7094c494   Martin CHAUVELIERE   Améliorations fin...
188
189
190
          
          //Supression si collision des Enemies et Joueur
          if (SupprimerEntitesEnCollision(&ListeEnemies,hitboxenemieL,hitboxenemieH,&Ljoueur,hitboxcanonL,hitboxcanonH) == 1)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
191
192
193
          {
              pageGameOver();
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
194
              SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
195
196
197
              return 0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
198
199
          //Si il n'y a plus d'enemies, c'est une victoire !!!
          if (ListeEnemies == NULL)
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
200
          {
d0a3f297   Martin CHAUVELIERE   Supression warnings
201
202
              majSurface();
              SDL_Delay(Delai0_2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
203
204
              pageVictoire();
              majSurface();
7094c494   Martin CHAUVELIERE   Améliorations fin...
205
              SDL_Delay(Delai2s);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
206
207
208
              return 0;
          }
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
209
          
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
210
          majSurface();
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
211
          
7094c494   Martin CHAUVELIERE   Améliorations fin...
212
          TourdeBoucle += 1;
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
213
          CheckAlea += 1;
7094c494   Martin CHAUVELIERE   Améliorations fin...
214
215
          
          SDL_Delay(VitesseTourdeBoucle);
1e8c0804   Martin CHAUVELIERE   Derniere correcti...
216
217
218
219
  
      }
      return 0;
  }