Desenvolvimento de um jogo baseado no Invaders Clássico, utilizando-se a biblioteca gráfica Raylib.
Este projeto foi desenvolvido para a disciplina de Programação e Desenvolvimento de Software II, apresentando a implementação de um jogo inspirado no clássico Space Invaders. Assim, com o objetivo de aplicar e consolidar os conceitos e técnicas aprendidos durante o semestre letivo, o trabalho abrange uma ampla gama de tópicos fundamentais no desenvolvimento de software.
A principal ênfase aqui encontrada está na utilização de conceitos como Tipos Abstratos de Dados, Prática de Containers, Modularização, Programação Orientada à Objetos, Modelagem, Polimorfismo, Herança e Testes de Unidade. Esses conceitos serão explorados de forma integrada, permitindo uma compreensão mais profunda de como aplicar cada um deles no desenvolvimento de um software completo.
Para aprimorar a compreensão e a testabilidade do código, adotou-se uma estratégia de separação entre a lógica do jogo e as funcionalidades de desenho fornecidas pela biblioteca raylib. Dessa forma, a pasta "program" foi dedicada a conter o código responsável por elucidar a lógica por trás dessas funcionalidades.
Devido à forte dependência do contexto gráfico e das interações com a janela do jogo nas funcionalidades de desenho da biblioteca raylib, a criação de testes unitários convencionais torna-se desafiadora. Além disso, essas partes específicas do código geralmente envolvem a exibição visual na tela, o que inviabiliza a aplicação direta de testes unitários.
Assim, para assegurar a testabilidade e a clareza dos testes, optou-se por exemplificar explicitamente a lógica das funcionalidades mais relevantes do jogo, sem recorrer diretamente às funções de desenho da biblioteca raylib.
Durante o desenvolvimento do projeto, foram realizadas atualizações específicas nas seguintes tarefas:
- Testes de unidade
- Implementação do objeto bullet
- Funções de colisão e destruição de objetos
- Refatorar as classes de comportamento
- Implementar classe Fleet para refatorar Game::_build_objects()
Antes de começar, verifique se você atendeu aos seguintes requisitos:
- Compilador
g++
, para Windowns é recomendado omingw32
- O jogo é compatível com versões recentes de
<Windows / Linux / MacOS>
Para instalar o Invaders, siga estas etapas:
Clonagem do Repositório:
git clone https://github.com/pds2/20231-team-11.git
Linux e macOS:
make
Windows:
mingw32-make
Para gerar o executável de teste, utilize o seguinte comando:
g++ -std=c++11 ./logic/src/*.cpp ./logic/program/*.cpp -Iinclude -Ithirdy_party -o teste
Como jogador, quero um Game baseado em Galaxian que crie todos os objetos do jogo, incluindo uma nave controlada pelo jogador e inimigos para interagir.
Como jogador, quero que um Alien que se movimente, com uma pontuação diferente para cada tipo de alien, proporcionando interações únicas com base em seu comportamento e textura.
Como jogador, quero um Ship que eu posso controlar, permitindo-me navegar e interagir com o jogo.
Como jogador, quero um alien especial chamado Boss que tenha uma barra de vida e não possa ser morto com um único tiro, proporcionando uma experiência de jogo mais desafiadora e estratégica. Ele deve ter seu próprio comportamento e textura distintiva.
Como jogador, quero um MotionObject que esteja relacionado a todos os objetos em movimento do jogo, permitindo-me definir sua velocidade, aceleração e posição com precisão.
Como jogador, quero um Behaviour que possa modificar a velocidade, aceleração e/ou posição de um objeto, permitindo comportamentos e movimentos personalizados para os MotionObjects.
Como jogador, quero que uma Bullet seja um MotionObject que se relacione com outros objetos em movimento, com o objetivo de causar dano ou destruí-los.
Como jogador, quero uma Fleet que seja um vetor de aliens, permitindo definir a quantidade de aliens que aparecem na tela para interação durante o jogo.
Como jogador, quero que uma Texture defina as imagens de todos os objetos do jogo, facilitando a identificação visual dos elementos do jogo.
João Costa | Lucca Alvarenga | Lucas Pedras | Lucas Santos | Arthur Fissicaro |