Exercício: Persistindo a Pokédex com Tratamento de Exceções
Objetivo
O objetivo deste exercício é praticar o uso de tratamento de exções e afim de:
- Implementar um sistema de persistência da Pokédex usando um arquivo CSV.
- Aplicar tratamento de exceções para garantir que o jogo funcione mesmo em caso de erros.
Descrição
No jogo Pokémon que estamos desenvolvendo, o treinador captura Pokémon ao longo de sua jornada. Para que essas informações não sejam perdidas ao fechar o jogo, você deve implementar um sistema para salvar e carregar a Pokédex usando um arquivo.
Além disso, o sistema deve ser robusto, ou seja, deve lidar corretamente com possíveis erros que podem ocorrer durante a leitura e escrita do arquivo.
Requisitos Funcionais
classDiagram
class Jogo {
- Mapa mapa
- Treinador treinador
+ Jogo(String nomeTreinador)
+ iniciar()
}
class Mapa {
- char[][] layout
- final int largura
- final int altura
+ Mapa(int largura, int altura)
- inicializarMapa()
+ exibirMapa(int x, int y)
+ posicaoValida(int x, int y) boolean
+ moverTreinador(Treinador treinador, String direcao) void
+ encontrouPokemon(Treinador treinador) boolean
}
class Treinador {
- String nome
- int x
- int y
- Pokebolas[] pokebolas
- Pokedex pokedex
+ Treinador(String nome, Pokedex pokedex)
+ getNome() String
+ getX() int
+ getY() int
+ getPokedex() Pokedex
+ setPosicao(int x, int y)
+ mover(String direcao)
+ arremessarPokebola() Pokebola
+ temPokebola() boolean
}
class PokedexManager {
+ salvarPokedex(Pokedex pokedex) void
+ carregarPokedex() Pokedex
}
class Pokedex {
+ listarCapturados() List~Pokemon~
+ listarVistos() List~EspeciePokemon~
+ contarCapturasPorEspecie(nome: EspeciePokemon) int
+ taxaDeSucesso(nome: String) double
}
class Pokemon {
- nome: String
- nivel: int
+ getNome(): String
}
class Batalha {
- Treinador treinador
- Pokemon pokemons
- terminou boolean
+ Batalha(Treinador treinador, Pokemon pokemon)
+ iniciar() void
+ proximoTurno() void
+ terminou() boolean
}
class MenuPokedex {
+ MenuPokedex(Pokedex pokedex)
+ listarCapturados(): void
+ listarVistos(): void
+ exibirDetalhes(pokemon: EspeciePokemon): void
}
class Registravel {
<<interface>>
+ registrarEncontro(pokemon: Pokemon) void
+ registrarCaptura(pokemon: Pokemon) void
}
class EspeciePokemon {
<<Enumeration>>
BULBASAUR,
IVYSAUR
...
}
class Pokebola {
+ capturar(Pokemon pokemon) boolean
+ getBonus() float
# getTaxaDeCaptura(Pokemon pokemon) float
}
class PokebolaAfetaTaxaCaptura {
<<Abstract>>
+ getBonus() float
}
class PokebolaAfetaPokemon {
<<Abstract>>
+ aplicarEfeito(Pokemon pokemon)
}
class GreatBall {
}
class UltraBall {
}
class FastBall {
}
class HeavyBall {
}
class MasterBall {
}
class HealBall {
}
Jogo "1" --> "1" Mapa : usa
Jogo "1" --> "1" MenuPokedex : usa
Jogo "1" --> "1" Treinador : possui
Jogo -- PokedexManager
Mapa "1" --> "1" Treinador : controla
Jogo "1" --> "*" Batalha : possui
Treinador "1" --> "1" Pokedex: possui
Batalha "1" --* "1" Treinador: envolve
Batalha "1" --* "1" Pokemon: envolve
Pokedex "1" --> "0..n" Pokemon: armazena
Pokedex ..|> Registravel
PokedexManager -- Pokedex
MenuPokedex "1" --* "1" Pokedex: utiliza
Pokebola "1" ..> "1" Pokemon: captura
Pokebola <|-- PokebolaAfetaTaxaCaptura
Pokebola <|-- PokebolaAfetaPokemon
PokebolaAfetaPokemon <|-- HealBall
PokebolaAfetaTaxaCaptura <|-- GreatBall
PokebolaAfetaTaxaCaptura <|-- UltraBall
PokebolaAfetaTaxaCaptura <|-- FastBall
Pokebola <|-- MasterBall
Pokebola <|-- HeavyBall
1.Criar a classe PokedexManager
Esta classe será responsável por salvar e carregar a Pokédex a partir de um arquivo JSON.
void salvarPokedex(Pokedx pokedex)- Deve converter a Pokekex para CSV e salvá-la em dois arquivos capturados.csv e vistos.csv
- Se houver erro ao salvar, exibir uma mensagem amigável.
Pokedex carregarPokedex()- Deve carregar a Pokedex a partir dos arquivos csv - Se o arquivo não existir, retornar uma Pokédex vazia.
- Se o arquivo estiver corrompido, exibir uma mensagem de erro e retornar uma Pokédex vazia.
2. Modificar a classe jogo
- Ao iniciar o jogo, a Pokedex deve ser carregada automaticamente
- Ao sair do jogo, a Pokedex deve ser salva imediatamente no arquivo