-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathescape_laboratorio.h
264 lines (221 loc) · 9.68 KB
/
escape_laboratorio.h
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
#ifndef __ESCAPE_LABORATORIO_H__
#define __ESCAPE_LABORATORIO_H__
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#define MAX_OBSTACULOS 25
#define MAX_HERRAMIENTAS 25
#define MAX_NIVELES 4
#define MAX_PAREDES 250
#define MAX_DIMENSIONES 17
#define MAX_VACIOS 250
typedef struct coordenada {
int fil;
int col;
} coordenada_t;
typedef struct personaje {
char tipo;
int movimientos;
coordenada_t posicion;
bool tiene_llave;
bool presiono_interruptor;
bool murio;
} personaje_t;
typedef struct elemento {
char tipo;
coordenada_t posicion;
} elemento_t;
typedef struct nivel {
coordenada_t entrada;
coordenada_t salida;
coordenada_t paredes[MAX_PAREDES];
int tope_paredes;
elemento_t obstaculos[MAX_OBSTACULOS];
int tope_obstaculos;
elemento_t herramientas[MAX_HERRAMIENTAS];
int tope_herramientas;
} nivel_t;
typedef struct juego {
nivel_t niveles[MAX_NIVELES];
int nivel_actual;
personaje_t personaje;
} juego_t;
/*
* Determinará la dimensión de un nivel dado su número
* entre 0 y 3 inclusive.
*/
int dimensiones_nivel(int nivel);
/*
* Inicializará las paredes de un nivel dado el número del nivel, su
* vector mapa y su tope.
*/
void inicializar_nivel_paredes(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], int numero_nivel, coordenada_t mapa[MAX_PAREDES], int tope);
/* Devolverá la cantidad de monedas correspondientes a un nivel
* dada una cantidad de baldosas pincho.
*/
int calcular_monedas(int cantidad_pinches);
/* Devolverá la cantidad de paredes de un nivel dada su dimensión y
*y la matriz del nivel.
*/
int calcular_tope_paredes(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], int dimension);
/* Creará una entrada en una posición aleatoria, dado un nivel, la posición de la entrada
* y la dimensión del nivel.
*/
void crear_entrada(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], coordenada_t *entrada, int dimension);
/* Creará una salida en una posición aleatoria, dado un nivel, la posición de la salida
* y la dimensión del nivel.
*/
void crear_salida(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], coordenada_t *salida, int dimension);
/* Creará una llave en una posicion aleatoria y llenará tanto el vector de
* herramientas como el tope de herramientas, dado un nivel, el vector de herraminetas,
* la dimensión del nivel y el tope de herramientas.
*/
void crear_llave(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t llave[MAX_HERRAMIENTAS], int dimension, int *tope_herramientas);
/* Creará los teletransportadores en una posicion aleatoria y llenará tanto el vector de
* herramientas como el tope de herramientas, dado un nivel, el vector de herraminetas,
* la dimensión del nivel y el tope de herramientas.
*/
void crear_teletransportadores(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t teletransportadores[MAX_HERRAMIENTAS], int dimension, int cantidad_guardias, int *tope_herramientas);
/* Creará las monedas en una posicion aleatoria y llenará tanto el vector de
* herramientas como el tope de herramientas, dado un nivel, el vector de herraminetas,
* la dimensión del nivel y el tope de herramientas.
*/
void crear_monedas(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t monedas[MAX_HERRAMIENTAS], int dimension, int cantidad_pinchos, int *tope_herramientas);
/* Creará el interruptor en una posicion aleatoria y llenará tanto el vector de
* herramientas como el tope de herramientas, dado un nivel, el vector de herraminetas,
* la dimensión del nivel y el tope de herramientas.
*/
void crear_interruptor(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t interruptor[MAX_HERRAMIENTAS], int dimension, int *tope_herramientas);
/* Creará las baldosas pincho en una posición aleatoria y llenará tanto el vector de
* obstáculos como el tope de obstáculos, dado un nivel, el vector de obstáculos,
* la dimensión del nivel y el tope de obstáculos.
*/
void crear_pinchos(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t pinchos[MAX_HERRAMIENTAS], int dimension, int cantidad_pinchos, int *tope_obstaculos);
/* Creará los guardias en una posición aleatoria y llenará tanto el vector de
* obstáculos como el tope de obstáculos, dado un nivel, el vector de obstáculos,
* la dimensión del nivel y el tope de obstáculos.
*/
void crear_guardias(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t guardia[MAX_OBSTACULOS], int dimension, int cantidad_guardias, int *tope_obstaculos);
/* Creará la bomba en una posición aleatoria y llenará tanto el vector de
* obstáculos como el tope de obstáculos, dado un nivel, el vector de obstáculos,
* la dimensión del nivel y el tope de obstáculos.
*/
void crear_bomba(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], elemento_t bomba[MAX_OBSTACULOS], int dimension, int *tope_obstaculos);
/* llenará tanto el vector de paredes como su tope, dado el vector de coordenadas de paredes, la dimensión del nivel
* y el tope de paredes.
*/
void guardar_paredes(char nivel[MAX_DIMENSIONES][MAX_DIMENSIONES], coordenada_t paredes[MAX_PAREDES], int dimension, int *tope_paredes);
/*
* Inicializara un nivel cargando su entrada,
* salida, obtáculos, herramientas y paredes.
*/
void inicializar_nivel(nivel_t* nivel, int numero_nivel, int cantidad_baldosas_pinches, int cantidad_guardia, bool hay_bomba);
/*
* Inicializará el juego, cargando la informacion de los cuatro niveles
* y los datos del personaje.
*/
void inicializar_juego(juego_t* juego, char tipo_personaje);
/* Recibe una tecla en donde se devolverá:
* -> True si la tecla es valida.
* -> False si la tecla no es valida.
*/
bool validacion_tecla(char tecla);
/* Recibe un juego con todas sus estrucutas validas, la posición del personaje,
* y la cantidad entera a sumar tanto en fila como columna.
* Devolverá:
* -> True si la posición es valida.
* -> False si la posción no es valida.
*/
bool validacion_coordenada(juego_t juego, coordenada_t posicion, int sumar_fila, int sumar_columna);
/* Recibe un juego con todas sus estructuras validas, el elemento a validar coordenada
* y su tipo (HERRAMIENTA u OBSTACULO).
* Devolverá:
* -> True si la posición es valida.
* -> False si la posción no es valida.
*/
bool validacion_elementos(juego_t juego, char elemento, char tipo);
/* Recibe un juego con todas sus estructuras validas y la posicion de los guardias
* en coordenadas del nivel en ejecución.
* Devolverá:
* -> True si la posición es valida.
* -> False si la posción no es valida.
*/
bool validacion_posicion_guardias(juego_t juego, coordenada_t guardias);
/* Recive las coordenadas de la salida del nivel en ejecucion
* y la posicion del personaje en coordenadas.
* Devolverá:
* -> True si la posición es valida.
* -> False si la posción no es valida.
*/
bool validacion_salida(coordenada_t salida, coordenada_t personaje);
/*
* Mostrará el juego por pantalla.
* Se recomienda mostrar todo aquello que le sea de
* utilidad al jugador, como los movimientos restantes,
* el nivel, los obstáculos posicionados, las paredes, etc.
*/
void mostrar_juego(juego_t juego);
/*
* Recibe un juego con todas sus estructuras validas y
* movera al personaje a la ubicacion del proximo teletransportador del que
* tomo el personaje.
*/
void teletransportar(juego_t *juego);
/* Recibe un juego con todas sus estructuras validas y
* eliminara la bomba tanto del vector de obstáculos como
* de la impresión del nivel si la posicion del personaje
* coincide con la de la bomba, y a su vez, se modificará el tope de obstáculos.
*/
void eliminar_bomba(juego_t *juego);
/* Recibe un juego con todas sus estructuras validas y
* eliminara la moneda tanto del vector de herramientas como
* de la impresión del nivel si la posicion del personaje
* coincide con la de la moneda, y a su vez, se modificará el tope de herramientas.
*/
void eliminar_moneda(juego_t *juego);
/* Recibe un juego con todas sus estructuras validas y
* eliminara la llave tanto del vector de herramientas como
* de la impresión del nivel si la posicion del personaje
* coincide con la de la moneda, y a su vez, se modificará el tope de herramientas.
*/
void eliminar_llave(juego_t *juego);
/* Recibe un juego con todas sus estrucuras validas y
* cambiará la posición de los guardias.
*/
void coordenadas_aleatorias_guardias(juego_t *juego);
/*
* Recibe el personaje con todas sus estructuras válidas, y la coordenada de la salida del nivel en ejecución.
* El nivel se dará por ganado cuando el personaje se
* posicione en la salida habiendo obtenido previamente la llave.
* Devolverá:
* -> 0 si el estado es jugando.
* -> 1 si el estado es ganado.
*/
int estado_nivel(personaje_t personaje, coordenada_t salida);
/*
* Recibe un juego con todas sus estructuras válidas.
* El juego se dará por ganado si el personaje está en el último nivel
* y posicionado en la salida.
* El juego se dará por perdido, si el personaje queda sin movimientos.
* Devolverá:
* -> 0 si el estado es jugando.
* -> -1 si el estado es perdido.
* -> 1 si el estado es ganado.
*/
int estado_juego(juego_t juego);
/*
* Mueve el personaje en la dirección indicada por el usuario
* y actualiza el juego según los elementos que haya en el camino
* del personaje.
* El juego quedará en un estado válido al terminar el movimiento.
* El movimiento será:
* -> w: Si el personaje debe moverse para la arriba.
* -> a: Si el personaje debe moverse para la derecha.
* -> s: Si el personaje debe moverse para la abajo.
* -> d: Si el personaje debe moverse para la izquierda.
* En caso de que en la dirección que se quiere mover haya una pared
* se contará como un movimiento, los guardias se moverán y
* el personaje quedará en la misma baldosa.
*/
void mover_personaje(juego_t* juego, char movimiento);
#endif /* __ESCAPE_LABORATORIO_H__ */