generated from ECE-Lyon/Base-Projet-Avec-Marp
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCarte
304 lines (224 loc) · 9 KB
/
Carte
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
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#define SCREEN_W 1500 //largeur fenêtre allegro
#define SCREEN_H 1000 //hauteur fenêtre allegro
typedef struct banqueImage //Structure pour stocker les images
{
BITMAP * fondMenu; //fond du menu principal
BITMAP * joueur; // sprite du joueur
BITMAP * batMinigame[3]; //batiments représentant les mini jeux
BITMAP * finishLine; // ligne d'arrivée de la course hippique
BITMAP * taupe; //taupe
} t_banqueImage;
typedef struct banquePolice //Structure pour stocker les polices
{
FONT * Roller_72;
FONT * Roller_it_24;
FONT * Pixel_11;
FONT * System_14;
FONT * Hudson_26;
} t_banquePolice;
typedef struct joueur //structure chargée de stocker les informations d'un joueur
{
char* name; //nom joueur
int taillenom; //taille du nom
int tickets; //nombre de tickets
int score; //score
int color; //couleur
} t_joueur;
typedef struct terrain //structure qui stock les informations de la carte où l'on se déplace pour atteindre les différentes attractions
{
int occupied; //0=non (traversable) 1=oui (pas traversable)
int isStartAttraction; //savoir si la case est un emplacement pour démarrer une attraction
int isPlayerPos; //savoir si le joueur est sur cette case
} t_terrain;
typedef struct minigame //structure chargée de stocker les informations d'une attraction
{
char titre[20]; //nom
int difficulty; //difficulté
int coordBat[2][2]; //tableau de cases prise par le bat
int coordPlay[2]; //coord de la case qui lance le mini-jeu
} t_minigame;
typedef struct partie //structure principale chargée de stocker toutes les infos de la partie
{
t_joueur playerBase[2]; //tab de 2 joueurs
t_minigame jeux[4]; //tab de 4 minigame
t_terrain plateau[15][15]; //carte du jeu
} t_partie;
t_banquePolice loadBanquePolices();
t_banqueImage loadBanqueImage();
int isClickInCoord(int x1, int x2, int y1, int y2);
//MAIN
int main()
{
srand(time(NULL)); //initialisation de la fonction random
allegro_init(); //initialisation allegro
install_keyboard(); //acces utilisation clavier
install_mouse(); //acces utilisation souris
set_color_depth(desktop_color_depth()); //initialisation de la palette de couleur
if((set_gfx_mode(GFX_AUTODETECT_WINDOWED,SCREEN_W,SCREEN_H,0,0))!=0) //paramètres de la fenêtre
{
//blindage si problème avec la fenêtre allegro
allegro_message("Pb de mode graphique"); //indication du problème
allegro_exit(); //fermeture d'allegro
exit(EXIT_FAILURE); //sortie forcée du programme
}
show_mouse(screen); //on affiche la souris à l'écran
BITMAP * buffer = create_bitmap(SCREEN_W,SCREEN_H); //déclaration du buffer
t_banquePolice police = loadBanquePolices();
t_banqueImage image = loadBanqueImage();
t_partie partie;
int choix=0;
int actionJoueur=0;
int terrain[10][10];
for(int i=0; i<10; i++) //pour toutes les cases de la carte
{
for(int j=0; j<10; j++)
{
terrain[i][j]=0;
}
}
//assignation des batiments et zones de jeu
//tir au ballon
terrain[3][1]=1;
terrain[3][2]=1;
terrain[4][1]=1;
terrain[4][2]=1;
terrain[4][3]=11;
//paris hippiques
terrain[2][6]=2;
terrain[2][7]=2;
terrain[3][6]=2;
terrain[3][7]=2;
terrain[3][5]=22;
//taupe la
terrain[7][4]=3;
terrain[7][5]=3;
terrain[8][4]=3;
terrain[8][5]=3;
terrain[6][4]=33;
int posJoueur[2];//matrice 2:1 stockant la position du joueur sur la carte
posJoueur[0]=5;
posJoueur[1]=8;
partie.playerBase[0].color=makecol(17,75,200);
partie.playerBase[1].color=makecol(129,30,30);
partie.playerBase[0].name =malloc(sizeof(strlen("Jean")));
strcpy(partie.playerBase[0].name, "Jean");
partie.playerBase[1].name = malloc(sizeof(strlen("Valjean")));
strcpy(partie.playerBase[1].name, "Valjean");
partie.playerBase[0].tickets=5;
partie.playerBase[1].tickets=5;
while(actionJoueur==0)
{
clear_bitmap(buffer);
rectfill(buffer, 0,0, SCREEN_W, SCREEN_H, makecol(0,125,0)); //affichage du fond
rectfill(buffer, 1100, 0, SCREEN_W, SCREEN_H, makecol(127,127,127)); //affichage de la barre d'interface
///affichage de la carte
for(int i=0; i<10; i++) //pour toutes les cases de la carte
{
for(int j=0; j<10; j++)
{
rect(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(0,0,0) ); //on dessine le contour
switch(terrain[i][j])
{
case 0:
rect(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(0,0,0) ); //on dessine le contour
break;
case 1:
rectfill(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(125,0,0) ); //on affiche la case du jeu 1
break;
case 2:
rectfill(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(0,255,0) ); //on affiche la case du jeu 2
break;
case 3:
rectfill(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(0,0,125) ); //on affiche la case du jeu 3
break;
default:
rectfill(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(200,200,200) ); //on affiche la case de lancement de jeu
break;
}
if(posJoueur[0]==i && posJoueur[1]==j) rectfill(buffer, 110*i,100*j, 110*(i+1),100*(j+1), makecol(255,0,0) ); //si c'est la position du joueur, on affiche le joueur
if(isClickInCoord(110*i,110*(i+1),100*j,100*(j+1))&& (terrain[i][j]<1 || terrain[i][j]>3 ))
{
posJoueur[0]=i;
posJoueur[1]=j;
}
}
}
///affichage de l'interface et affichage de l'ordre de jeu
textout_centre_ex(buffer, police.Hudson_26, "Au Tour De:", 1300, 50, makecol(255,255,255), -1);
textprintf_centre_ex(buffer, police.Hudson_26, 1300, 100, partie.playerBase[0].color, -1, "%s - %dT", partie.playerBase[0].name, partie.playerBase[0].tickets );
textprintf_centre_ex(buffer, police.Hudson_26, 1300, 200, partie.playerBase[1].color, -1, "%s - %dT", partie.playerBase[1].name, partie.playerBase[1].tickets );
//affichage des options
for(int i=0; i<3; i++)
{
rectfill(buffer, 1150, 500+165*i, 1450, 645+165*i, makecol(0,0,0)); //on affiche le contour
rectfill(buffer, 1150+5, 500+165*i+5, 1450-5, 645+165*i-5, makecol(200,200,200)); //on rmplis la case
if(isClickInCoord(1150+5,1450-5, 500+165*i+5,645+165*i-5)) rectfill(buffer, 1150+5, 500+165*i+5, 1450-5, 645+165*i-5, makecol(110,65,38)); //on détecte un éventuel click
switch (i)
{
case 0:
textout_centre_ex(buffer, police.Hudson_26, "Quitter", 1300, 540+165*i, makecol(0,0,0), -1);
break;
case 1:
textout_centre_ex(buffer, police.Hudson_26, "Classement", 1300, 540+165*i, makecol(0,0,0), -1);
break;
case 2:
textout_centre_ex(buffer, police.Hudson_26, "Jouer", 1300, 540+165*i, makecol(0,0,0), -1);
break;
}
}
for(int i=0; i<3; i++)
{
if(isClickInCoord(1150+5,1450-5, 500+165*i+5,645+165*i-5)) choix=i+1; //on détecte un éventuel click
}
switch (choix) //on regarde le choix du joueur
{
case 1:
actionJoueur=1; //on quitte la partie
break;
case 2:
actionJoueur=2; //on affiche le classement
break;
case 3 :
switch(terrain[posJoueur[0]][posJoueur[1]]) //on regarde la case de la où on se trouve
{
case 11: //si c'est le lancement du jeu 1
actionJoueur=11;
break;
case 22: //si c'est le lancement du jeu 2
actionJoueur=22;
break;
case 33: //si c'est le lancement du jeu 3
actionJoueur=33;
break;
default: //si c'est une case lambda
choix=0; //on remet le choix à 0
break;
}
break;
}
blit(buffer, screen, 0,0, 0,0,SCREEN_W,SCREEN_H);
}
switch(actionJoueur)
{
case 1:
//sauvegarder et quitter
break;
case 2:
//classement
break;
case 11:
//lancer jeu 1
break;
case 22:
//lancer jeu 2
break;
case 33:
//lancer jeu 3
break;
}
return 0;
}
END_OF_MAIN()