-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMenu.cc
378 lines (305 loc) · 11 KB
/
Menu.cc
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
#include "Menu.h"
/*
* Pre: ---
* Post: Muestra por pantalla el mensaje "Pulse la tecla intro" hasta
* que se detecta la tecla
*/
void mostrarTitulo(const string deseo){
// Capturar codigo de la tecla ENTER
bool pulsada = false;
// Capturar codigo de la tecla ENTER
while (!pulsada){
gotoxy(45 , 23);
cout << "Pulsa la tecla INTRO para " + deseo << flush;
// Capturar tecla pulsada
unsigned char tecla = getch();
// Comprobacion de tecla ENTER
if (int(tecla) == TECLA_ENTER){
// Es la tecla ENTER
pulsada = true;
}
}
}
/*
* Pre: ---
* Post: Ha devuelto el tipo de dificultad del modo de juego
*/
string mostrarDificultad(int& dificultad){
dificultad = dificultad % MAX_DIFICULTADES;
// Control de dificultad
string tipoDificultad;
// Muestra la dificultad seleccionada al jugador
if (dificultad == 0){
// Modo facil
tipoDificultad = "Facil";
}
else if (dificultad == 1){
// Modo intermedio
tipoDificultad = "Intermedio";
}
else {
// Modo dificil
tipoDificultad = "Dificil";
}
return tipoDificultad;
}
/*
* Pre: ---
* Post: Ha mostrado por pantalla un rotulo cuyo contenido es "FINAL"
*/
void presentarFinal(){
cout << endl << endl;
cout << " ********* *** *** *** ***** ***" << endl;
cout << " ********* *** **** *** ******* ***" << endl;
cout << " *** *** ***** *** *** *** ***" << endl;
cout << " ********* *** ********* *** *** ***" << endl;
cout << " ********* *** ********* ************* ***" << endl;
cout << " *** *** *** ***** *************** ***" << endl;
cout << " *** *** *** **** **** **** ********" << endl;
cout << " *** *** *** *** **** ***** ********" << endl;
}
/*
* Pre: ---
* Post: Ha mostrado por pantalla el menu inicial del
* juego
*/
void presentarMenu(){
cout << endl << endl;
cout << " ***** **** **** ******** ******* ******** ***** ****** ******** " << endl;
cout << " ******* **** **** ******** ******** ******** ******* ******* ******** " << endl;
cout << " *** *** **** **** *** *** *** *** **** *** *** *** **** *** *** " << endl;
cout << " *** *** ********** *** *** ******* **** *** *** *** **** *** *** " << endl;
cout << " ************* ********** *** *** ******** **** ************* *** *** *** *** " << endl;
cout << " *************** **** **** *** *** *** *** **** *************** *** *** *** *** " << endl;
cout << " **** **** **** **** ******** *** *** ******** **** **** ******* ******** " << endl;
cout << " **** ***** **** **** ******** *** *** ******** **** ***** ****** ******** " << endl << endl << endl;
gotoxy(52, 17);
cout << " ZgzInfinity - 2019 " << endl;
}
/*
* Pre: ---
* Post: Ha dibujado por pantalla una cuadricula pequenya
*/
void dibujoCuadricula(){
// Dibujo de las lineas horizontales
for (int i = 33; i < 80; i++){
gotoxy(i, 13);
printf("%c",205);
gotoxy(i, 23);
printf("%c",205);
}
// Dibujo de las lineas verticales
for (int i = 14; i < 23; i++){
gotoxy(32, i);
printf("%c",186);
gotoxy(80, i);
printf("%c",186);
}
// Dibujo de las esquinas de la cuadricula
gotoxy(32, 13); printf("%c", 201);
gotoxy(80, 13); printf("%c", 187);
gotoxy(32, 23); printf("%c", 200);
gotoxy(80, 23); printf("%c", 188);
}
/*
* Pre: ---
* Post: Ha mostrado por pantalla un menu con las posibles
* opciones de configuracion al usuario
*/
void menuOpciones(int& dificultad, int& pista, char nombre[]){
// Reproduccion de la banda sonora del menu de opciones
// sonidoMenuOpciones();
cout << endl << endl;
cout << " ****** ****** ******* *** ****** *** *** ****** ******* " << endl;
cout << " ****** ****** ******* *** ****** **** *** ****** ******* " << endl;
cout << " ** ** ** ** *** *** ** ** ***** *** ** ** " << endl;
cout << " ** ** ****** *** *** ** ** ********* ****** ******* " << endl;
cout << " ** ** ****** *** *** ** ** ********* ****** ******* " << endl;
cout << " ** ** ** *** *** ** ** *** ***** ** ** " << endl;
cout << " ****** ** ******* *** ****** *** **** ****** ******* " << endl;
cout << " ****** ** ******* *** ****** *** *** ****** ******* " << endl;
// Dibujo de la cuadricula
dibujoCuadricula();
gotoxy(35, 15);
cout << "Dificultad de juego (0 - 2) --> " << flush;
cin >> dificultad;
// Reproducir sonido de correcto
tocarSonidoCorrecto();
// Gestion de dificultad
string tipoDificultad = mostrarDificultad(dificultad);
// Informa de la dificultad seleccionada
gotoxy(67, 15);
cout << tipoDificultad << endl;
// Peticion de la banda sonora de partida
gotoxy(35, 18);
cout << "Banda sonora (0 - 3) --> " << flush;
cin >> pista;
// Reproducir sonido de correcto
tocarSonidoCorrecto();
// Mostrar la banda sonora seleccionada
gotoxy(60, 18);
if (pista == 0){
cout << "The art of war";
}
else if (pista == 1){
cout << "The enigmatic puzle";
}
else if (pista == 2){
cout << "Chess Master";
}
else {
cout << "Modo muteado";
}
gotoxy(35,21);
cout << "Nombre de jugador --> " << flush;
cin >> nombre;
// Reproducir sonido de correcto
tocarSonidoCorrecto();
}
/*
* Pre: ---
* Post: Ha mostrado por pantalla un panel con la informacion de la partida actual del usuario.
* En el lateral izquierdo se ha informado de la dificultad actual del modo de juego, en el centro
* se encuentra el nombre del jugador actual, y en la derecha fiura el total de ountos que lleva actualmente
*/
void panelPuntuacion(string dificultad, string nombre, int puntos, bool& actualizar){
// Borde horizontal superior
for (int i = 1; i <= 128; i++){
if (i % 43 == 0){
// Escritura de la interseccion
gotoxy(i, 23);
printf("%c", 203);
// Escritura de la linea vertical para subidivir el primer fragmento
if (i < 80){
for (int j = 1; j <= 2; j++){
gotoxy(i, 23 + j);
printf("%c", 186);
}
}
}
else {
// Escritura de la linea horizontal
gotoxy(i, 23);
printf("%c", 205);
}
}
// Escritura del segundo fragmento del cuadro
for (int j = 1; j < 3; j++){
gotoxy(80, 23 + j);
for (int k = 81; k < 126; k++){
if (k == 87){
// Linea vertical de subdivision
printf("%c", 186);
}
else{
cout << " ";
}
}
}
// Muestra la difcicutad del juego
gotoxy(15, 24);
cout << " DIFICULTAD : " << dificultad;
// Muestra el nombre del jugador
gotoxy(55, 24);
cout << " JUGADOR : " << nombre;
// Tercer fragmento del panel de puntuacion
gotoxy(80, 24);
for (int k = 81; k < 101; k++){
// Escritura de linea vertical para el tercer fragmento
if (k == 87){
printf("%c", 186);
}
else{
cout << " ";
}
}
// Mostrar los puntos
cout << " PUNTUACION : ";
if (actualizar){
// Actualizar puntos de la partida anterior
// Reproducir sonido de bonus y mostrar los nuevos puntos
tocarSonidoBonusLife();
// Dormir ejecucion 30 milisegundos y reanudar
Sleep(RETARDO / 200);
}
// Mantiene los ountos de antes
cout << puntos;
}
/*
* Pre: ---
* Post: Ha mostrado por terminal los caracteres que componen la cadena
* <<mensaje>> con un intervalo de separacion de 100 milisegundos
*/
void mostrarMensaje(const string mensaje){
int dim = mensaje.length();
gotoxy(64, 19);
printf("%c", 33);
for (int i = 0; i < dim; i++){
gotoxy(65 + i, 19);
cout << mensaje.at(i) << " ";
Sleep(RETARDO / 600);
}
gotoxy(65 + dim, 19);
printf("%c", 173);
}
/*
* Pre: ---
* Post: Muestra por pantalla los creditos del juego
*/
void creditos(){
// Creditos finales del juego
string orden = "terminar";
gotoxy(50, 5);
cout << " CREDITOS FINALES " << endl;
gotoxy(49, 6);
cout << " ==================" << endl;
// Dormir 1 segundo y mostrar titulo del juego
Sleep(RETARDO / 3);
gotoxy(49, 9);
cout << " Juego del Ahorcado " << endl;
// Dormir 1 segundo y mostrar autor del juego
Sleep(RETARDO / 3);
gotoxy(52, 11);
cout << " ZgzInfinity " << endl;
// Dormir 1 segundo y duracion del proyecto
Sleep(RETARDO / 3);
gotoxy(47, 14);
cout << " Abril 2019 - Julio 2019 " << endl;
// Dormir 2 segundos
Sleep(RETARDO - 1000);
// Limpiar pantalla y seguir con los creditos
system("cls");
gotoxy(50, 2);
cout << " Bandas sonoras del juego " << endl;
gotoxy(49, 3);
cout << "===========================" << endl;
Sleep(RETARDO / 3);
gotoxy(47, 5);
cout << "Golden axe 1991 (GENESIS) Music " << endl;
Sleep(RETARDO / 3);
gotoxy(45, 7);
cout << "Streets of Rage 1991 (GENESIS) Music " << endl;
Sleep(RETARDO / 3);
gotoxy(50, 9);
cout << "Alien 3 (GENESIS) Music " << endl;
Sleep(RETARDO / 3);
gotoxy(43, 11);
cout << "Sonic the hedgehog 1991 (GENESIS) Music " << endl;
Sleep(RETARDO / 3);
gotoxy(47, 13);
cout << "Final fantasy X 2001 (ps2) Music " << endl;
Sleep(RETARDO / 3);
gotoxy(50, 15);
cout << "Chessmaster 2002 (ps2)" << endl;
Sleep(RETARDO / 3);
gotoxy(48, 17);
cout << "Cruis'n USA 1994 (Nintendo 64)" << endl;
Sleep(RETARDO / 3);
gotoxy(35, 19);
cout << "El profesor Layton y la villa misteriosa 2008 (Nintendo DS)" << endl;
Sleep(RETARDO / 3);
gotoxy(15, 21);
cout << " Todos los sonidos y bandas sonoras empleadas son propiedad de las empresas desarrolladoras" << endl;
// Pulsar ENTER para finalizar
mostrarTitulo(orden);
}