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% de sua vida ao final da rodada em que foi usada.
- Queimadura - Faz com que o adversário perca 30% 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% 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%.
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
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
|
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
|
200 |
0:1:2:3:4:5 |
Envia os códigos dos pokemons que foram selecionados pelo servidor. 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 |
Enviada pelo servidor para os clientes no início de cada rodada. Serve para os clientes poderem atualizar suas informações da tela. 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.
|
500 |
(0):0=100:1=100:2=100:3=100:4=100:5=100:0=100:1=100:2=100:3=100:4=100:5=100 |
Enviada pelo servidor para os clientes no final de cada rodada para informar quem realizou a ação primeiro (0 para o jogador1 e 1 para o jogador2), qual a vida dos pokemons de cada jogador, sendo que os primeiros seis são do jogador1 e os 6 últimos são do jogador2. A lógica da separação do código dos pokemons e da vida é a mesma da mensagem 600.
|
Soluções dos alunos
Grupo
|
Licença
|
Código Fonte
|