Exercício: Usando diversos tipos de pokebola
Objetivo
O objetivo deste exercício é praticar o uso de classes abstratas, métodos abstratos e polimorfismo, além de aplicar conceitos de herança e encapsulamento. Para isso, você deverá implementar uma hierarquia de classes para diferentes tipos de Pokébolas, cada uma com suas características específicas.
Descrição
Nessa atividade você deverá alterar o programa para permitir o uso de diferentes Pokébolas para capturar Pokémon. A versão atual do pragrama utiliza a fórmula de captura do terceira geração do jogo que podemos observar a seguir:
Fórmula de Captura
A fórmula utilizada para calcular a taxa de captura modifacada, \(\alpha\) , de um Pokémon é a seguinte:
\[\alpha = \frac{3*HP_{max} - 2*HP_{atual}}{3*HP_{max}}*catch_{rate}*bonus_{ball}*bonus_{status}\]- \(HP_{max}\) : HP máximo do Pokémon.
- \(HP_{atual}\) : HP atual do Pokémon.
- \(catch_{rate}\) : Taxa de captura base do Pokémon, varia de acordo com a espécie de pokemon.
- \(bonus_{ball}\) : É o multiplicador aplicado de acordo com o tipo de pokebola. Pokébolas neutras possuem o multiplicador igual 1.
- \(bonus_{status}\) : É um multiplicador aplicado de acordo com o status do pokemon. Ex: Quando o pokemon está dormindo o bonus é igual 2.
O método getTaxaDeCaptura modificada deve retornar \(1 \leq \alpha \leq 255\).
O método capturar deve gerar um número aleatório entre 0 e 255. Se o valor de \(\alpha\) for menor ou igual ao número gerado, a captura é bem-sucedida.
Tipos de pokébolas
Existem diversos tipos de pokébolas, contudo podemos agrupá-las em dois grupos: aquelas que alteram a taxa de captura de acordo com características específicas do Pokémon e outras que aplicam efeitos adicionais no Pokémon capturado.
Você deve implementar uma hierarquia de classes para representar as Pokébolas e seus comportamentos, utilizando classes abstratas e métodos abstratos quando necessário.
Requisitos Funcionais
- Classe Base
Pokeball:- Contém o método
capturar(Pokemon pokemon), que realiza o processo de tentativa de captura. - Contém um método
getTaxaDeCaptura(Pokemon pokemon)que aplica a fórmula de captura.- Este método deve ser o responsável por identificar o bonus aplicado pela pokébola.
- Contém o método
- As seguintes pokébolas devem ser implementadas Pokébolas Específicas:
| Tipo | Geração | Modificador de taxa de captura (bonus) | Efeito aplicado |
|---|---|---|---|
| 1 | 1x | ||
| 1 | 1.5x | ||
| 1 | 2x | ||
| 1 | Faz com que a taxa de captura modificada seja 255 | Captura garantida | |
| 2 | 4x quando o pokémon alvo tem pelo menos 100 de velocidade. Caso constrário 1x | ||
| 2 | \(f(p) = \begin{cases} -20 & \quad \text{Se } p \leq 99.9 \\ 0 & \quad \text{Se } 100 \geq p \geq 199.9 \\ +20 & \quad \text{Se } 200 \geq p \geq 299.9 \\ +30 & \quad \text{Se }p \geq 300 \\ \end{cases}\) | ||
| 2 | 1x | Altera os pontos de amizade do pokemon capturado para 200 | |
| 6 | 1x | Restaura o HP, o PP e qualquer condição de status do pokemon capturado |