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;
}
|