-
Notifications
You must be signed in to change notification settings - Fork 0
/
base.h
254 lines (214 loc) · 9.08 KB
/
base.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
#ifndef BASE_H
#define BASE_H
/*
Aqui estão definidas as constantes e estruturas utilizadas no jogo.
*/
// Bibliotecas necssárias para o jogo
#include "raylib.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
██████ ██████ ███ ██ ███████ ████████ █████ ███S ██ ████████ ███████
██ ██ ██ ████ ██ ██ ██ ██ ██ ████ ██ ██ ██
██ ██ ██ ██ ██ ██ ███████ ██ ███████ ██ ██ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██████ ██ ████ ███████ ██ ██ ██ ██ ████ ██ ███████
*/
#define ALTURA_TELA 900
#define LARGURA_TELA 1044
#define BLOCK_SIZE 16
#define BOMBA_RAIO_EXPLOSAO 3 // Em blocos
#define BOMBA_TEMPO_EXPLOSAO 5 // Em segundos
#define DEBUG_USERNAME "DEBUG********************"
#define FILE_COLEGAS "./data/colegas.bin"
#define FILE_LABIRINTOS "./data/labirintos.bin"
#define FILE_PERGUNTAS "./data/perguntas.txt"
#define FILE_RANKING "./data/ranking.bin"
#define FILE_SAVES "./data/saves.bin"
#define MAX_BOMBAS_ATIVAS 10
#define MAX_COLEGAS_SALVOS 100
#define MAX_CREDITOS_LAB 50
#define MAX_LABS 100
#define MAX_NOME_JOGADOR 25
#define MAX_OPTLEN 150
#define MAX_OPTS 6
#define MAX_PROFESSORES_POR_LAB 50
#define MAX_RANKING 100
#define MAX_SAVES 100
#define MAX_TEXTO 300
#define MAX_PERGUNTAS 500
#define SPRITE_HEIGHT 30
#define SPRITE_SPEED 10 // Inversamente proporcional
#define SPRITE_WIDTH 24
#define TAM_LAB 100
#define COLOR_GOLD \
(Color) { 237, 176, 0, 255 }
#define COLOR_DARK_BROWN \
(Color) { 74, 63, 61, 255 }
#define COLOR_GREEN \
(Color) { 0, 141, 82, 255 }
#define COLOR_LIGHT_BLUE \
(Color) { 188, 226, 229, 255 }
/*
███████ ████████ ██████ ██ ██ ██████ ████████ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ██ ██████ ██ ██ ██ ██ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ██ ██ ██ ██████ ██████ ██ ███████
*/
typedef struct {
Texture2D aluno;
Texture2D colega;
Texture2D credito;
Texture2D livre;
Texture2D bomba;
Texture2D bombaItem;
Texture2D bombaAtiva;
Texture2D parede;
Texture2D professor;
Texture2D relogio;
Texture2D saida;
Texture2D vida;
Texture2D jogador;
Texture2D explosao;
Texture2D disquete;
} TEXTURESLIST; // Lista de texturas do jogo
typedef struct {
Sound hit;
Sound select;
Sound pickup;
Sound powerup;
Sound select_m;
Sound blocked;
Sound correctAnswer;
Sound wrongAnswer;
Sound timesUp;
Sound gameOver;
Sound levelUp;
Sound explosion;
} SOUNDLIST; // Lista de sons do jogo
typedef struct {
char pergunta[MAX_TEXTO + 1]; // Título da pergunta
int n_alternativas; // Número de alternativas
int resposta_correta; // Resposta correta
char alternativas[MAX_OPTS][MAX_OPTLEN]; // Alternativas
int ja_respondida; // Se já foi respondida pelo jogador
} PERGUNTA;
typedef struct {
Vector2 pos; // Posição do professor
Vector2 dpos; // Direção do professor
int respondido; // Se já foi respondido pelo jogador
} PROFESSOR;
typedef struct {
Vector2 pos; // Posição do colega
int nivel; // Nível em que o colega foi salvo. -1 representa que o colega
// não foi salvo e sim gerado aleatoriamente
int respondido; // Se já foi respondido pelo jogador
} COLEGA;
typedef struct {
Vector2 pos; // Posição da bomba
double explodeEm; // Tempo em que a bomba explode, calculado a partir do
// tempo atual + tempo de explosão
} BOMBA;
typedef struct {
char nome[MAX_NOME_JOGADOR + 1]; // Nome do jogador
int vidas; // Vidas do jogador
int bombas; // Bombas que o jogador possui
float tempoMapa; // Tempo que o jogador está no mapa atual
float tempoTotal; // Tempo total que o jogador jogou até o instante atual
int creditosMapa; // Créditos que o jogador coletou no mapa atual
int creditosTotal; // Créditos que o jogador coletou até o instante atual
Vector2 pos; // Posição do jogador
Vector2 dpos; // Direção do jogador
int pontuacao; // Pontuação do jogador
} JOGADOR;
typedef struct {
char nome[MAX_NOME_JOGADOR + 1]; // Nome do jogador
int pontuacao; // Pontuação do jogador
int dificuldade; // Dificuldade em que o jogador jogou
} RANKING;
typedef struct {
PROFESSOR professores[MAX_PROFESSORES_POR_LAB];
int qtdeProfessores;
COLEGA colegas[MAX_COLEGAS_SALVOS];
int qtdeColegas;
char labirintoAtual[TAM_LAB][TAM_LAB];
BOMBA bombasAtivas[MAX_BOMBAS_ATIVAS];
int qtdeBombasAtivas;
int nivel;
int dificuldade;
int creditosNecessarios;
int tempoMaximo;
float tempoRestante;
JOGADOR jogador;
} SAVE; //Os campos possui as mesmas representações do que a struct JOGO
typedef struct {
int cenaAtual; // Representa a cena atual do jogo
int cenaAnterior; // Representa a cena anterior do jogo
int itemSelecionado; // Representa o item selecionado pelo jogador,
// utilizado em menus
int sair; // Se o jogador deseja sair do jogo
char mensagem[MAX_OPTLEN]; // Mensagem a ser exibida na tela de saída
Camera2D camera; // Câmera do jogo
TEXTURESLIST texturas; // Texturas do jogo
SOUNDLIST sons; // Sons do jogo
Music musica; // Música do jogo
float volumeMusica; // Volume da música
PROFESSOR
professores[MAX_PROFESSORES_POR_LAB]; // Representa os professores do
// labirinto atual, o vetor é
// inicializado a cada novo
// labirinto
int qtdeProfessores; // Quantidade de professores no labirinto atual
COLEGA colegas[MAX_COLEGAS_SALVOS]; // Representa os colegas do labirinto,
// o vetor é inicializado a cada novo
// labirinto
int qtdeColegas; // Quantidade de colegas no labirinto atual
PERGUNTA perguntas[MAX_PERGUNTAS]; // Representa as perguntas do jogo, o vetor é
// inicializado ao iniciar o jogo
int qtdePerguntas; // Quantidade de perguntas do jogo
int perguntaAtual; // Índice da pergunta atual
char origemPergunta; // Representa a origem da pergunta - 'P': Professor,
// 'c' : Colega
Vector2 origemPerguntaPos; // Posição da origem da pergunta
char labirintoAtual[TAM_LAB]
[TAM_LAB]; // Matriz que representa o labirinto atual
BOMBA bombasAtivas[MAX_BOMBAS_ATIVAS]; // Representa as bombas ativas no
// labirinto atual
Color corParede; // Cor da parede do labirinto atual
int qtdeBombasAtivas; // Quantidade de bombas ativas no labirinto atual
int qtdeLabirintos; // Quantidade de labirintos do jogo, informação obtida
// do arquivo binário
int nivel; // Nível atual do jogo
int dificuldade; // Dificuldade do jogo, informação obtida do usuário no
// menu
int creditosNecessarios; // Créditos necessários para passar de nível
int tempoMaximo; // Tempo máximo para passar de nível
float tempoRestante; // Tempo restante para passar de nível
RANKING ranking[MAX_RANKING]; // Vetor que representa o ranking do jogo,
// informação obtida do arquivo binário
int qtdeRanks; // Quantidade de jogadores no ranking
SAVE saves[MAX_SAVES]; // Vetor que representa os saves do jogo, informação
// obtida do arquivo binário
int qtdeSaves; // Quantidade de saves do jogo
JOGADOR jogador; // Representa o jogador
} JOGO;
enum CENAS {
CENA_MENU_PRINCIPAL,
CENA_SAIR,
CENA_MENU_NOVOJOGO1,
CENA_MENU_NOVOJOGO2,
CENA_MENU_CARREGAR,
CENA_MENU_SALVAR,
CENA_MENU_INFORMACOES,
CENA_MENU_PAUSE,
CENA_PERGUNTA,
CENA_LABIRINTO,
CENA_ACABOU_TEMPO,
CENA_FIM_JOGO,
CENA_MENU_CLASSIFICACAO,
MENU_TUTORIAL
};
#endif //BASE_H