🧩 Exercícios - Cap 17: PokeMap: Onde estão os Treinadores?
🎯 Antes de começar
No Cap 17 você criou MapaGinasio() com GoogleMap + Marker, e nas Práticas Obrigatórias fez checarProximidade (comparando apenas a latitude) e verificarChegada. Depois de completar as três Práticas, faça o exercício extra abaixo para tornar a verificação mais realista (latitude e longitude) e mostrar dois pinos no mapa.
💪 Exercício Extra 1: Proximidade Completa + Dois Marcadores (20 min)
Objetivo: Praticar a comparação de duas coordenadas com &&, e adicionar um segundo Marker ao mapa representando a posição do jogador.
Passos:
- Crie
checarProximidadeCompleta, comparando latitude e longitude:fun checarProximidadeCompleta( minhaLat: Double, minhaLong: Double, ginasioLat: Double, ginasioLong: Double ): String { val diferencaLat = Math.abs(minhaLat - ginasioLat) val diferencaLong = Math.abs(minhaLong - ginasioLong) return if (diferencaLat < 0.001 && diferencaLong < 0.001) { "Você chegou ao Ginásio!" } else { "Continue andando..." } } - Em
MapaGinasio(), adicione um segundoMarkerrepresentando “Você”:@Composable fun MapaGinasio() { val localGinasio = LatLng(-23.5505, -46.6333) val minhaLocalizacao = LatLng(-23.5510, -46.6340) // simulação para teste GoogleMap(modifier = Modifier.fillMaxSize()) { Marker( state = MarkerState(position = localGinasio), title = "Ginásio Master", snippet = "Batalha de Nível 20" ) Marker( state = MarkerState(position = minhaLocalizacao), title = "Você está aqui" ) } } - Teste
checarProximidadeCompletacom os valores delocalGinasioeminhaLocalizacaoacima, e depois comminhaLocalizacao = LatLng(-23.5505, -46.6333)(igual ao ginásio).
✅ Resultado Esperado
- O mapa exibe dois pinos: “Ginásio Master” e “Você está aqui”, em posições próximas, porém diferentes.
- Com coordenadas diferentes,
checarProximidadeCompletaretorna"Continue andando...". - Quando
minhaLocalizacaoé igual alocalGinasio, retorna"Você chegou ao Ginásio!"— só verdadeiro porque ambas as diferenças (diferencaLatediferencaLong) ficam abaixo de0.001.
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
| Os dois pinos aparecem na mesma posição | minhaLocalizacao e localGinasio foram definidas com os mesmos valores de LatLng |
Use valores levemente diferentes, como no exemplo (-23.5505 vs -23.5510) |
checarProximidadeCompleta retorna “Você chegou!” mesmo estando longe |
Trocou && por || — basta uma das diferenças ser pequena para retornar verdadeiro |
Use &&: as duas diferenças (latitude e longitude) precisam ser < 0.001 |
Unresolved reference: Math |
Faltou usar Math.abs(...) corretamente, ou o import automático do Kotlin não foi aplicado |
Math.abs(...) é da biblioteca padrão do Java/Kotlin — não precisa de import extra; confira a grafia |