🎮 P05: Quiz Gamer: O Teste de Conhecimento
Agora você vai criar um app interativo! O objetivo é um Quiz de 5 perguntas sobre o mundo dos games. Você aprenderá como o app “se lembra” da pontuação e como mudar de tela quando o jogo acabar.
🎯 Objetivo do Projeto
Criar um jogo de perguntas e respostas. Se o jogador acertar, ganha pontos; se errar, perde vida. No final, o app deve mostrar uma tela de “Vitória” ou “Game Over” baseada na pontuação.
📖 Dicionário do Projeto
-
State (Estado): É a “memória” do app. Usamos
remember { mutableStateOf(0) }para o app não esquecer a pontuação quando a tela for atualizada. -
Navigation: É o sistema de trilhos que leva o jogador da “Tela de Pergunta” para a “Tela de Resultado”.
-
Recomposition: É o nome chique para quando a tela “pisca” e se atualiza sozinha porque um valor (como a pontuação) mudou.
🏗️ Passo a Passo (Wizard do Android Studio)
-
Template: Empty Compose Activity.
-
Name:
AppQuizGamer_SeuNome. -
Package Name:
br.com.curso.quizgamer.
🎨 Parte 1: Gerenciando o Jogo (Estado)
No Compose, para o número na tela mudar quando você clica em um botão, você deve usar o Estado Reativo.
// 1. Criando o estado
var pontuacao by remember { mutableStateOf(0) }
var perguntaAtual by remember { mutableStateOf(0) }
// 2. Usando na tela
Text(text = "Pontuação: $pontuacao")
// 3. Mudando o valor
Button(onClick = { pontuacao += 10 }) {
Text("Acertar Resposta")
}
⚙️ Parte 2: A Navegação por Estado
Em apps simples, não precisamos de um sistema de rotas complexo. Podemos usar uma variável de estado para controlar qual tela mostrar!
var telaAtual by remember { mutableStateOf("quiz") }
when (telaAtual) {
"quiz" -> TelaDeQuiz(onFinish = { telaAtual = "resultado" })
"resultado" -> TelaDeResultado()
}✅ Gabarito Comentado (Lógica do Quiz)
@Composable
fun QuizGame() {
val perguntas = listOf(
"Qual o nome do protagonista de Zelda?",
"Qual console foi lançado em 1994?"
)
var indice by remember { mutableStateOf(0) }
var telaAtual by remember { mutableStateOf("quiz") }
if (telaAtual == "quiz") {
Column {
Text(text = "Pergunta ${indice + 1}: ${perguntas[indice]}")
Button(onClick = {
if (indice < perguntas.size - 1) {
indice++
} else {
telaAtual = "resultado"
}
}) {
Text("Próxima Pergunta")
}
}
} else {
// Tela de Resultado
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text("🏆 PARABÉNS!", fontSize = 24.sp, fontWeight = FontWeight.Bold)
Text("Você concluiu o quiz!")
}
}
}📂 Organização de Pastas
br.com.curso.quizgamer.ui.screens → QuizScreen.kt, ResultScreen.kt.
br.com.curso.quizgamer.navigation → AppNavigation.kt.
📐 Desenho no Draw.io
Desenhe o fluxo das perguntas:
Pergunta 1 -> Acertou? -> Próxima -> Fim da Lista? -> Tela de Vitória.
??? Requisitos de Configuração e Solução de Problemas
Se você encontrar erros ao tentar rodar este projeto, verifique os pontos abaixo:
1. Sintaxe do XML (Para projetos com XML)
No Android, dimensões não aceitam pontos decimais.
-
? Errado: android:padding=“16.dp”
-
? Correto: android:padding=“16dp”
2. Suporte ao AndroidX
O arquivo gradle.properties na raiz do projeto deve conter:
android.useAndroidX=true
android.enableJetifier=true
3. Estrutura de Pastas
O código fonte deve estar dentro de um módulo chamado app:
NomeDoProjeto/app/src/main/…
4. Recursos Obrigatórios
Certifique-se de ter os arquivos em res/values: colors.xml, strings.xml, themes.xml.
5. Configuração do Gradle
O arquivo settings.gradle na raiz deve conter include ‘:app’.