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