Blame view

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