Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia da Universidade de Coimbra Mini-Projecto de PAII Ano Lectivo 2000/01 Implementação do Jogo Caverna 1 Descrição do Jogo No jogo caverna, o jogador controla uma nave que se desloca no interior de uma caverna. O objectivo é o de chegar o mais longe possível na caverna, sendo a pontuação do jogador calculada em função do distância horizontal percorrida até ao momento. A nave desloca-se horizontalmente a uma velocidade constante. O jogador pode controlar o deslocamento vertical através de uma única tecla. Ao primir a tecla a nave sobe a uma velocidade constante. Quando a tecla não é primida a nave desce por acção da gravidade, também a uma velocidade constante (a gravidade no mundo da caverna não é acelerativa). Este é o único mecanismo de que o jogador dispõe para controlar o movimento da nave ao longo do percurso, por forma a impedir a sua colisão, quer contra as paredes da caverna, quer contra os obstáculos que vão surgindo. O movimento da nave é observado através de um corte transversal da caverna. A posição horizontal da nave corresponde sempre ao centro da janela de jogo, sendo o resto do cenário a ser deslocado para dar a sensação de movimento. A posição vertical da nave varia consoante o seu movimento. A nave deixa um rasto atrás de si que indica as posições que tomou anteriormente no seu percurso. As paredes apresentam uma forma irregular, mas apresentam a cada instante um espessura máxima. A espessura máxima das paredes da caverna vai aumentando ao longo do trajecto, sendo que a área navegável é tanto menor quanto mais o jogador avança. Uma dificuldade adicional é dada pelo aparecimento aleatório de obstáculos na área navegável. Estes obstáculos são rectângulos como se pode ver na figura. Os obstáculos devem ser colocados por forma a se encontrarem completamente no interior da área 1
Obstaculo Nave Espessura da Espessura da Rasto da Caverna navegável (sem sobreposição com as paredes da caverna). Além disso nunca devem ser colocados de tal forma que tornem a passagem da nave impossível. As 10 melhores pontuações obtidas deverão ser guardadas num ficheiro com os respectivos nomes dos jogadores. No final de cada jogo deverão ser apresentados os 10 melhores resultados para o utilizador avaliar o seu desempenho. 2 Funcionalidades Adicionais Poderão ainda ser implementadas as seguintes funcionalidade adicionais: Obstáculos móveis, ou seja, obstáculos que se movem verticalmente a uma velocidade constante entre as paredes da caverna. Tiros de laser. Através destes tiros, o jogador pode destruir obstáculos ou zonas salientes das paredes. Os tiros deverão estar disponíveis em número limitado por forma a manter o desafio do jogo. Bónus. Os bónus consistem em objectos que o jogador pode recolher ao longo do seu percurso. Os bónus poderão atribuir mais tiros, mais pontos, mais vidas ou outro tipo de regalias. 2
Níveis. Em vez de existir uma única caverna, o jogador deverá progredir ao longo de cavernas de um nível de dificuldade cada vez maior. Armadilhas. As armadilhas apresentam o mesmo aspecto gráfico que os Bónus. No entanto, enquanto estes últimos oferecem mais valias ao utilizador, as armadilhas provocam um conjunto de efeitos indesejáveis como a redução da espessura da parede, o aumento da velocidade da nave ou o aparecimento temporário do efeito espelho (o deslocamento passará a efectuar-se em sentido inverso). 3 Estrutura do Programa A implementação do jogo deverá seguir a estrutura de classes descrita na figura. Poderão ser acrescentadas mais classes para as funcionalidade adicionais, ou sempre que necessário. javax.swing.jframe Obstaculo Janela Caverna Nave Vista s java.awt.canvas A classe Caverna é a classe principal, responsável por controlar o jogo e reagir aos comandos do utilizador. A classe Janela define a janela do jogo e deriva directamente de java.awt.frame. A janela contém a classe Vista, que deriva de java.awt.canvas e é responsável por exibir o aspecto da caverna a cada momento. Alem disso existe uma classe para cada objecto do jogo (paredes da caverna, obstáculos, nave). Estas classes devem conter métodos que permitam realizar as operações necessárias sobre estes objectos assim como um método para desenhar o estado actual do objecto na vista. 3
4 Metas Meta Aula Data Tarefa 1 12 02/04 e 03/04 Estruturação 2 16 23/04 e 24/04 Codificação das principais classes/estruturas 3 19 14/05 e 15/05 Codigo completo a funcionar sem interface 4 22 24/05 e 25/05 Codigo completo a funcionar com interface Entrega - 31/05 Trabalho completo + Relatório Meta 1 Nesta aula, far-se-á com cada grupo a primeira discussão sobre o que irá ser o projecto. Serão dadas indicações com o objectivo de prevenir alguns erros comuns. Os alunos deverão entregar um documento onde digam qual o grupo formado, que especificações adicionais pretedem implementar e o cabeçalho em Javadoc que irão colocar em todos os ficheiros que forem construir. Meta 2 Os alunos deverão entregar a codificação das classes sugeridas no enunciado do projecto, bem como de outras classes que irão construir. Deverão também apresentar as principais estruturas de dados utilizadas. Cada classe deverá conter os campos, métodos de acesso e comentários explicativos em Javadoc. Deverão também apresentar os métodos relacionados directamente com cada estrutura. Meta 3 Nesta meta, cada grupo deverá apresentar o seu jogo a funcionar sem parte gráfica (apenas output dos valores das variáveis para o ecran em cada momento). Meta 4 Finalmente, o jogo deverá estar totalmente construido na meta 4, incluindo gráficos, acesso a ficheiros, robustez, jogabilidade. 5 Avaliação O trabalho deverá ser realizado em grupos de dois alunos da mesma turma prática. Cada grupo deve implementar as funcionalidades de base do jogo, assim como pelo menos duas funcionalidades adicionais. Além disso deve elaborar um relatório em que descreva as principais estruturas de dados e algoritmos utilizados, que não deverá exceder as 10 páginas. Os critérios de avaliação serão os seguintes: Correção da implementação das funcionalidades base do jogo; Correção da implementação de duas funcionalidades adicionais; 4
Qualidade do código (boa orientação a objectos, boa indentação, comentários segundo as convenções utilizadas na disciplina e com suporte ao javadoc); Qualidade do relatório (claro, completo, conciso e bem estruturado); Desempenho do grupo na apresentação oral e defesa do projecto. Os alunos deverão ter o cuidado de ir cumprindo as metas pré-estabelecidas, não se limitando apenas à entrega do trabalho final. Poderão ser atribuídos bónus pela implementação de funcionalidades adicionais além das duas exigidas (mesmo que não constem da lista anteriormente apresentada, mas as duas exigidas deverão pertencer a esta lista). 6 Apresentação do Projecto Cada grupo deverá entregar na secretaria o relatório impresso, acompanhado pelo código do jogo (ficheiros.java) em formato digital - disquete, CD ou zip. O jogo deverá compilar e executar correctamente em JDK 1.3.x. Os alunos deverão apresentar e defender o seu projecto em data a definir, e as classificações serão atribuidas individualmente. O prazo de entrega do projecto é 31.5.2001 (quinta-feira). Bom trabalho. 5