Projeto 1 - Space Invaders

Problema

Sua equipe resolve juntar esforços com um empreendedor do setor de TI de Feira de Santana, Marcus Pereira, empresário que acredita na inventividade local para abrir novos espaços no mercado.  Agora, ele percebe que há um filão na área de games, tanto para desktop como para dispositivos móveis. Ele tem uma empresa na área de sistemas de informação e seus produtos são conhecidos pela boa qualidade e pela capacidade de atualização rápida (boa manutenabilidade).

Apaixonado por design patterns, Marcus decide propor a vocês, que ainda não demonstraram tanta experiência no desenvolvimento de games, uma aposta. Ele se dispõe a bancar a sua equipe por um período de algumas semanas para vocês desenvolverem uma nova versão do Space Invaders, um jogo que Marcus jogou muito na adolescência. Ele explica para vocês: “Se vocês fizerem uma versão de Space Invaders em Java, será um ótimo começo. Eu acho que vocês são bons programadores, mas, na hora de fazer jogos, vocês precisam estar preparados para lidar com várias plataformas, saber separar a lógica do jogo da apresentação, saber usar os padrões que são disseminados na área de jogos. Que tal se vocês fizessem um software que mostra duas visões simultâneas do jogo, uma em baixa (320x180) e outra em alta resolução (800x600)? Assim, ficaria mais fácil, no futuro, mover o jogo para outras plataformas. E, com a experiência adquirida, vocês vão ser capazes de fazer seu próprio engine de games”.

“Um dos problemas que eu vejo nesta área é que os desenvolvedores escolhem os engines pela facilidade de usar, mas ignoram o que está por trás dos engines. Eu já dei uma olhada em alguns, e está tudo recheado de design patterns. Então, seria uma boa se vocês fizessem o código de vocês em Java e aprendessem a usar os patterns mais comuns nesta área de games. E, pelo que eu estava vendo, vários desses patterns são os mesmos que eu uso em nossos sistemas”.

“Agora, eu quero ver mesmo se vocês sabem trabalhar em equipe. Coloquem o software, desde o início em um repositório de software. Pode ser em Git, pode ser em Subversion, não importa, quero ver todo mundo lá trabalhando, cada um com suas contribuições. Coloca meu nome lá também, para eu ver o que vocês estão fazendo. Ah, sim, e mantém esse software testado direitinho com JUnit”.

“No final, vocês vão ver: se fizerem um código bacana, a gente faz uma sociedade, meio a meio. Eu garanto manter vocês por dois anos, até os nossos games começarem a fazer dinheiro.”

Inspirados por esta proposta tentadora e pela garantia do pão por dois anos, vocês decidem aceitar a aposta. Será que vai dar certo?

Produto

Seu grupo deve se cadastrar em um repositório de software, GitHub ou SourceForge,  usando um login para cada membro do grupo. Além de cadastrar o grupo com permissão de escrita, vocês devem cadastrar os professores também em seu projeto, dando permissão de leitura a eles (eles enviarão email com login deles nos repositórios). Este cadastro vale um ponto na nota final do projeto e deve ser enviado, no máximo, até o dia 03/04/14.

O jogo desenvolvido deve usar, pelo menos: dois padrões de projeto arquiteturais (Observer e MVC), dois padrões criacionais (sendo ao menos um deles uma Abstract Factory ou um Factory Method, o outro é livre), dois padrões estruturais e três padrões comportamentais.

O projeto será avaliado tanto pelo uso adequado dos padrões de projeto para resolver problemas concretos, como pela qualidade do jogo para o usuário (jogabilidade, semelhança com o Space Invaders original em termos de funcionalidades, fases). Será avaliada a participação dos membros da equipe pelo código que cada um envia ao repositório.

O projeto completo deve ser entregue até o dia 14/05/2014 e uma cópia compactada da versão final do projeto deve ser enviada aos professores por email ou dropbox.