Universidade Católica de Pernambuco
Alunos:
- Maria Luiza Ribeiro de Lima (RA: 00000848982)
- Roberto Regis de Araújo Lima Neto (RA: 00000848959)
- Vínicius Martins Galindo Andrade (RA: 00000848753)
- Matheus Veríssimo Rodrigues Pinheiro (RA: 00000850062)
- Vitor Hugo José Sales da Silva (RA: 00000849201)
Disciplina: Programação Orientada a Objetos (2024.1)
Professor: Lucas Rodolfo
Labyrinth of Leaves é um jogo desenvolvido em Java para a cadeira de Programação Orientada a Objetos. O objetivo do jogo é guiar o personagem Greg na busca pela saída de um labirinto repleto de desafios. Greg deve encontrar chaves espalhadas pelo caminho para destrancar a porta final e, assim, escapar. Durante sua jornada, ele precisa evitar perigos como aranhas e armadilhas mortais que podem acabar com sua aventura.
Aventureiro : O nosso aventureiro é representado na classe Player, subclasse de Entidade As principais funcionalidades dessa classe são o estado do jogador (vida, adquirir items, etc), atualizar os sprites do personagem, chamar os estados de final do jogo (0 de vida, fim do labirinto), entre outras, alem de vários parametros como a posição de spawn
Tesouro : Os nossos tesouros são representados por classes do package Objetos, que tambem são uma sublasse de Entidade. Eles podem ser encontrados nos baus espalhados pelo mapa.
Perigo : Temos um package Monstro para representar monstros, perigos vivos do labirinto. Temos lá a classe aranha, que se move em direções aleatorias e tira parte da vida do jogador quando entra em contato. Tambem temos um Objeto Armadilha que tira a vida do personagem quando ele passa na mesma tile.
Labirinto : A logica principal do labirinto está contido no package Main, des da janela do jogo, a checagem de colisão, o tratamento dos inputs do jogador, a lista de entidades e suas posições, aos graficos e os eventos, entre outros. O mapa em si é um .txt (res -> maps -> WorldMap.txt) que é representado pelo TileManager.
Existe alguns usos de arrays e arraylist, como por exemplo, na classe Gamepanel onde existe um Arraylist para as Entidades, contendo todas as entidades presentes no mapas e suas informações.
Existe uma variedade de tratamentos de exceções, como tentando acessar uma imagem de um grafico que não existe. Pode ser que haja problema caso o jogador se mover fora do mapa, mas o layout do labirinto não permite isso Não achamos nenhuma forma de dar crash no jogo apenas o jogando.
A classe entidade e suas funções podem assumir varias formas, como jogadores, inimigos e objetos (ex tesouros). Por exemplo, função update() do aventureiro determina o seu movimento com base no comando do jogador, enquanto MON_Spider.update() determina o movimento das aranhas de forma espontânea e randomica.
Existe um certo uso de abstração, entidades atualizam seu status por suas funções update (ex : mudam de posição caso se movendo), dependendo do tipo de entidade podem verificar certo tipo de colisão, o jogador pode perder pontos de vida, etc
Existe alguns usos de encapsulamento, como as ações de cada entidade especifica serem privadas, visiveis apenas a si mesmo.