Projeto POO - 2013.2: mudanças entre as edições
Sem resumo de edição |
|||
(12 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 12: | Linha 12: | ||
* 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'''. | * 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%) | ** '''Golpes fortes''' possuem uma probabilidade menor de acerto (40%) | ||
*** Envenenamento - Faz com que o adversário perca 30 | *** 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 | *** 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%) | ** '''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%. | *** 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 | *** 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 | * 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 | ** Recuperar vida - Faz com que o nível de vida do pokemon selecionado fique novamente cheio | ||
Linha 27: | Linha 27: | ||
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 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 | * 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 | * 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: | |||
<math> | |||
resultado = \begin{cases} (fA + nA - nD) * (pV) , & \mbox{se o atacante tiver vantagem sobre o atacado} \\ (fA + nA - nD) * (pD) , & \mbox{se o atacante tiver desvantagem sobre o atacado} \end{cases} | |||
</math> | |||
sendo, <math>fA</math> a força do ataque, <math>nA</math> o nível de ataque do atacante, <math>nD</math> o nível de defesa do pokemon que está sendo atacado, <math>pV</math> para indicar o multiplicador de vantagem para o ataque ou <math>pD</math> para indicar o multiplicador de desvantagem para o ataque. Se <math>resultado</math> ficar negativo, então deve-se deixá-lo com o valor <math>=0</math>. | |||
===Lista dos pokemons=== | ===Lista dos pokemons=== | ||
Linha 75: | Linha 85: | ||
===Códigos das mensagens usadas no protocolo de comunicação=== | ===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; | |||
} | |||
} | |||
{| border="1" cellpadding="2" | {| border="1" cellpadding="2" | ||
Linha 82: | Linha 102: | ||
|- | |- | ||
| 100 || Nome do Jogador || Mensagem para enviar os nomes dos jogadores. Cada jogador ao conectar no servidor deve inicialmente fornecer seu nome | | 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 | | 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 || | | 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 | | 301 || ataque forte 1 || Enviada pelo cliente para indicar que escolheu o ataque forte 1 | ||
Linha 120: | Linha 144: | ||
| 339 || pokemon 9 || Enviada pelo cliente para indicar que escolheu o pokemon de código 9 | | 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 cada um dos clientes no início | | 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. | | 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. | ||
Linha 126: | Linha 150: | ||
|} | |} | ||
==Diagramas UML== | |||
===Diagrama de classes=== | |||
Abaixo uma sugestão para organização das classes no projeto | |||
[[Arquivo:Javamon-diagrama-de-classe.png|800px]] | |||
===Diagrama de sequência=== | |||
Abaixo um diagrama de sequência para ilustrar as trocas de mensagens entre clientes e servidor | |||
[[Arquivo:Javamon-diagrama-de-sequencia.png|800px]] | |||
==Códigos de referência== | |||
===Exemplo de como desenhar com API do Java2D e para fazer animações=== | |||
*[[Media:Javamon-AnimacaoJ2D.zip| Projeto Netbeans Animação J2D]] | |||
===Exemplo de bate-papo para atender mais de um cliente=== | |||
*[[Media:JavaRede-Multithread.zip| Projeto Netbeans Bate-papo para vários clientes]] | |||
==Soluções dos alunos== | ==Soluções dos alunos== |
Edição atual tal como às 10h11min de 15 de dezembro de 2013
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.
1 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.
1.1 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.
- Golpes fortes possuem uma probabilidade menor de acerto (40%)
- 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 .
1.1.1 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 |
1.2 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
1.2.1 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. |
1.3 Diagramas UML
1.3.1 Diagrama de classes
Abaixo uma sugestão para organização das classes no projeto
1.3.2 Diagrama de sequência
Abaixo um diagrama de sequência para ilustrar as trocas de mensagens entre clientes e servidor
1.4 Códigos de referência
1.4.1 Exemplo de como desenhar com API do Java2D e para fazer animações
1.4.2 Exemplo de bate-papo para atender mais de um cliente
1.5 Soluções dos alunos
Grupo | Licença | Código Fonte
|
---|