2
// Tailles de la grille
9
// Vitesse des animation
10
#define TREMBLE_NB 10 // Nombre d'it�rations du tremblement de la grille
11
#define TREMBLE_DECAL 6 // D�callage maximum du tremblement de la grille
12
#define TREMBLE_VITESSE 2 // Vitesse du tremblement
13
#define BOULE_VITESSE 1 // Vitesse de l'animation de la boule
14
#define CARACT_VITESSE 5 // Vitesse d'apparition des caract�re
15
#define TXT_DECALX -150 // Position des textes du menu sur l'axe des X
16
#define TXT_DECALY -140 // Position des textes du menu sur l'axe des Y
18
// Valeurs de jeu par d�faut
19
#define DFT_J1ROUGE NON
20
#define DFT_J1TYPE HUMAIN
21
#define DFT_J2TYPE HUMAIN
24
#define DFT_INTEMP NON
25
#define DFT_DOUBLE_DEPLACE NON
26
#define DFT_DOUBLE_BOULEFEU NON
34
#define TXT_SIMPLE "SIMPLE"
35
#define TXT_DOUBLE "DOUBLE"
36
#define TXT_INDISPONIBLE "NOT YET AVAILABLE"
37
#define TXT_PATIENTEZ "PLEASE WAIT"
38
#define TXT_J1NOM "PLAYER 1"
39
#define TXT_J2NOM "PLAYER 2"
40
#define TXT_HUMAIN "HUMAN"
41
#define TXT_ORDI "COMPUTER"
42
#define TXT_JOUER "START"
43
#define TXT_AIDE "HELP"
44
#define TXT_QUITTER "EXIT"
45
#define TXT_REFAIRE "RESTART"
46
#define TXT_MENU "MENU"
47
#define TXT_CONSEIL "ADVICE"
48
#define TXT_QSTQUITTER " EXIT NOW :"
49
#define TXT_QSTMENU " BACK TO MENU :"
50
#define TXT_QSTREFAIRE " RESTART GAME :"
51
#define TXT_RETOURMENU "CLIC TO GO BACK TO MENU"
52
#define TXT_AIDE1 "GOAL OF THE GAME"
53
#define TXT_AIDE2 "YOU MUST BLOCK THE OPPONENT"
54
#define TXT_AIDE3 "BY DESTROYING ALL THE PADS"
55
#define TXT_AIDE4 "WHICH SURROUND HIM BEFORE"
56
#define TXT_AIDE5 "BEING BLOCKED YOURSELF"
57
#define TXT_AIDE6 "HOW TO PLAY"
58
#define TXT_AIDE7 "FOR EACH TURN OF PLAY YOU"
59
#define TXT_AIDE8 "MUST MOVE OF ONE PAD"
60
#define TXT_AIDE9 "ARROUND YOU AND DESTROY"
61
#define TXT_AIDE10 "A PAD WHERE YOU WANT"
62
#define TXT_AIDE11 "GAME OPTIONS:"
63
#define TXT_AIDE12 "CLIC ON THE GREEN WORDS"
64
#define TXT_AIDE13 "PLAYERS CAN BE HUMAN OR COM"
65
#define TXT_AIDE14 "PUTER WITH 3 LEVELS OF AI"
66
#define TXT_AIDE15 "METEORITS: A PAD IS"
67
#define TXT_AIDE16 "DESTROYED EACH TURN OF PLAY"
68
#define TXT_INTEMP "METEORITS:"
69
#define TXT_DEPLACE "MOVE:"
70
#define TXT_BOULEFEU "FIREBALL:"
71
#define TXT_VITESSEJEU "GAME SPEED:"
72
#define TXT_TAILLEGRILLE "GRID SIZE: X"
73
#define TXT_J1GAGNE "PLAYER 1 WINS"
74
#define TXT_J2GAGNE "PLAYER 2 WINS"
75
#define TXT_J1PLACE "PLAYER 1: CHOOSE A PAD"
76
#define TXT_J2PLACE "PLAYER 2: CHOOSE A PAD"
77
#define TXT_J1DEPLACE "PLAYER 1: MOVE"
78
#define TXT_J2DEPLACE "PLAYER 2: MOVE"
79
#define TXT_J1TROU "PLAYER 1: FIRE"
80
#define TXT_J2TROU "PLAYER 2: FIRE"
82
// Fichiers des images
83
#define IMG_MENU "menu.jpg"
84
#define IMG_FOND1 "fond1.jpg"
85
#define IMG_FOND2 "fond2.jpg"
86
#define IMG_FOND3 "fond3.jpg"
87
#define IMG_FOND4 "fond4.jpg"
88
#define IMG_FOND5 "fond5.jpg"
89
#define IMG_NIVO "dossi-nivo.png"
90
#define IMG_POLICE1 "police-jaune.png"
91
#define IMG_POLICE2 "police-verte.png"
92
#define IMG_POLICE3 "police-rouge.png"
93
#define IMG_CASE "case.png"
94
#define IMG_FEU "feu.png"
95
#define IMG_J1COURS "dossi-cours.png"
96
#define IMG_J2COURS "dossa-cours.png"
97
#define IMG_J1LANCE "dossi-lance.png"
98
#define IMG_J2LANCE "dossa-lance.png"
99
#define IMG_J1GAGNE "dossi-victoire.png"
100
#define IMG_J2GAGNE "dossa-victoire.png"
101
#define IMG_J1PERDU "dossi-ange.png"
102
#define IMG_J2PERDU "dossa-ange.png"
103
#define IMG_J1ATTEND "dossi-attend.png"
104
#define IMG_J2ATTEND "dossa-attend.png"
105
#define IMG_J1ATTENDFEU "dossi-attend-feu.png"
106
#define IMG_J2ATTENDFEU "dossa-attend-feu.png"
108
// Vitesse d'affichage des animations en frames par seconde
111
// Location des images
115
// Types pour d�signer le contenu des cases, l'action en cours, ...
116
typedef enum {NON, OUI} BOOL;
117
typedef enum {VIDE, J1, J2, TROU} CASE;
118
typedef enum {J1_DEPLACE, J1_TROU, J2_DEPLACE, J2_TROU} ACTION;
119
typedef enum {HUMAIN, ORDI} TYPEJOUEUR;
120
typedef enum {COURSB, COURSH, COURSG, COURSD, LANCE, GAGNE, PERDU, ATTEND, ATTENDFEU} ANIM;
121
typedef enum {RIEN, QUITTER, MENU, REFAIRE, CONSEIL} CHXMENU;
123
// Structure contenant une police de caractere
125
SDL_Rect rect; // Rectangle de la taille d'un caract�re
126
SDL_Surface *img; // Image contenant les caract�res
129
// Structure permettant de m�moriser les cases offrant le plus de d�placements
131
int x, y; // Coordonn�es de la case
132
int nb; // Valeur de la case
135
// Structure contenant les infos d'un joueur
137
CASE n; // Num�ro du joueur
138
TYPEJOUEUR type; // Humain ou Ordi
139
int nivo; // Niveau du joueur
140
int x, y; // Position sur la grille
141
SDL_Rect rect, src; // Rectangle de position sur l'�cran et dans l'image d'animation
142
SDL_Surface *imgCours; // Images des d�placements
143
SDL_Surface *imgLance; // Images du lancement de la boule de feu
144
SDL_Surface *imgGagne; // Images de la victoire
145
SDL_Surface *imgPerdu; // Images de la d�faite
146
SDL_Surface *imgAttend; // Images de l'attente du d�placement
147
SDL_Surface *imgAttendFeu; // Images de l'attente du lancement de la boule de feu
148
SDL_Surface *imgFeu; // Images de la boule de feu
149
// Nombre d'images pour les animations
150
int nCours, nLance, nGagne, nPerdu, nAttend, nAttendFeu, nFeu;
151
ANIM anim; // Animation en cours
152
int frame; // Image en cours dans l'animation
155
// Structure contenant les infos sur la grille du jeu
157
int xc, yc; // Nombre de cases en longueur et en hauteur
158
int x1, y1; // Position du coin haut gauche de la grille
159
int x2, y2; // Position du coin bas droite de la grille
160
int tc; // Taille des cases
161
int c[XCASEMAX][YCASEMAX]; // Grille indiquant le contenu des cases
162
SDL_Surface *imgCase; // Image d'une case
163
SDL_Surface *imgFond; // Image de l'arri�re plan
166
// Structure contenant les infos g�n�rales sur le jeu
168
SDL_Surface *ecran; // Surface graphique principale (fenetre du prog)
169
SDL_Surface *back; // Surface graphique tampon (back buffer)
170
SDL_Rect titre; // Rectangle o� se situe le texte indiquant l'action en cours
171
SDL_Rect rMenu[4]; // Rects des boutons du menu pendant le jeu
172
POLICE police1, police2, police3; // Polices pour l'affichage de caract�res
173
BOOL J1ROUGE; // Le joueur 1 est vert ou rouge ?
174
BOOL INTEMP; // Pluie de boule de feu ?
175
BOOL DOUBLE_DEPLACE; // Deplacement simple ou double ?
176
BOOL DOUBLE_BOULEFEU; // Place un ou deux trous ?
177
TYPEJOUEUR J1TYPE; // Humain ou Ordi ?
178
TYPEJOUEUR J2TYPE; // Humain ou Ordi ?
179
int J1NIVO; // Niveau de l'IA
180
int J2NIVO; // Niveau de l'IA
181
int XGRILLE, YGRILLE; // Taille de la grille
184
// Renvoie au hasard un nombre compris entre les valeurs pass�es en arguments (la 2e non incluse)
185
int Alea (short, short);
187
// Affiche l'erreur obtenue pendant le chargement d'une image
188
void ImageErreur (char *);
190
// Convertit les coordonn�es du clic de souris en position dans la grille
191
int Case2CoordX (int, GRILLE);
192
int Case2CoordY (int, GRILLE);
194
// Convertit la position dans la grille en coordonn�es sur l'�cran
195
int Clic2CaseX (int, GRILLE);
196
int Clic2CaseY (int, GRILLE);
198
// Synchronise le temps sur la vitesse d'affichage (FPS)
199
void Attend_FPS (void);
201
// Fait trembler l'�cran
202
void Secouer_Ecran (JOUEUR[], GRILLE, SDL_Surface *);
204
// Affiche le joueur avec l'image de l'animation en cours
205
void Afficher_Joueur (JOUEUR *, SDL_Surface *);
207
// Renvoie OUI si le trou a put �tre plac� (et place le trou)
208
BOOL Placer_Trou (int , int , JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);
210
// Renvoie OUI si le joueur a put �tre d�plac� (et d�place le joueur)
211
BOOL Deplacer_Joueur (int, int, JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);
213
// Place le joueur � la position choisie et renvoie OUI si la position est disponible
214
BOOL Placer_Joueur (int, int, JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);
216
// Permet aux joueurs de choisir leur position de d�part
217
void Placer_Joueurs (JEU *, JOUEUR[], GRILLE *, CHXMENU *);
219
// Cr�e la grille, met les images en m�moire, ...
220
void Constructeur (JOUEUR[], GRILLE *, BOOL, SDL_Surface *, SDL_Surface *);
222
// Lib�re la m�moire occup�e par les images
223
void Destructeur (JOUEUR[], GRILLE *);
225
// Pr�vois les possibilit�s de d�placements pour chaques cases
226
void Calcul_Choix (GRILLE , int[][], int , int *);
228
// Cr�e une grille � partir du jeu pour calculer les d�placements possibles
229
void Meilleur_Choix (GRILLE , int[][], int, JOUEUR[], int, MAX[], MAX []);
231
// Place sur l'une des meilleurs cases
232
void Ordi_Place (int *, int *, JOUEUR, GRILLE);
234
// D�place sur l'une des meilleures cases
235
void Ordi_Deplace (int *, int *, JOUEUR [], int, GRILLE);
237
// D�truit l'une des meilleures cases de l'adversaire
238
void Ordi_Trou (int *, int *, JOUEUR [], int, GRILLE);
240
// Boucle de jeu principale qui g�re l'affichage et les �v�nements (souris, ...)
243
// Affiche un caract�re � l'�cran
244
void Afficher_Caractere (int, int, char, POLICE, SDL_Surface *);
246
// Affiche une chaine de caract�re en faisant apparaitre les caract�res en
247
// glissan de l'un des bord de l'�cran
248
BOOL Afficher_Chaine (int, int, int, char[], POLICE, SDL_Surface *, SDL_Surface *);
250
// Affiche les images des personnages repr�sentant les niveaux d'intelligence
251
void Afficher_IA (int, SDL_Rect[], SDL_Rect[], SDL_Surface *, SDL_Surface *, SDL_Surface *, SDL_Surface *);
253
// Menu de choix des options
256
// Fonction principale qui v�rifie les param�tres pass�s � l'appel du programme,
257
// initialise la biblioth�que graphique SDL, cr�e l'affichage, ...
258
int main (int, char *[]);