Projeto POO - 2013.2

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

O projeto final da disciplina Programação Orientada a Objetos poderá ser desenvolvido em dupla e deverá ser apresentado em sala no dia 16 de dezembro de 2013.

Javamon - Clone do Jogo Pokemon

Desenvolver um jogo em Java usando somente as APIs do Java 2D. O jogo requer 2 jogadores interagindo através da rede de computadores. Trata-se de uma batalha por rodada. A cada rodada cada jogador escolhe a ação desejada para seu pokemon e o vencedor da rodada dependerá da análise dos golpes, movimentos, etc que foram executados por cada pokemon.

Regras do jogo

  • O jogo deverá oferecer 10 tipos de pokemons
  • Cada jogador deverá ter 6 pokemons, escolhidos dentre os 10 possíveis
  • O jogo termina quando todos os pokemons de um jogador forem derrotados
  • Um jogador poderá escolher um pokemon por vez para participar de uma batalha. Quando um pokemon é derrotado, o jogador poderá escolher outro para colocar em seu lugar, desde que ainda tenha pokemons disponíveis.
  • Cada pokemon possui 4 golpes de luta (2 fracos e 2 fortes), sendo que cada golpe possui o dano que causa e a probabilidade de acerto.
    • Golpes fortes possuem uma probabilidade menor de acerto (40%)
      • Envenenamento - Faz com que o adversário perca 30 pontos de sua vida ao final da rodada em que foi usada.
      • Queimadura - Faz com que o adversário perca 30 pontos de sua vida ao final da rodada em que foi usada.
    • Golpes fracos possuem uma probabilidade maior de acerto (80%)
      • Paralisia - Faz com que o adversário tenha sua velocidade de ataque reduzida em 20% a cada que for usada. Se usado diversas vezes contra o mesmo pokemon, este terá sua velocidade reduzida em no máximo em 80%.
      • Soco - Faz com que o adversário perca 10 pontos de sua vida ao final da rodada em que foi usada.
  • Cada pokemon possui um único item especial e que só pode ser usado uma única vez durante a batalha
    • Recuperar vida - Faz com que o nível de vida do pokemon selecionado fique novamente cheio
    • Curar - Remove o efeito do golpe Paralisia que tenha sido aplicado anteriormente, ou seja, a velocidade do pokemon volta ao seu nível original
  • Todo pokemon possui um nível de vida que inicia no nível máximo que é 100
  • Todo pokemon possui um nível de ataque que vai de 0 a 50
  • Todo pokemon possui um nível de defesa que vai de 0 a 50
  • Todo pokemon possui um nível de velocidade que vai de 0 a 50. A velocidade determina quem irá atacar primeiro.
    • Se o nível de velocidade for o mesmo para os dois pokemons em uma batalha, então é feito um sorteio para determinar quem inicia primeiro

A tabela abaixo indica os valores de ataque, defesa e velocidade de cada pokemon. Também indica qual tipo de pokemon tem vantagem e desvantagem sobre outros tipos.

  • A vantagem significa: Se o pokemon do tipo Fogo atacar um pokemon do tipo Gelo, então a força do seu ataque será aumentada em 50%. Supondo que tenha usado um golpe forte, que tem um dano de 30, então este ataque será de 45.
  • A desvantagem significa: Se o pokemon do tipo Fogo atacar um pokemon do tipo Água, então a força do seu ataque será reduzida em 50%. Supondo que tenha usado um golpe forte, que tem um dano de 30, então este ataque será de 15.
  • O resultado de um ataque é calculado da seguinte forma:

sendo, a força do ataque, o nível de ataque do atacante, o nível de defesa do pokemon que está sendo atacado, para indicar o multiplicador de vantagem para o ataque ou para indicar o multiplicador de desvantagem para o ataque. Se ficar negativo, então deve-se deixá-lo com o valor .


Lista dos pokemons

Tipo Pokemon Ataque Defesa Velocidade Vantagens Desvantagens
Fogo Ponyta 37 24 39 Gelo/Inseto Água/Terrestre
Gelo Shellder 32 49 19 Planta/Voador Fogo/Pedra
Planta Bulbasaur 34 34 32 Água/Terrestre Inseto/Gelo
Água Goldeen 35 31 34 Fogo/Pedra Planta/Elétrico
Pedra Geodude 40 50 10 Gelo/Elétrico Água/Lutador
Voador Hoothoot 27 27 46 Planta/Lutador Gelo/Elétrico
Inseto Caterpie 35 45 20 Terrestre/Planta Fogo/Lutador
Terrestre Sandshrew 38 43 19 Fogo/Elétrico Planta/Inseto
Elétrico Pikachu 31 19 50 Água/Voador Terrestre/Pedra
Lutador Mankey 43 19 38 Pedra/Inseto Voador

Requisitos do jogo

  • Todo pokemon deverá possui 2 imagens para sua representação gráfica. Uma imagem para quando este estiver de frente e outra quando este estiver de costas.
    • Todas imagens deverão ter obrigatoriamente a dimensão de 80x80 pixels
  • Ao término do jogo, ou seja, quando um jogador teve todos seus pokemons derrotados, deve-se perguntar aos jogadores se desejam iniciar uma nova partida
  • Todos os métodos deverão ser comentados, de acordo com o padrão do JavaDOC, e dentro dos métodos é necessário comentar cada parte de seu funcionamento chave
  • Todo o código estará sob a licença de software livre GPL

Códigos das mensagens usadas no protocolo de comunicação

package poo;
public class Mensagem{
   public int codigo;
   public String corpo;
   public Mensagem(int cod, String co){
      this.codigo = cod;
      this.corpo = corpo;
   }
}


Código Corpo Descrição da mensagem
100 Nome do Jogador Mensagem para enviar os nomes dos jogadores. Cada jogador ao conectar no servidor deve inicialmente fornecer seu nome. O servidor também envia esta mensagem para os clientes para informar os nomes dos adversários.
102 Aguarde Mensagem enviada pelo servidor para o primeiro jogador que se conectou. É usada para informar que o adversário ainda não entrou na sala
110 Bate papo Mensagem enviada do cliente para o servidor e vice-versa para trocar mensagens no bate papo
120 Desconectar Cliente envia para o servidor indicando que irá sair. Servidor envia para cliente para informar que o outro Cliente saiu
200 0:1:2:3:4:5 Cliente envia para o servidor os códigos dos pokemons que selecionou. Cada código é separado por : e os códigos iniciam de 0 a vão até 9
301 ataque forte 1 Enviada pelo cliente para indicar que escolheu o ataque forte 1
311 ataque forte 2 Enviada pelo cliente para indicar que escolheu o ataque forte 2
312 ataque fraco 1 Enviada pelo cliente para indicar que escolheu o ataque fraco 1
313 ataque fraco 2 Enviada pelo cliente para indicar que escolheu o ataque fraco 2
320 item 1 Enviada pelo cliente para indicar que escolheu o item 1
321 item 2 Enviada pelo cliente para indicar que escolheu o item 2
330 pokemon 0 Enviada pelo cliente para indicar que escolheu o pokemon de código 0
331 pokemon 1 Enviada pelo cliente para indicar que escolheu o pokemon de código 1
332 pokemon 2 Enviada pelo cliente para indicar que escolheu o pokemon de código 2
333 pokemon 3 Enviada pelo cliente para indicar que escolheu o pokemon de código 3
334 pokemon 4 Enviada pelo cliente para indicar que escolheu o pokemon de código 4
335 pokemon 5 Enviada pelo cliente para indicar que escolheu o pokemon de código 5
336 pokemon 6 Enviada pelo cliente para indicar que escolheu o pokemon de código 6
337 pokemon 7 Enviada pelo cliente para indicar que escolheu o pokemon de código 7
338 pokemon 8 Enviada pelo cliente para indicar que escolheu o pokemon de código 8
339 pokemon 9 Enviada pelo cliente para indicar que escolheu o pokemon de código 9
600 0=100:1=100:2=100:3=100:4=100:5=100:6=50 Enviada pelo servidor para cada um dos clientes no início da batalha. Serve para os clientes iniciarem em sua tela as informações sobre seus pokemons e também do pokemon do adversário que está na arena. O conteúdo da mensagem é formado pelo código do pokemon seguido pelo seu nível de vida, que são separados pelo símbolo = . A separação dos pokemons também é feita pelo símbolo :, assim como na mensagem 200. O último bloco (separado por :) representa o pokemon do adversário.
500 (0):0=100:0=100 Enviada pelo servidor para os clientes no final de cada rodada para informar qual jogador realizou a ação primeiro (0 para o jogador1 e 1 para o jogador2), qual a vida do pokemon que está na arena de cada jogador, sendo que o primeiro pokemon apresentado é do jogador1 e o último é do jogador2. A lógica da separação do código dos pokemons e da vida é a mesma da mensagem 600.

Diagramas UML

Diagrama de classes

Abaixo uma sugestão para organização das classes no projeto

Javamon-diagrama-de-classe.png

Diagrama de sequência

Abaixo um diagrama de sequência para ilustrar as trocas de mensagens entre clientes e servidor

Javamon-diagrama-de-sequencia.png

Códigos de referência

Exemplo de como desenhar com API do Java2D e para fazer animações

Exemplo de bate-papo para atender mais de um cliente


Soluções dos alunos

Grupo Licença Código Fonte