Skip to content

Latest commit

 

History

History
148 lines (103 loc) · 6.04 KB

README.md

File metadata and controls

148 lines (103 loc) · 6.04 KB

Invaders

GitHub repo size GitHub language count Bitbucket open issues Bitbucket open pull requests

Kamikazes se aproximando da nave do jogador

Desenvolvimento de um jogo baseado no Invaders Clássico, utilizando-se a biblioteca gráfica Raylib.

🎮 Introdução

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.

🧩 Ajustes e melhorias

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()

💻 Pré-requisitos

Antes de começar, verifique se você atendeu aos seguintes requisitos:

  • Compilador g++, para Windowns é recomendado o mingw32
  • O jogo é compatível com versões recentes de <Windows / Linux / MacOS>

🚀 Instalando e rodando o Invaders

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

🎯 Testes

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

📖 User Stories

Game

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.

Alien

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.

Ship

Como jogador, quero um Ship que eu posso controlar, permitindo-me navegar e interagir com o jogo.

Boss

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.

MotionObject

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.

Behaviour

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.

Bullet

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.

Fleet

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.

Texture

Como jogador, quero que uma Texture defina as imagens de todos os objetos do jogo, facilitando a identificação visual dos elementos do jogo.

🤝 Colaboradores

João Costa Lucca Alvarenga Lucas Pedras Lucas Santos Arthur Fissicaro