-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfases.c
88 lines (74 loc) · 3.72 KB
/
fases.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
// Inclui todas as funcionalidades das Fases
#include <stdio.h>
#include "fases.h"
// Criaçao da Fase
Fase* criarFase(int nivel, char* descricao, Monstro* listaMonstros)
{
Fase* novaFase = (Fase*)malloc(sizeof(Fase)); // Alocar memoria para a fase
if (!novaFase)
{
printf("Erro ao alocar memoria para a fase.\n");
exit(1);
}
novaFase->nivelFase = nivel; // Copia o nivel para a fase
strncpy(novaFase->descricao, descricao, sizeof(novaFase->descricao)); // Copia a descriçao para a fase
novaFase->descricao[sizeof(novaFase->descricao) - 1] = '\0'; // Garante que a string e terminada em '\0'
novaFase->monstros = listaMonstros; // Copia a lista de monstros para a fase
novaFase->proxima = NULL; // Inicializa a proxima fase como NULL
return novaFase; // Retorna a fase criada
}
// Cria todas as fases e monstros
Fase* criarTodasFases(int dificuldade)
{
// Criando 3 monstros para fase 1
// Nome, HP, Defesa, Acao, DanoAtaqueMonstro, DefesaParaAdicionarMonstro
Monstro* monstro1 = criarMonstro("Goblin Guerreiro", 1 * dificuldade, 0, DEFAULTMONSTRO, 2, 1);
Monstro* monstro2 = criarMonstro("Goblin Arqueiro", 1 * dificuldade, 0, DEFAULTMONSTRO, 2, 1);
Monstro* monstro3 = criarMonstro("Orc Guerreiro", 2 * dificuldade, 0, DEFAULTMONSTRO, 3, 2);
// Criando 3 monstros para fase 2
// Nome, HP, Defesa, Acao, DanoAtaqueMonstro, DefesaParaAdicionarMonstro
Monstro* monstro4 = criarMonstro("Hobgoblin", 2 * dificuldade, 0, DEFAULTMONSTRO, 3, 2);
Monstro* monstro5 = criarMonstro("Elfo Mago", 1 * dificuldade, 0, DEFAULTMONSTRO, 3, 1);
Monstro* monstro6 = criarMonstro("Succubus", 3 * dificuldade, 0, DEFAULTMONSTRO, 4, 2);
// Criando 2 monstros e o Boss para fase 3
// Nome, HP, Defesa, Acao, DanoAtaqueMonstro, DefesaParaAdicionarMonstro
Monstro* monstro7 = criarMonstro("Succubus", 3 * dificuldade, 0, DEFAULTMONSTRO, 4, 2);
Monstro* monstro8 = criarMonstro("Dragao", 3 * dificuldade, 0, DEFAULTMONSTRO, 5, 3);
Monstro* monstro9 = criarMonstro("Rei Demonio", 5 * dificuldade, 0, DEFAULTMONSTRO, 6, 4);
// Conectando os monstros da fase 1 em uma lista duplamente encadeada
monstro1->proximo = monstro2;
monstro2->anterior = monstro1;
monstro2->proximo = monstro3;
monstro3->anterior = monstro2;
// Conectando os monstros da fase 2 em uma lista duplamente encadeada
monstro4->proximo = monstro5;
monstro5->anterior = monstro4;
monstro5->proximo = monstro6;
monstro6->anterior = monstro5;
// Conectando os monstros da fase 3 em uma lista duplamente encadeada
monstro7->proximo = monstro8;
monstro8->anterior = monstro7;
monstro8->proximo = monstro9;
monstro9->anterior = monstro8;
// Criando as fases
// Nivel, Descriçao, Lista de monstros
Fase* fase1 = criarFase(1, "A caverna escura", monstro1);
Fase* fase2 = criarFase(2, "O calabouco da castelo", monstro4);
Fase* fase3 = criarFase(3, "Castelo do Rei Demonio", monstro7);
// Conectando as fases em uma lista simplesmente encadeada
fase1->proxima = fase2;
fase2->proxima = fase3;
fase3->proxima = NULL;
return fase1; // Retorna a primeira fase
}
// Libera a memoria de todas as fases
void liberarFases(Fase* fase)
{
while (fase != NULL)
{
Fase* proxima = fase->proxima; // Guarda a proxima fase
liberarMonstros(fase->monstros); // Libera os monstros da fase atual
free(fase); // Libera a memoria da fase
fase = proxima;
}
}