Este projeto tem como objetivo criar um framework para jogos de interpretação de papéis (RPG) baseado nos princípios da arquitetura SOLID e na Programação Orientada a Objetos (POO). O universo do jogo, conhecido como Trybers and Dragons - T&D, é habitado por várias raças e arquétipos, cada um com suas características únicas.
Certifique-se de atender aos seguintes requisitos:
- O seu
docker-compose
deve estar na versão 1.29 ou superior. Se necessário, consulte a documentação para atualizar.
Para iniciar os serviços Node.js e MySQL em containers Docker, siga os passos abaixo:
-
Abra o terminal.
-
Navegue até o diretório raiz do projeto onde está localizado o arquivo
docker-compose.yml
. -
Execute o seguinte comando para construir e iniciar os containers:
docker-compose up -d --build
Certifique-se de que o MySQL local não esteja em execução na porta padrão (3306) ou faça as adaptações necessárias nas configurações se você desejar utilizar a aplicação em containers.
Para acessar o terminal interativo do container onde a aplicação está sendo executada, utilize o seguinte comando:
docker exec -it blogs_api
Isso permitirá que você acesse o terminal dentro do container em execução.
Dentro do container, você pode instalar as dependências necessárias com o seguinte comando:
npm install
Todos os comandos disponíveis no package.json (como npm start, npm test, npm run dev, etc.) devem ser executados dentro do container, ou seja, no terminal aberto após a execução do comando docker exec mencionado acima.
O Git dentro do container não virá configurado com suas credenciais. Você pode optar por fazer commits fora do container ou configurar suas credenciais do Git dentro do container conforme necessário.
Evite rodar o comando npm audit fix, pois ele atualizará várias dependências do projeto e pode gerar conflitos com o avaliador.
A extensão "Remote - Containers" do Visual Studio Code é recomendada para desenvolver sua aplicação diretamente no container Docker, como se estivesse trabalhando com seus arquivos locais.
A classe Race
representa as raças dos seres no universo do jogo. Cada raça tem um nome e destreza.
- O arquivo deve ser criado em
src/Races/
e se chamarRace.ts
. - A classe
Race
deve ter atributos privadosname
edexterity
, ambos inicializados no construtor. name
deve ser do tipo string, edexterity
deve ser do tipo número.- Os atributos
name
edexterity
podem ser lidos, mas não podem ser alterados. - A classe
Race
deve ter um método estáticocreatedRacesInstances
que retorna o número de instâncias criadas a partir de classes que herdam deRace
. - A classe
Race
deve ter um getter abstrato chamadomaxLifePoints
que retorna um número.
Devem ser criadas classes que representam raças específicas no jogo, cada uma com seu máximo de pontos de vida.
- As classes
Dwarf
,Elf
,Halfling
eOrc
devem ser criadas em arquivos com esses nomes emsrc/Races/
. - Cada raça deve possuir um máximo de pontos de vida inicializado no construtor.
- Não se esqueça de implementar os métodos necessários após estender a classe abstrata
Race
.
A interface Energy
representa a energia usada pelos seres no jogo, que pode ser "mana" ou "stamina."
- Crie o arquivo
Energy.ts
na raiz do diretóriosrc/
. - A interface
Energy
deve ter atributostype_
(do tipoEnergyType
) eamount
(do tipo número). EnergyType
deve ser exportado.type_
pode ter os valores 'mana' ou 'stamina'.
A classe Archetype
representa os arquétipos dos personagens no jogo, com um nome, poder de ataque especial e custo de energia.
- O arquivo
Archetype.ts
deve ser criado emsrc/Archetypes/
. - A classe
Archetype
deve ter atributos privadosname
,special
ecost
, inicializados no construtor. name
deve ser do tipo string,special
ecost
devem ser do tipo número.- Os atributos
name
,special
ecost
podem ser lidos, mas não podem ser alterados. - A classe
Archetype
deve ter um método estáticocreatedArchetypeInstances
que retorna o número de instâncias criadas a partir de classes que herdam deArchetype
. - A classe
Archetype
deve ter um getter abstrato chamadoenergyType
que retorna umEnergyType
.
Devem ser criadas classes que representam arquétipos específicos no jogo, cada um com sua habilidade única de causar dano.
- As classes
Mage
,Necromancer
,Warrior
eRanger
devem ser criadas em arquivos com esses nomes emsrc/Archetypes/
. - Cada arquétipo possui uma habilidade de causar dano inicializada no construtor.
- Não se esqueça de implementar os métodos necessários após estender a classe abstrata
Archetype
.
A interface Fighter
representa seres capazes de lutar no jogo, com atributos como pontos de vida, força, defesa e energia.
- Crie uma interface chamada
Fighter
no arquivoFighter.ts
emsrc/Fighter/
. - A interface deve ter atributos
lifePoints
,strength
,defense
eenergy
(do tipoEnergy
). - A interface deve ter métodos
attack()
,special()
,levelUp()
ereceiveDamage()
.
A classe Character
representa personagens no jogo, compostos por uma raça e um arquétipo.
- O arquivo deve ser criado na raiz do diretório
src/
e se chamarCharacter.ts
. - A classe deve implementar a interface
Fighter
. - A classe
Character
deve ter atributos privadosrace
,archetype
,maxLifePoints
,lifePoints
,strength
,defense
,dexterity
,energy
ename
, todos inicializados no construtor. race
,archetype
,maxLifePoints
,lifePoints
,strength
,defense
,dexterity
,energy
ename
podem ser lidos, mas não podem ser alterados.- A classe
Character
deve implementar os métodos da interfaceFighter
.
A interface SimpleFighter
representa seres simples lutadores no jogo, sem defesa avançada ou ataques especiais.
- Crie uma interface chamada
SimpleFighter
no arquivoSimpleFighter.ts
emsrc/Fighter/
. - A interface deve ter atributos
lifePoints
estrength
. - A interface deve ter métodos
attack()
ereceiveDamage()
.
- Certifique-se de que todos os arquivos e classes estão organizados em suas respectivas pastas e siga as instruções de exportação/importação conforme especificado nos requisitos.
- Utilize os princípios da Programação Orientada a Objetos e os princípios SOLID para criar classes e interfaces de forma coesa e modular.
- Você pode usar a função
getRandomInt
do arquivoutils.ts
para gerar valores aleatórios quando necessário.
Agora, embarque nesta jornada e explore o mundo de Trybers and Dragons - T&D, completando missões e enfrentando desafios!