- Instruções para compilar e executar:
- Sobre o jogo:
- Recursos implementados;
- Recursos do c++ usados;
- Recursos de bibliotecas externas usados.
- Instale o
Make, no caso doWindows, use esse aqui (que é o compatível); - Em algumas máquinas
Linuxpode ser necessário instalar o sfml, mas nós utilizamos a biblioteca já compilada noUbuntupara não precisar instalar osfmlnele; - Instale o
OpenAl, disponível aqui:- No
Ubuntutalvez não precise, mas, por garantia, basta instalar o pacotelibopenal-devexecutando o comando:sudo apt install libopenal-dev
- No
- Dentro da raiz do projeto, execute
make deve irá compilar e executar o jogo.
make- irá compilar tanto o jogo como os testes;make test- irá compilar e executar os testes;make dev- irá compilar e executar o jogo;make run- irá executar o jogo (se compilado);make compile- irá compilar o jogo;make clean- irá limpar o_build;make valgrind- irá compilar e executar o jogo usando ovalgrind(fica bem mais lento e precisa ter ovalgrindinstalado).
Defenda sua base para sobreviver e passar por hordas inteiras de inimigos que querem sua cabeça nesse jogo produzido como projeto da disciplina de Linguagem de Programação ofertada na UFRN.
Deixamos um vídeo pronto mostrado como é o jogo. Clique aqui ou na imagem para acessá-lo.
Antonio Henrique Barbosa Lima;Arthur Queiroz Pires de Farias;Lucas Marcel Silva de Brito;Pedro Paulo Galvão Galindo de Oliveira.
Exceto pela música, sons e fontes, todos os assets utilizados no jogo foram feitos por nós. Quanto ao restante do material, agradecemos:
- Pixeloid: pelas fontes;
- Jdsherbert: por alguns sons;
- Shapeforms: pela música e por alguns sons.
Esperamos não ter esquecido ninguém. Deixamos as licenças dentro do repositório.
Proteja sua base, saia para coletar munição e vida quando necessário, junte moedas derrotando inimigos e faça a melhor sequência de melhorias que conseguir; evite atirar em direção à própria base quando estiver fora dela, pois suas balas também causarão dano a ela; evite o máximo de dano que puder fora da base e saiba tirar proveito das suas sentinelas.
Botão direito do mouse: andar;Q/Botão esquerdo do mouse: atirar;R: recarregar;Esc: pausar.
Observação: podem ser compradas mais de uma vez na mesma oferta, mas o preço aumenta.
- Cura imediatamente
25%de vida; - Repara imediatamente
25%da base; - Restaura imediatamente
25%da munição.
- Aumenta a vida em:
+10/+10/+20/+30/+40/+40pontos.
- Aumenta a vida da base em:
+10/+10/+20/+30/+40/+40/+50pontos.
- Aumenta a munição do pente em:
+2/+2/+2/+2balas.
- Aumenta a munição em:
+2/+2/+4/+4/+6/+6balas.
- Aumenta a velocidade de disparo em:
+10%/+20%/+30%/+40%.
- O reparo da base fica:
+10%/+15%/+20%/+25%/+30%/+35%/+40%/+45%/+50%rápido.
- A recuperação de vida fica:
+10%/+15%/+20%/+25%/+30%/+35%/+40%rápida.
- Aumenta a velocidade de disparo das sentinelas em:
+20%/+20%/+30%/+40%.
- Ganha
20%de chance de não consumir bala do pente (inclui sentinelas); - Disparos contra à própria base não causam mais dano;
- Balas ricocheteadas causam dano aos inimigos.
Vida: o jogador, a base e os inimigos começam com100pontos de vida que são destruídos/mortos quando a vida chega 0;Munição: o jogador tem uma quantidade limitada de munição no pente. Quando a munição do pente acaba ele pode recarregar apertandoRe usando a munição armazenada na base, que também é limitada. Enquanto recarregar ele não pode atirar;Movimentação: o jogador pode se movimentar definindo um destino clicando com obotão direito do mouse. Os inimigos por padrão seguem o jogador quando ele está fora da base, quando ele está dentro eles priorizam atacar a base;Desbravador (pathfinding): as torres localizadas no vértices da base são consideradas obstáculos para a movimentação do jogador, assim como a base é considerada um obstáculo para os inimigos;Base: a base é uma área segura para o jogador, os muros dela refletem as balas vindas de fora, mas sem deixar de tomar dano. O jogador pode sair e entrar livremente dela e nenhum inimigo pode entrar nela. As torres da base recebem dano reduzido;Disparo: o jogador pode disparar uma bala na direção do mouse ao custo de sua munição apertando/segurando a teclaQou obotão esquerdo do mouse. Os inimigos também disparam, mas não possuem limite de munição;Otimização: balas fora do mapa são destruídas e as páginas de texturas só são carregadas uma única vez;Sentinelas: a base acompanha um total de 4 sentinelas que atacam os inimigos que se aproximam delas automaticamente. Elas são extremamente lentas e consomem a munição do jogador que não está no pente da arma dele, mas causam bastante dano e podem receber melhorias na loja;Hordas: o jogo é dividido 15 hordas, cada uma mais difícil que a anterior. O jogador vence o jogo se sobreviver a todas elas. Durante uma horda uma quantidade fixa de inimigos surgem nas borda do mapa aleatoriamente, quando todos são derrotados a horda termina;Reparo da base: o jogador repara a base automaticamente enquanto estiver dentro dela, mas é uma ação lenta. Se ele estiver em movimento a velocidade do reparo é diminuída;Espólios: ao derrotar um inimigo, ele tem chance de deixa cair um kits devidaoumunição. Os kits somem após um tempo;Loja: no final de cada horda o jogador pode comprar melhorias e/ou benefícios usando moedas. O jogador recebe uma quantidade de moedas quando derrota um inimigo e que pode variar um pouco;Pausa: o jogo pode ser pausado apertandoEsc. Um menu aparecerá dando algumas opções, entre elas a de fechar o jogo;Resoluções: no menu de pausa há um botão de opções que leva a um menu de configuração de resolução. Há três resoluções configuradas e a opção de tela cheia.
vector:- O
vector, uma implementação daTAD sequência, é usado nolist.hpppara armazenar um template de uma lista de ponteiros.
- O
map:- O
map, uma implementação daTAD dicionário, é usado noshop.hpppara armazenar as informações dos itens da loja através dos seus nomes.
- O
stack:- O
stack, uma implementação daTAD sequência, é usado nopathfinder.hpppara traçar os pontos de destino.
- O
cmath:- As funções
sinf,cosf,atan2efmodsão utilizadas nomath.cpppara implementar funções comoGame::Math::pointInRadiuseGame::Math::pointDirection, responsáveis por relacionar ângulos e pontos.
- As funções
iomanip;sstream;functional:- Fornece recursos para passar funções como parâmetros ou atributos, útil em alguns casos. Usamos principalmente para construir os itens da loja do jogo sem precisar usar muita herança no
items.cpp.
- Fornece recursos para passar funções como parâmetros ou atributos, útil em alguns casos. Usamos principalmente para construir os itens da loja do jogo sem precisar usar muita herança no
localeecodecvt:- Usadas para utilizarmos textos armazenados no formato de UTF-8.
stdexcept:- Usada para adicionar erros customizados.
time.h:- Usada para gerar uma
seedemlocal.cppa ser usada nosrand.
- Usada para gerar uma
SFML- recursos da gráficos e sonoros doSFML;gtestegmock- bibliotecas dogoogletestusadas nostests.