projeto_COO_2015.pdf

2
Projeto de COO - 1ºsemestre/2015 Refatoração do código de um jogo Descrição Este projeto consiste em realizar a refatoração do código de um jogo, disponibilizado no arquivo ProjetoCOO.zip, de modo a aplicar diversos conceitos estudados na disciplina Computação Orientada a Objetos. O jogo, trata-se de um shoot 'em up (http://en.wikipedia.org/wiki/Shoot_'em_up ) vertical bastante simples, sem acabamento (não possui tela de título, placar, vidas, fases, chefes, power-ups, etc) e que roda de forma indefinida (até que o jogador feche a janela do jogo). Embora funcione, seu código não foi elaborado seguindo bons princípios de orientação a objetos. Apesar de ser escrito em Java, o código foi elaborado seguindo um estilo de programação estruturada e mesmo assim não muito bem feito, com muita repetição de código, havendo enumeras oportunidades de melhoria. Há três principais aspectos do código que devem ser melhorados na refatoração do código: Aplicação de princípios de orientação a objetos, através da definição de uma boa estrutura de classes, interfaces e hierarquia de classes/interfaces. Uso da API de coleções do Java ao invés de arrays para manter/gerenciar o conjunto de informações relativas às entidades do jogo (inimigos, projéteis, etc). Aplicação de padrões de projeto, com o objetivo de tornar a extensão/manutenção do código mais fácil e flexível. Devem ser aplicados pelo menos 2 padrões de projeto (observação: o uso de alguma biblioteca/API do Java que implementa um determinado padrão não conta como aplicação de um padrão). O código do jogo é composto por dois arquivos fonte: Main.java e GameLib.java. No primeiro arquivo está implementada toda a lógica do jogo, enquanto o segundo implementa uma mini biblioteca com recursos úteis no desenvolvimento de jogos: inicialização da interface gráfica, desenho de figuras geométricas e verificação de entrada através do teclado. O foco da refatoração do código deve ser a classe Main. Você pode assumir que a classe GameLib é uma caixa-preta à qual você não tem acesso ao fonte (como se realmente fosse uma biblioteca feita por terceiros) e portanto ela não precisa ser trabalhada na refatoração, apenas utilizada. Contudo, se por algum motivo você desejar modificá-la, para melhorá-la ou aplicar algum padrão de projeto, fique à vontade também. Além da refatoração do código, você também deve implementar: Um novo tipo de inimigo que deve apresentar comportamentos de movimento e de disparo de projéteis que sejam diferentes dos comportamentos apresentados pelos dois tipos de inimigos já presentes no jogo. Power-ups: itens que aparecem na tela de jogo e quando coletados pela nave do jogador modificam o comportamento de disparo da mesma. Devem ser implementados dois tipos de power-ups diferentes.

Transcript of projeto_COO_2015.pdf

  • Projeto de COO - 1semestre/2015

    Refatorao do cdigo de um jogo

    Descrio

    Este projeto consiste em realizar a refatorao do cdigo de um jogo, disponibilizado no arquivo ProjetoCOO.zip, de modo a aplicar diversos conceitos estudados na disciplina Computao Orientada a Objetos. O jogo, trata-se de um shoot 'em up (http://en.wikipedia.org/wiki/Shoot_'em_up) vertical bastante simples, sem acabamento (no possui tela de ttulo, placar, vidas, fases, chefes, power-ups, etc) e que roda de forma indefinida (at que o jogador feche a janela do jogo).

    Embora funcione, seu cdigo no foi elaborado seguindo bons princpios de orientao a objetos. Apesar de ser escrito em Java, o cdigo foi elaborado seguindo um estilo de programao estruturada e mesmo assim no muito bem feito, com muita repetio de cdigo, havendo enumeras oportunidades de melhoria. H trs principais aspectos do cdigo que devem ser melhorados na refatorao do cdigo:

    Aplicao de princpios de orientao a objetos, atravs da definio de uma boa estrutura de classes, interfaces e hierarquia de classes/interfaces.

    Uso da API de colees do Java ao invs de arrays para manter/gerenciar o conjunto de informaes relativas s entidades do jogo (inimigos, projteis, etc).

    Aplicao de padres de projeto, com o objetivo de tornar a extenso/manuteno do cdigo mais fcil e flexvel. Devem ser aplicados pelo menos 2 padres de projeto (observao: o uso de alguma biblioteca/API do Java que implementa um determinado padro no conta como aplicao de um padro).

    O cdigo do jogo composto por dois arquivos fonte: Main.java e GameLib.java. No primeiro arquivo est implementada toda a lgica do jogo, enquanto o segundo implementa uma mini biblioteca com recursos teis no desenvolvimento de jogos: inicializao da interface grfica, desenho de figuras geomtricas e verificao de entrada atravs do teclado.

    O foco da refatorao do cdigo deve ser a classe Main. Voc pode assumir que a classe GameLib uma caixa-preta qual voc no tem acesso ao fonte (como se realmente fosse uma biblioteca feita por terceiros) e portanto ela no precisa ser trabalhada na refatorao, apenas utilizada. Contudo, se por algum motivo voc desejar modific-la, para melhor-la ou aplicar algum padro de projeto, fique vontade tambm.

    Alm da refatorao do cdigo, voc tambm deve implementar:

    Um novo tipo de inimigo que deve apresentar comportamentos de movimento e de disparo de projteis que sejam diferentes dos comportamentos apresentados pelos dois tipos de inimigos j presentes no jogo.

    Power-ups: itens que aparecem na tela de jogo e quando coletados pela nave do jogador modificam o comportamento de disparo da mesma. Devem ser implementados dois tipos de power-ups diferentes.

  • Alm da refatorao do cdigo, faz parte do trabalho a elaborao de um relatrio no qual devem ser documentadas:

    Suas crticas ao cdigo original do jogo. Descrio e justificativa da nova estrutura de classes/interfaces adotada. Descrio de como a API de colees foi utilizada. Descrio dos padres de projetos adotados e justificativa para a aplicao dos mesmos.

    Observaes sobre o uso da API de colees

    Na verso original do cdigo, feito uso extensivo de arrays para gerenciar conjuntos de informaes relacionados s diversas entidades do jogo (inimigos, projteis, etc). Devido ao fato de arrays serem estruturas de armazenamento estticas, todos os arrays so alocados com tamanhos fixos e suas posies so reutilizadas sempre que uma entidade relacionada a determinado ndice torna-se inativa (quanto sai da tela, no caso dos inimigos e projteis, ou quando abatida pelo jogador, no caso dos inimigos).

    Fazendo-se bom uso da API de colees do Java, para armazenar e gerenciar os conjuntos de entidades, a reutilizao de posies deixa de ser necessria pois todas as colees implementadas pelo Java so dinmicas. Contudo importante no esquecer de remover as entidades que se tornam inativas da coleo que as armazena a fim de se evitar vazamentos de memria durante a execuo do jogo.

    Entrega

    Este projeto pode ser feito em grupos de at 4 pessoas. Deve ser entregue:

    Cdigo fonte refatorado. Relatrio (em formato PDF).

    A entrega dever ser feita pelo TIDIA-Ae, at o dia 01/07/2015. Entregue um nico arquivo ZIP contendo tanto o cdigo refatorado quanto o relatrio.

    Boa diverso!