forked from danigfavero/LAREIRA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathacoes.c
391 lines (333 loc) · 11.3 KB
/
acoes.c
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
378
379
380
381
382
383
384
385
386
387
388
389
390
391
#include "salas.h"
#define vivo 0
#define atirou 1
#define conversas 2
#define deitado 3
int visited = 1;
void imprimeConteudo(Elemento compartimento, int tamanho_hash)
{
int tem_algo = 0;
printf("N%s %s ha:\n", compartimento.artigos[0], compartimento.nome);
for(int i = 0; i < tamanho_hash; i++)
{
Elo* andante = compartimento.conteudo.listas[i].cabec;
Elemento * el;
while(andante!=NULL){
el = (Elemento*) andante->val;
if(el != NULL){
printf("%s %s\n",el->artigos[1], el->nome);
tem_algo=1;
}
andante = andante->next;
}
}
if(!tem_algo)printf("Nada\n");
}
int Mover(Elemento* e1, int direcao){
Elemento* novo = e1->def.lugar.saidas[direcao];
//printf("de %s para %s e %d\n", sala6.nome, novo->nome, visited);
if(stringsIguais(novo->nome, sala5.nome) && visited < 5){
puts("Voce nao consegue ir nessa direcao!");
return 0;
}
if(novo->ativo != True) visited++;
novo->ativo = True;
atual = novo;
return 1;
}
int Examinar(Elemento* e1, Elemento* e2){
if(e1->visivel){
if(e1->conhecido) puts(e1->curta);
else{
puts(e1->longa);
e1->conhecido = True;
}
}
return e1->visivel;
}
int Tirar(Elemento* e1, Elemento* e2){
if(e2 == NULL) e2 = &personagem; //Por default vamos retirar do personagem se não especificado
if(Tretira(e2->conteudo, e1->nome)){ //Se conseguiu retirar
Tinsere(atual->conteudo, e1); //Insere na sala de volta
printf("Você retirou %s %s e agora está na sala de origem\n", e1->artigos[0], e1->nome);
e1->visivel = True;
e1->ativo = True;
if(/*stringsIguais(e1->nome,"mascara")*/ e1 == &mascara) {
pessoas.ativo = False; //Quando tira a mascara, as pessoas voltam a ficar inativas
if(stringsIguais(atual->nome, sala3.nome)) puts("O grupo de pessoas divertidas que pareciam te acolher subitamente se fecha\n"
"E te isolam mais uma vez, parecendo não notar sua presenca\n");
}
return 1;
}
//Se não conseguiu retirar
else printf("%s %s não conteúdo nenh%s %s", e1->artigos[0], e1->nome, e2->artigos[1], e2->nome);
return 0;
}
int Colocar(Elemento* e1, Elemento* e2){
printf("Você coloca %s %s em %s\n", e1->artigos[0], e1->nome, e2->nome); //"Você coloca a mascara" ou alguma outra coisa que dê pra vestir
Tinsere(e2->conteudo, e1); //Coloca o elemento no jogador
Tretira(atual->conteudo, e1->nome); //Tira o elemento da sala
//Se vestir a mascara, as pessoas ficam ativas para interação
if(stringsIguais(e1->nome, "mascara")) {
pessoas.ativo = True;
puts("As pessoas que estavam se divertindo sem parecer notar sua presença\n"
"Começam homogeneamente a virar os olhos em sua direcao..\n"
"Alguns deles até te convidam para interagir!\n"
"Parece que agora você é visto!\n");
}
return 1;
}
int Interagir(Elemento* e1, Elemento* e2){
if(e1->ativo)
{
puts("Você entra no meio da multidão, parece uma festa\n"
"Está se sentindo aceito, uma sensação bem acolhedora\n"
"Voce poderia ficar ali para sempre... Mas...\n"
"Quem é você mesmo?\n");
return 1;
}
puts("Você tenta interagir com a multidão, mas é excluído e completamente ignorado\n"
"Algo não está certo..\n");
return 0;
}
int Abrir(Elemento* e1, Elemento* e2){
if(e1->ativo && e1->visivel){
//Deixa visivel e ativo tudo que tem dentro do elemento (envelope)
printf("Voce abre %s %s e\n", e1->artigos[0], e1->nome);
imprimeConteudo((*e1), 4);
return 1;
}
return 0;
}
int Desligar(Elemento* e1, Elemento* e2){
puts("Mesmo com o gramofone desligado, a música continua tocando.\n"
"Isso não faz sentido nenhum...\n"
"Não importa se o disco gira ou não, a música sempre toca.\n");
return 1;
}
int Ligar(Elemento* e1, Elemento* e2){
puts("Como você quer ligar algo que nem sequer foi desligado?\n"
"Pelo menos agora o disco gira...\n");
return 1;
}
int Estourar(Elemento* e1, Elemento* e2){
if(e1->ativo){
e1->ativo = False;
printf("Ué, esquisito, o balão estourou mas não fez nenhum som.\n");
return 1;
}
printf("Não dá pra estourar um balão estourado!\n");
return 0;
}
int Tocar(Elemento* e1, Elemento* e2){
if(Tbusca(e1->conteudo,e2->nome)==e2){
printf("O disco já está no gramofone\n");
return 0;
}
return (Tinsere(e1->conteudo, e2));
}
int Ler(Elemento* e1, Elemento* e2){
if(stringsIguais(e1->nome,"carta")) {
puts("\n Amo-te tanto, meu amor... não cante\n"
" O humano coração com mais verdade...\n"
" Amo-te como amigo e como amante\n"
" Numa sempre diversa realidade.\n\n"
" Amo-te afim, de um calmo amor prestante\n"
" E te amo além, presente na saudade.\n"
" Amo-te, enfim, com grande liberdade\n"
" Dentro da eternidade e a cada instante.\n\n"
" Amo-te como um bicho, simplesmente\n"
" De um amor sem mistério e sem virtude\n"
" Com um desejo maciço e permanente.\n\n"
" E de te amar assim, muito e amiúde\n"
" É que um dia em teu corpo de repente\n"
" Hei de morrer de amar mais do que pude.\n\n\n");
puts("Essas palavras te lembram um sentimento, mas sem muito sentido\n"
"É apenas a remanescência da sua pouca memória.\n");
return 1;
}
return 0;
}
int Atirar(Elemento* e1, Elemento* e2){
if(!stringsIguais(e1->nome,"arma")){
Tirar(&personagem, e1);
return 1;
}
if(!(e1->ativo)){
printf("A arma não tem mais balas.\n");
return 1;
}
if(e2 == NULL){
e1->ativo = False;
printf("Você ouve um som forte. Nada acontece.\n");
return 1;
}
if(stringsIguais(e2->nome,"homem")){
printf("Um barulho ensurdecedor enche a sala. O homem cai no chão, sem vida. Seu coração é tão velho que não consegue jogar seu sangue para fora de seu corpo.\n");
e2->def.objeto.lista[vivo].val = 0;
e1->ativo = False;
}
else if(stringsIguais(e2->nome,"espelho")){
printf("A arma acerta o espelho, mas não causa dano algum.\n");
e1->ativo = False;
}
else if(stringsIguais(e2->nome,"você")){
printf("Você aperta o gatilho. Depois disso, não há mais sentidos.\n");
e2->ativo = False;
e1->ativo = False;
return 1;
}
return 1;
}
int Falar(Elemento* e1, Elemento* e2){
int* instance = &(e1->def.objeto.lista[conversas].val);
if (e1->def.objeto.lista[0].val == 0){
printf("O homem não parece ser capaz de responde-lo\n");
return 0;
}
if((*instance)%4 == 0){
printf("Há muito tempo eu estou aqui. Tanto que a própria palavra já perdeu o significado. O único jeito que eu sei que ele passa é por que vejo as marcas em meu corpo.\n");
(*instance)++;
}
else if ((*instance)%4 == 1){
printf("Às vezes eu me questiono das escolhas que fiz. Nada parece ter sido suficiente.\n");
(*instance)++;
}
else if ((*instance)%4 == 2){
printf("Não aguento mais isto tudo. Não tem nada que eu posso fazer neste ponto. Não há mais esperança para mim.\n");
(*instance)++;
}
else if ((*instance)%4 == 3){
printf("Sozinho. Tanto tempo, sozinho. Me fez perceber as mentiras que sempre ouvi. Eu estou sozinho. Não há ninguém comigo.\n");
(*instance)++;
}
else printf("Ja disse tudo que tinha para falar...\n");
return 1;
}
int Beber(Elemento* e1, Elemento* e2){
if(!stringsIguais(e1->nome,"garrafa")) return 0;
printf("O líquido desce por você aquecendo todo seu corpo. Você se sente bem, confiante, feliz. 'Tô um BURRP pouco feliz', você diz. Não há uma coisa ruim em seu corpo neste momento.\n");
return 1;
}
int Comer(Elemento* e1, Elemento* e2){
if(stringsIguais(e1->nome,"cogumelos")){
printf("Repentinamente, todas as cores das salas se misturam e espalham como uma grande explosão. Os padrões aumentam, e sua mente transcende o plano físico. Tudo se enche de energia."
"É a sensação mais bonita que você já teve.\n");
return 1;
}
return 0;
}
int Deitar(Elemento* e1, Elemento* e2){
printf("Você se deita na cama e sente como se seu corpo tivesse sido transportado aos céus. Todos seus músculos relaxam, e sua mente fica leve. 'Poderia ficar aqui para sempre', pensa.\n");
return 1;
}
int Levantar(Elemento* e1, Elemento* e2){
printf("Com muito esforço, você cria a determinação para levantar da cama. Seu corpo se sente pesado.\n");
return 1;
}
int Pegar(Elemento* e1, Elemento* e2){
if(e2 == NULL) e2 = &personagem;
if(stringsIguais(e1->nome,"cogumelos"))
printf("Ao tocar no cogumelo, você sente todo seu corpo vibrar de animação, mesmo sem entender de onde vem o sentimento. Mas algo sobre suas cores o fazem sentir em outro mundo.\n");
else
printf("Agora você tem %s na sua mão.\n",e1->nome);
return(Tinsere(e2->conteudo, e1));
}
int Soltar(Elemento* e1, Elemento* e2){
if(Tretira(e2->conteudo, e1->nome)){
printf("%s não está mais na sua mão.\n",e1->nome);
return 1;
}
printf("Não dá pra soltar um objeto que nem está na sua mão...\n");
return 0;
}
int Quebrar(Elemento* e1, Elemento* e2){
if(e1->ativo){
e1->ativo = False;
printf("%s quebrado com sucesso", e1->nome);
return 1;
}
printf("Não dá pra quebrar o que já está quebrado...");
return 0;
}
int Gritar(Elemento* e1, Elemento* e2){
printf("AAAAA! Ninguém parece ouvir seus gritos desesperados.\n");
return 1;
}
int Chorar(Elemento* e1, Elemento* e2){
puts("Eu sei, isso é muito triste.\n"
"Mas suas lágrimas definitivamente não vão resolver o problema.\n");
return 1;
}
int Sentar(Elemento* e1, Elemento* e2){
puts("Agora você está sentado no chão. Vai chorar?\n");
return 1;
}
int Correr(Elemento* e1, Elemento* e2){
printf("Não tem para onde correr, nem se esconder.\n");
return 1;
}
void insereAcoes()
{
sala1.acoes = malloc(sizeof(fptr));
sala1.acoes[0] = Examinar;
personagem.acoes = malloc(5*sizeof(fptr));
personagem.acoes[0] = Gritar;
personagem.acoes[1] = Chorar;
personagem.acoes[2] = Sentar;
personagem.acoes[3] = Correr;
personagem.acoes[4] = Examinar;
quadro.acoes = malloc(sizeof(fptr));
quadro.acoes[0] = Examinar;
disco.acoes = malloc(6*sizeof(fptr));
disco.acoes[0] = Pegar;
disco.acoes[1] = Soltar;
disco.acoes[2] = Quebrar;
disco.acoes[3] = Tocar; //colocar no gramofone
disco.acoes[4] = Examinar;
gramo.acoes = malloc(3*sizeof(fptr));
gramo.acoes[0] = Desligar;
gramo.acoes[1] = Ligar;
gramo.acoes[2] = Examinar;
balao.acoes = malloc(5*sizeof(fptr));
balao.acoes[0] = Examinar;
balao.acoes[1] = Estourar;
balao.acoes[2] = Comer;
balao.acoes[3] = Pegar;
balao.acoes[4] = Soltar;
envelope.acoes = malloc(4*sizeof(fptr));
envelope.acoes[0] = Abrir;
envelope.acoes[1] = Colocar;
envelope.acoes[2] = Tirar;
envelope.acoes[3] = Examinar;
carta.acoes = malloc(2*sizeof(fptr));
carta.acoes[0] = Ler;
carta.acoes[1] = Examinar;
mascara.acoes = malloc(3*sizeof(fptr));
mascara.acoes[0] = Colocar;
mascara.acoes[1] = Tirar;
mascara.acoes[2] = Examinar;
pessoas.acoes = malloc(2*sizeof(fptr));
pessoas.acoes[0] = Interagir;
pessoas.acoes[1] = Examinar;
arma.acoes = malloc(2*sizeof(fptr));
arma.acoes[0] = Atirar;
arma.acoes[1] = Examinar;
espelho.acoes = malloc(sizeof(fptr));
espelho.acoes[0] = Examinar;
homem.acoes = malloc(2*sizeof(fptr));
homem.acoes[0] = Examinar;
homem.acoes[1] = Falar;
garrafa.acoes = malloc(2*sizeof(fptr));
garrafa.acoes[0] = Examinar;
garrafa.acoes[1] = Beber;
garrafa.acoes[2] = Quebrar;
cama.acoes = malloc(3*sizeof(fptr));
cama.acoes[0] = Examinar;
cama.acoes[1] = Deitar;
cama.acoes[2] = Levantar;
cogumelos.acoes = malloc(3*sizeof(fptr));
cogumelos.acoes[0] = Examinar;
cogumelos.acoes[1] = Comer;
cogumelos.acoes[2] = Pegar;
}