Engenharia DEIDepartamento Informática Morro do Lena, Alto Vieiro Apart. 4163 2401 951 Leiria Tel.: +351 244 820 300 Fax.: +351 244 820 310 E-mail: estg@estg.iplei.pt http://www.estg.iplei.pt Programação III Engenharia Informática e Comunicações Trabalho Prático 1ª Etapa 1. DESCRIÇÃO DO PROBLEMA Um dos tipos de jogos mais explorados no universo dos videojogos, são os jogos de plataformas. Neste tipo de jogos, existe um herói com um objectivo específico, que percorre as plataformas de um nível na recolha de artefactos, evitando colidir com os seus inimigos. Um desses jogos é o Fury of the Furries, onde o objectivo é controlar o Tiny (herói do jogo) através de vários níveis, evitando os objectos que o podem destruir e apanhando objectos que favoreçam a missão de encontrar o caminho para o fim de cada nível. O Tiny pode andar, correr e saltar, bem como, metamorfosear-se, adquirindo uma de 3 habilidades especiais. As habilidades nem sempre estão todas disponíveis em simultâneo; em certos níveis apenas se pode seleccionar uma delas, enquanto que noutro se podem possuir todas. O Tiny pode também perder ou ganhar a capacidade de utilizar uma determinada habilidade quando atravessa um campo magnético que iniba/active essa habilidade. Durante o desenrolar do jogo, o Tiny terá que evitar diversos objectos que o matam quando este lhes toca. De modo a conseguir encontrar a saída do nível, terá também que apanhar chaves para abrir fechaduras de portas, ligar interruptores, etc.. O objectivo final deste trabalho é a implementação de um editor que permita criar níveis para este jogo. Para cada nível criado, o editor deve permitir que este seja gravado num ficheiro de texto. Assim, uma aplicação que permita jogar o jogo poderá ler ficheiros gerados pelo editor permitindo assim, que os níveis nele criados possam ser jogados. Programação III 1ª Etapa do Trabalho Prático (2004/2005) 1/9
2. DESCRIÇÃO DE UM NÍVEL Um nível é constituído por um mapa, um Tiny e outros objectos que interagem entre si e/ou com o Tiny. Destes objectos, alguns são fixos e outros deslocam-se com um movimento predefinido. Além disso, alguns objectos servem de suporte a outros objectos que deles necessitem. Existem também objectos que podem interagir com outros. Por exemplo, no jogo, uma das formas de abrir uma porta consiste em recolher uma chave e utilizá-la numa fechadura que abra essa porta. Uma vez que durante o desenrolar do jogo o Tiny pode morrer várias vezes, no editor é também necessário definir o número de vidas inicial. O mapa do nível consiste numa matriz de quadrículas cuja dimensão é configurável pelo utilizador. Cada quadrícula pode conter apenas um objecto. No entanto, cada objecto pode ocupar mais do que uma quadrícula. Isto significa que para desenhar um objecto, podem ser necessárias várias imagens (cada imagem será desenhada numa das quadrículas ocupadas por esse objecto). Por exemplo, como se pode ver na Figura 1, a aranha ocupa um espaço de 2x2 quadrículas: Célula seleccionada pelo utilizador para colocar uma aranha Figura 1 Aranha A imagem de um objecto é desenhada a partir da quadrícula seleccionada pelo utilizador (canto superior esquerdo). 3. DESCRIÇÃO DOS OBJECTOS DO JOGO Nesta secção são descritos todos os objectos que podem ser utilizados para construir um nível. É de salientar que existem objectos no jogo que não têm que ser considerados aquando da construção de um nível no editor. Por exemplo, a corda, que é um objecto que o Tiny pode utilizar em determinadas situações do jogo, não será descrita neste enunciado porque não há características deste objecto que possam ser definidas aquando da construção de um nível. Todos os objectos do jogo devem permitir que as suas características possam ser escritas no ficheiro de texto utilizado para guardar o nível. 3.1 DESCRIÇÃO DO TINY O Tiny tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo, uma dimensão de 1x1, uma velocidade de salto, uma velocidade de deslocamento, uma velocidade angular e os ângulos máximo e mínimo do seu movimento quando pendurado numa corda. O Tiny pode ter as seguintes habilidades: fogo martelo corda Quando se está a construir um nível, deve definir-se quais serão as habilidades que o Tiny poderá utilizar no decorrer desse nível. O Tiny não pode servir de suporte a outros 3.2 PLATAFORMA FIXA Uma plataforma fixa tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x2 (Figura 2). Esta plataforma, embora possa estar suspensa (não estar apoiada noutros objectos), pode suportar outros Programação III 1ª Etapa do Trabalho Prático (2004/2005) 2/9
3.3 PLATAFORMA DESTRUTÍVEL Figura 2 Plataforma fixa Uma plataforma destrutível tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x2 (Figura 3). Esta plataforma pode estar suspensa e, embora possa servir de apoio vertical, não pode ser utilizada como apoio lateral. 3.4 TELEFÉRICO Figura 3 Plataforma destrutível Um teleférico tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x3 (Figura 4). Este objecto pode estar suspenso e, embora possa servir de apoio vertical, não pode ser utilizado como suporte lateral. No jogo, os teleféricos têm um movimento horizontal de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto o comprimento do segmento de recta como a velocidade devem poder ser definidos no editor. 3.5 ELEVADOR Figura 4 Teleférico Um elevador tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x2 (Figura 5). Este objecto pode estar suspenso e, embora possa servir de apoio vertical, não pode ser utilizado como suporte lateral. No jogo, os elevadores têm um movimento vertical de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto o comprimento do segmento de recta como a velocidade devem poder ser definidas no editor. 3.6 CACTO Figura 5 Elevador Um cacto tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x1 (Figura 6). Este objecto não pode estar suspenso e não serve de suporte a outros 3.7 CANA DE ESPINHOS Figura 6 Cacto Uma cana de espinhos tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 7). Este objecto não pode estar suspenso e não serve de suporte a outros Figura 7 Cana de espinhos Programação III 1ª Etapa do Trabalho Prático (2004/2005) 3/9
3.8 COBRA Uma cobra tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x2 (Figura 8). Este objecto não pode estar suspenso e não serve de suporte a outros No jogo, a cobra só aparece na posição definida quando o Tiny viola a sua distância de segurança. Assim, esta distância deve poder ser definidos no editor. 3.9 GÁRGULAS Figura 8 Cobra Uma gárgula tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo, uma dimensão de 2x2 (Figura 9), uma cadência de tiro e a velocidade dos tiros por ela lançada. Este objecto tem que estar encostado a outro objecto que lhe sirva de suporte lateral. Além disso, não pode servir de suporte a outros Existem dois tipos de gárgulas: as que têm que estar encostadas do lado direito - a gárgula esquerda - e as que têm que estar encostadas do lado esquerdo - a gárgula direita. 3.10 ESCORPIÃO Figura 9 Gárgulas direita e esquerda apoiadas a uma plataforma fixa Um escorpião tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x2 (Figura 10). Este objecto não pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, os escorpiões têm um movimento horizontal de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto o comprimento do segmento de recta como a velocidade devem poder ser definidos no editor. 3.11 MOCHO Figura 10 Escorpião Um mocho tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x2 (Figura 11). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, os mochos têm um movimento oblíquo de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto a velocidade, como o deslocamento no eixo dos XX e o deslocamento no eixo dos YY devem poder ser definidos no editor. 3.12 ARANHA Figura 11 Mocho Uma aranha tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x2 (Figura 12). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros Programação III 1ª Etapa do Trabalho Prático (2004/2005) 4/9
No jogo, as aranhas têm um movimento vertical de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto o comprimento do segmento de recta como a velocidade devem poder ser definidos no editor. 3.13 MORCEGO Figura 12 Aranha Um morcego tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 2x2 (Figura 13). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, os morcegos têm um movimento oblíquo de ida e volta sobre um segmento de recta com uma determinada velocidade. Assim, tanto a velocidade, como o deslocamento no eixo dos XX e o deslocamento no eixo dos YY devem poder ser definidos no editor. 3.14 CAMPO MAGNÉTICO Figura 13 Morcego Um campo magnético permite activar/inibir a habilidade (bola de fogo, martelo, ou corda) correspondente à cor que apresentam. Um campo magnético tem que ser suportado por cima e por baixo. Para colocar o objecto no mapa, o utilizador, tal como acontece com todos os outros objectos do jogo, selecciona uma célula. Mas, ao contrário do que acontece com os outros objectos, a definição da quadrícula correspondente ao canto superior esquerdo do campo magnético não é realizada automaticamente. Vejamos como é que essa quadrícula é definida: 1. O utilizador selecciona uma célula (ver Figura 14). 2. Na coluna da célula seleccionada tenta encontrar-se objectos que possam suportar o campo magnético em ambos os seus extremos. 3. Definir a quadrícula correspondente ao canto superior esquerdo do campo magnético como a quadrícula imediatamente abaixo do objecto de suporte de cima. Exemplos de células seleccionadas pelo utilizador para colocar um campo magnético Figura 14 Colocação de campos magnéticos no mapa Repare que deste modo, um campo magnético tem uma dimensão de nx1 em que n é maior ou igual a 3. Repare também que apesar da sua dimensão variável, o campo magnético é desenhado à custa de apenas três imagens: uma que representa o seu topo superior (Figura 15a)), uma que representa o tipo de magnetismo (Figura 15b)) e outra que representa o seu topo inferior(figura 15c)). Programação III 1ª Etapa do Trabalho Prático (2004/2005) 5/9
(a) (b) (c) Figura 15 Imagens base utilizadas para representar um campo magnético 3.14.1 Campo Magnético Amarelo Um campo magnético amarelo inibe/activa a habilidade bola de fogo e é composto pelas seguintes imagens: 3.14.2 Campo Magnético Verde Figura 16 Imagens base utilizadas para representar um campo magnético amarelo Um campo magnético verde inibe/activa a habilidade corda e é composto pelas seguintes imagens: 3.14.3 Campo Magnético Vermelho Figura 17 Imagens base utilizadas para representar um campo magnético verde Um campo magnético vermelho inibe/activa a habilidade martelo e é composto pelas seguintes imagens: 3.15 CHAVE Figura 18 Imagens base utilizadas para representar um campo magnético vermelho Uma chave tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 19). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, uma chave pode abrir uma ou mais fechaduras. Assim, no editor é necessário definir quais as fechaduras existentes no nível que podem ser abertas por cada chave. 3.16 FECHADURA Figura 149 Chave Uma fechadura tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 20). Este objecto pode estar suspenso e pode ser utilizado como suporte a outros No jogo, uma fechadura pode ser aberta por uma ou mais chaves. Quando uma fechadura é aberta por uma chave é automaticamente aberta a porta correspondente a essa fechadura. Assim, no editor é necessário definir quais as chaves que podem activar a fechadura e qual a porta que a fechadura pode abrir. 3.17 INTERRUPTOR Figura 20 Fechadura Um interruptor tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 21). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros Programação III 1ª Etapa do Trabalho Prático (2004/2005) 6/9
No jogo, um interruptor abre uma porta quando tocado pelo Tiny. Assim, no editor é necessário definir qual a porta que o interruptor pode abrir. 3.18 MOEDA Figura 21 Interruptor Uma moeda tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 22). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, uma moeda abre uma porta quando tocada pelo Tiny. Assim, no editor é necessário definir qual a porta que a moeda pode abrir. 3.19 PORTAS Figura 22 Moeda Uma porta tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 4x1 ou 1x4, conforme seja, respectivamente, uma porta vertical ou horizontal (Figura 23). Este objecto pode estar suspenso e pode ser utilizado como suporte a outros No jogo, uma porta pode ser aberta por uma ou mais fechaduras, uma ou mais moedas e, ainda, por um ou mais interruptores. Assim, no editor é necessário definir quais as fechaduras, moedas e/ou interruptores que podem abrir a porta. Figura 23 Porta vertical e horizontal Repare que uma porta tem uma dimensão superior àquela que é visualizada. Isto deve-se ao facto de que se tem que considerar como fazendo parte da porta o espaço que é ocupado quando esta está aberta (Figura 24). 3.20 TELEPORTE Figura 24 Porta vertical aberta e fechada Um teleporte tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 25). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros Programação III 1ª Etapa do Trabalho Prático (2004/2005) 7/9
No jogo, um teleporte, quando tocado pelo Tiny, teleporta-o para um local de destino previamente especificado. Assim, no editor é necessário definir qual o local de destino para onde o Tiny será teleportado quando tocar no teleporte. Vários teleportes podem teleportar o Tiny para o mesmo local de destino. 3.21 SAÍDA Figura 25 Teleporte Uma saída tem informação acerca da quadrícula correspondente ao seu canto superior esquerdo e uma dimensão de 1x1 (Figura 26). Este objecto pode estar suspenso e não pode ser utilizado como suporte a outros No jogo, quando o Tiny toca numa saída, o nível é concluído. Figura 26 Saída 4. OBJECTIVOS Resolva o problema utilizando a análise orientada aos objectos, identificando: As classes; Atributos e os principais serviços para cada classe. Relacionamento entre classes (relações de herança e relações de associação); A análise dos serviços de cada classe deve ser superficial e apenas deve identificar os serviços imprescindíveis (construtores, métodos de encapsulamento e os principais serviços). Para além dos elementos acima referidos, o relatório a entregar deve conter para cada classe, os seguintes elementos: A descrição da classe (entidade que representa e a sua relação com outras entidades); Atributos (a descrição, o nome e o tipo de atributo); Serviços imprescindíveis (nome, descrição, possíveis parâmetros a passar ao serviço e tipo de retorno). O trabalho pode ser elaborado em papel ou utilizando a ferramenta de modelação Together. Os alunos podem e devem contactar os docentes para esclarecimento de dúvidas e apoio na realização do trabalho prático. Ao modelar o problema deve ter em conta que a linguagem Java não suporta herança múltipla. Nota: Neste enunciado são descritas todas as entidades necessárias para construir um nível no editor do jogo Fury of the Furies. Se pretender saber com mais pormenor como funciona o jogo, recomenda-se a leitura do enunciado do trabalho prático de Programação III de Engenharia Informática. Critérios Os critérios de correcção para a primeira etapa do trabalho prático de Programação III são os seguintes: Critério Cotação Herança 20% Polimorfismo 30% Encapsulamento 15% Relatório 10% Avaliação contínua 25% Regras a respeitar 1. Data limite para a entrega do trabalho: 10 de Dezembro de 2004. 2. No relatório a entregar, deve mencionar: nome completo do(s) aluno(s), número(s) e turma(s) prática(s) a que pertence(m). Programação III 1ª Etapa do Trabalho Prático (2004/2005) 8/9
3. O trabalho deve ser entregue em CD ou DVD, em mãos, a qualquer um dos professores que leccionam a disciplina recebendo o aluno o respectivo comprovativo de entrega. Atenção que no dia 10 de Dezembro, os trabalhos devem ser entregues no pedríodo das 19:00 às 20:00 a qualquer um dos professores da disciplina. Programação III 1ª Etapa do Trabalho Prático (2004/2005) 9/9