File: isola.h

package info (click to toggle)
dossizola 1.0-9
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,524 kB
  • ctags: 450
  • sloc: ansic: 2,048; sh: 332; makefile: 75
file content (259 lines) | stat: -rw-r--r-- 9,769 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#include "config.h"

// Tailles de la grille
#define XCASEMIN 4
#define YCASEMIN 4
#define XCASEMAX 9
#define YCASEMAX 7
#define MAXCASES 10

// Vitesse des animation
#define TREMBLE_NB 10			// Nombre d'it�rations du tremblement de la grille
#define TREMBLE_DECAL 6			// D�callage maximum du tremblement de la grille
#define TREMBLE_VITESSE 2		// Vitesse du tremblement
#define BOULE_VITESSE 1			// Vitesse de l'animation de la boule
#define CARACT_VITESSE 5		// Vitesse d'apparition des caract�re
#define TXT_DECALX -150			// Position des textes du menu sur l'axe des X
#define TXT_DECALY -140			// Position des textes du menu sur l'axe des Y

// Valeurs de jeu par d�faut
#define DFT_J1ROUGE NON
#define DFT_J1TYPE HUMAIN
#define DFT_J2TYPE HUMAIN
#define DFT_J1NIVO 2
#define DFT_J2NIVO 2
#define DFT_INTEMP NON
#define DFT_DOUBLE_DEPLACE NON
#define DFT_DOUBLE_BOULEFEU NON
#define DFT_XGRILLE 6
#define DFT_YGRILLE 6
#define DFT_FPS 64

// Textes
#define TXT_OUI			"YES"
#define TXT_NON			"NO"
#define TXT_SIMPLE		"SIMPLE"
#define TXT_DOUBLE		"DOUBLE"
#define TXT_INDISPONIBLE "NOT YET AVAILABLE"
#define TXT_PATIENTEZ	"PLEASE WAIT"
#define TXT_J1NOM		"PLAYER 1"
#define TXT_J2NOM		"PLAYER 2"
#define TXT_HUMAIN		"HUMAN"
#define TXT_ORDI		"COMPUTER"
#define TXT_JOUER		"START"
#define TXT_AIDE		"HELP"
#define TXT_QUITTER		"EXIT"
#define TXT_REFAIRE		"RESTART"
#define TXT_MENU		"MENU"
#define TXT_CONSEIL		"ADVICE"
#define TXT_QSTQUITTER	" EXIT NOW :"
#define TXT_QSTMENU		" BACK TO MENU :"
#define TXT_QSTREFAIRE	" RESTART GAME :"
#define TXT_RETOURMENU	"CLIC TO GO BACK TO MENU"
#define TXT_AIDE1		"GOAL OF THE GAME"
#define TXT_AIDE2		"YOU MUST BLOCK THE OPPONENT"
#define TXT_AIDE3		"BY DESTROYING ALL THE PADS"
#define TXT_AIDE4		"WHICH SURROUND HIM BEFORE"
#define TXT_AIDE5		"BEING BLOCKED YOURSELF"
#define TXT_AIDE6		"HOW TO PLAY"
#define TXT_AIDE7		"FOR EACH TURN OF PLAY YOU"
#define TXT_AIDE8		"MUST MOVE OF ONE PAD"
#define TXT_AIDE9		"ARROUND YOU AND DESTROY"
#define TXT_AIDE10		"A PAD WHERE YOU WANT"
#define TXT_AIDE11		"GAME OPTIONS:"
#define TXT_AIDE12		"CLIC ON THE GREEN WORDS"
#define TXT_AIDE13		"PLAYERS CAN BE HUMAN OR COM"
#define TXT_AIDE14		"PUTER WITH 3 LEVELS OF AI"
#define TXT_AIDE15		"METEORITS: A PAD IS"
#define TXT_AIDE16		"DESTROYED EACH TURN OF PLAY"
#define TXT_INTEMP		"METEORITS:"
#define TXT_DEPLACE		"MOVE:"
#define TXT_BOULEFEU	"FIREBALL:"
#define TXT_VITESSEJEU	"GAME SPEED:"
#define TXT_TAILLEGRILLE "GRID SIZE:  X"
#define TXT_J1GAGNE		"PLAYER 1 WINS"
#define TXT_J2GAGNE		"PLAYER 2 WINS"
#define TXT_J1PLACE		"PLAYER 1: CHOOSE A PAD"
#define TXT_J2PLACE		"PLAYER 2: CHOOSE A PAD"
#define TXT_J1DEPLACE	"PLAYER 1: MOVE"
#define TXT_J2DEPLACE	"PLAYER 2: MOVE"
#define TXT_J1TROU		"PLAYER 1: FIRE"
#define TXT_J2TROU		"PLAYER 2: FIRE"

// Fichiers des images
#define IMG_MENU		"menu.jpg"
#define IMG_FOND1		"fond1.jpg"
#define IMG_FOND2		"fond2.jpg"
#define IMG_FOND3		"fond3.jpg"
#define IMG_FOND4		"fond4.jpg"
#define IMG_FOND5		"fond5.jpg"
#define IMG_NIVO		"dossi-nivo.png"
#define IMG_POLICE1		"police-jaune.png"
#define IMG_POLICE2		"police-verte.png"
#define IMG_POLICE3		"police-rouge.png"
#define IMG_CASE		"case.png"
#define IMG_FEU			"feu.png"
#define IMG_J1COURS		"dossi-cours.png"
#define IMG_J2COURS		"dossa-cours.png"
#define IMG_J1LANCE		"dossi-lance.png"
#define IMG_J2LANCE		"dossa-lance.png"
#define IMG_J1GAGNE		"dossi-victoire.png"
#define IMG_J2GAGNE		"dossa-victoire.png"
#define IMG_J1PERDU		"dossi-ange.png"
#define IMG_J2PERDU		"dossa-ange.png"
#define IMG_J1ATTEND	"dossi-attend.png"
#define IMG_J2ATTEND	"dossa-attend.png"
#define IMG_J1ATTENDFEU	"dossi-attend-feu.png"
#define IMG_J2ATTENDFEU	"dossa-attend-feu.png"

// Vitesse d'affichage des animations en frames par seconde
int FPS;

// Location des images
char imgpath [128];
char fichier [160];

// Types pour d�signer le contenu des cases, l'action en cours, ...
typedef enum {NON, OUI} BOOL;
typedef enum {VIDE, J1, J2, TROU} CASE;
typedef enum {J1_DEPLACE, J1_TROU, J2_DEPLACE, J2_TROU} ACTION;
typedef enum {HUMAIN, ORDI} TYPEJOUEUR;
typedef enum {COURSB, COURSH, COURSG, COURSD, LANCE, GAGNE, PERDU, ATTEND, ATTENDFEU} ANIM;
typedef enum {RIEN, QUITTER, MENU, REFAIRE, CONSEIL} CHXMENU;

// Structure contenant une police de caractere
typedef struct {
	SDL_Rect rect;				// Rectangle de la taille d'un caract�re
	SDL_Surface *img;			// Image contenant les caract�res
} POLICE;

// Structure permettant de m�moriser les cases offrant le plus de d�placements
typedef struct {
  int x, y;						// Coordonn�es de la case
  int nb;						// Valeur de la case
} MAX;

// Structure contenant les infos d'un joueur
typedef struct {
	CASE n;						// Num�ro du joueur
	TYPEJOUEUR type;			// Humain ou Ordi
	int nivo;					// Niveau du joueur
	int x, y;					// Position sur la grille
	SDL_Rect rect, src;			// Rectangle de position sur l'�cran et dans l'image d'animation
	SDL_Surface *imgCours;		// Images des d�placements
	SDL_Surface *imgLance;		// Images du lancement de la boule de feu
	SDL_Surface *imgGagne;		// Images de la victoire
	SDL_Surface *imgPerdu;		// Images de la d�faite
	SDL_Surface *imgAttend;		// Images de l'attente du d�placement
	SDL_Surface *imgAttendFeu;	// Images de l'attente du lancement de la boule de feu
	SDL_Surface *imgFeu;		// Images de la boule de feu
	// Nombre d'images pour les animations
	int nCours, nLance, nGagne, nPerdu, nAttend, nAttendFeu, nFeu;
	ANIM anim;					// Animation en cours
	int frame;					// Image en cours dans l'animation
} JOUEUR;

// Structure contenant les infos sur la grille du jeu
typedef struct {
	int xc, yc;					// Nombre de cases en longueur et en hauteur
	int x1, y1;					// Position du coin haut gauche de la grille
	int x2, y2;					// Position du coin bas  droite de la grille
	int tc;						// Taille des cases
	int c[XCASEMAX][YCASEMAX];	// Grille indiquant le contenu des cases
	SDL_Surface *imgCase;		// Image d'une case
	SDL_Surface *imgFond;		// Image de l'arri�re plan
} GRILLE;

// Structure contenant les infos g�n�rales sur le jeu
typedef struct {
	SDL_Surface *ecran;			// Surface graphique principale (fenetre du prog)
	SDL_Surface *back;			// Surface graphique tampon (back buffer)
	SDL_Rect titre;				// Rectangle o� se situe le texte indiquant l'action en cours
	SDL_Rect rMenu[4];			// Rects des boutons du menu pendant le jeu
	POLICE police1, police2, police3;	// Polices pour l'affichage de caract�res
	BOOL J1ROUGE;				// Le joueur 1 est vert ou rouge ?
	BOOL INTEMP;				// Pluie de boule de feu ?
	BOOL DOUBLE_DEPLACE;		// Deplacement simple ou double ?
	BOOL DOUBLE_BOULEFEU;		// Place un ou deux trous ?
	TYPEJOUEUR J1TYPE;			// Humain ou Ordi ?
	TYPEJOUEUR J2TYPE;			// Humain ou Ordi ?
	int J1NIVO;					// Niveau de l'IA
	int J2NIVO;					// Niveau de l'IA
	int XGRILLE, YGRILLE;		// Taille de la grille
} JEU;

// Renvoie au hasard un nombre compris entre les valeurs pass�es en arguments (la 2e non incluse)
int Alea (short, short);

// Affiche l'erreur obtenue pendant le chargement d'une image
void ImageErreur (char *);

// Convertit les coordonn�es du clic de souris en position dans la grille
int Case2CoordX (int, GRILLE);
int Case2CoordY (int, GRILLE);

// Convertit la position dans la grille en coordonn�es sur l'�cran
int Clic2CaseX (int, GRILLE);
int Clic2CaseY (int, GRILLE);

// Synchronise le temps sur la vitesse d'affichage (FPS)
void Attend_FPS (void);

// Fait trembler l'�cran
void Secouer_Ecran (JOUEUR[], GRILLE, SDL_Surface *);

// Affiche le joueur avec l'image de l'animation en cours
void Afficher_Joueur (JOUEUR *, SDL_Surface *);

// Renvoie OUI si le trou a put �tre plac� (et place le trou)
BOOL Placer_Trou (int , int , JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);

// Renvoie OUI si le joueur a put �tre d�plac� (et d�place le joueur)
BOOL Deplacer_Joueur (int, int, JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);

// Place le joueur � la position choisie et renvoie OUI si la position est disponible
BOOL Placer_Joueur (int, int, JOUEUR[], int, GRILLE *, JEU *, BOOL, CHXMENU *);

// Permet aux joueurs de choisir leur position de d�part
void Placer_Joueurs (JEU *, JOUEUR[], GRILLE *, CHXMENU *);

// Cr�e la grille, met les images en m�moire, ...
void Constructeur (JOUEUR[], GRILLE *, BOOL, SDL_Surface *, SDL_Surface *);

// Lib�re la m�moire occup�e par les images
void Destructeur (JOUEUR[], GRILLE *);

// Pr�vois les possibilit�s de d�placements pour chaques cases
void Calcul_Choix (GRILLE , int[][YCASEMAX+2], int , int *);

// Cr�e une grille � partir du jeu pour calculer les d�placements possibles
void Meilleur_Choix (GRILLE , int[][YCASEMAX+2], int, JOUEUR[], int, MAX[], MAX []);

// Place sur l'une des meilleurs cases
void Ordi_Place (int *, int *, JOUEUR, GRILLE);

// D�place sur l'une des meilleures cases
void Ordi_Deplace (int *, int *, JOUEUR [], int, GRILLE);

// D�truit l'une des meilleures cases de l'adversaire
void Ordi_Trou (int *, int *, JOUEUR [], int, GRILLE);

// Boucle de jeu principale qui g�re l'affichage et les �v�nements (souris, ...)
BOOL Jeu (JEU *);

// Affiche un caract�re � l'�cran
void Afficher_Caractere (int, int, char, POLICE, SDL_Surface *);

// Affiche une chaine de caract�re en faisant apparaitre les caract�res en
// glissan de l'un des bord de l'�cran
BOOL Afficher_Chaine (int, int, int, char[], POLICE, SDL_Surface *, SDL_Surface *);

// Affiche les images des personnages repr�sentant les niveaux d'intelligence
void Afficher_IA (int, SDL_Rect[], SDL_Rect[], SDL_Surface *, SDL_Surface *, SDL_Surface *, SDL_Surface *);

// Menu de choix des options
BOOL Menu (JEU *);

// Fonction principale qui v�rifie les param�tres pass�s � l'appel du programme,
// initialise la biblioth�que graphique SDL, cr�e l'affichage, ...
int main (int, char *[]);