📊 Slides: Cap 12 — Arquitetura de Jogo (MVVM)
Resumo visual da aula, em blocos — use como roteiro de revisão ou apresentação.
🟦 Slide 1: Objetivo da Aula
- Entender o padrão MVVM (Model-View-ViewModel).
- Separar o “Cérebro” do jogo (lógica) do “Corpo” (interface visual).
🟦 Slide 2: O Cenário Prático
Até agora, a lógica e a tela viviam juntas na mesma função — virou bagunça. Crie o Motor do Jogo (ViewModel): a vida do personagem é calculada separadamente, e a tela só desenha.
🟦 Slide 3: Dicionário do Programador
| Termo | Significado |
|---|---|
| View (Visão) | A tela (Compose) — só desenha o que o Garçom traz |
| ViewModel (O Garçom) | Quem manda no estado — faz cálculos e avisa a tela |
| Encapsulamento | Esconder dados sensíveis: a tela não muda a vida direto, pede ao Garçom |
📂 Mapa das Pastas: ui/screens/ (Composables) + ui/viewmodel/ (ViewModels)
🟦 Slide 4: View ↔ ViewModel ↔ Model
graph TD
A["View: Tela do Game"] <-->|Observa o Estado| B["ViewModel: Garçom da Lógica"]
B <-->|Gerencia| C["Model: Dados do Personagem"]
🟦 Slide 5: Exemplo — O Garçom de Pontos
class JogoViewModel : ViewModel() {
// 1. O dado secreto (Só o Garçom mexe)
private val _pontos = mutableStateOf(0)
// 2. O dado que a tela pode ver
val pontos: State<Int> = _pontos
// 3. A ação que muda o dado
fun ganharPonto() {
_pontos.value += 10
}
}
🟦 Slide 6: Prática e Próximos Passos
- 🛠️ Prática 1:
PersonagemViewModelcomvida(começa em 100) ereceberDano(). - 🛠️ Prática 2:
ArenaScreenexibindo a vida e botão “Receber Golpe”. - 💪 Exercício extra: contador de golpes + botão “Reiniciar”.
- 🧠 Quiz: teste seus conhecimentos.
- ➡️ Próximo capítulo: Cap 13 — Conectando ao Mundo (PokeAPI).