🧩 Exercícios - Cap 17: PokeMap: Onde estão os Treinadores?

📖 Ver Cap 17

🎯 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:

  1. 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..."
        }
    }
    
  2. Em MapaGinasio(), adicione um segundo Marker representando “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"
            )
        }
    }
    
  3. Teste checarProximidadeCompleta com os valores de localGinasio e minhaLocalizacao acima, e depois com minhaLocalizacao = LatLng(-23.5505, -46.6333) (igual ao ginásio).

✅ Resultado Esperado


🆘 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

⬅️ Voltar para Exercícios