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