🧠 P02: Jogo da Memória Gamer
Neste projeto, você vai subir o nível! O desafio é criar um Jogo da Memória clássico com 8 cartas (4 pares). Você aprenderá a lidar com lógica de comparação, estados de interface e manipulação de recursos de imagem.
🎯 Objetivo do Projeto
Criar uma grade de 4x2 com imagens escondidas. O jogador clica em duas cartas: se forem iguais, elas ficam abertas; se forem diferentes, elas mostram o “verso” novamente após 0.8 segundos.
📥 Downloads de Assets
Para facilitar o seu desenvolvimento, disponibilizamos o pacote de imagens (Pokémons e Verso da Carta) pronto para uso:
Instruções de Instalação:
- Baixe o arquivo
.zipacima. - Extraia as imagens.
- No Android Studio, copie as imagens para a pasta
app/src/main/res/drawable/. - Certifique-se de que os nomes estão em minúsculo (ex:
poke_pikachu.png).
📖 Dicionário do Projeto
- GridLayout: Layout que organiza itens em grade (usaremos 4 linhas e 2 colunas).
- Handler: Ferramenta para criar um “atraso” (delay) na execução de um código.
- Tag: Etiqueta usada para identificar o conteúdo da carta no código Java.
- setImageResource: Comando Java para mudar a imagem exibida em um
ImageButton.
🏗️ Passo a Passo (Wizard do Android Studio)
- Template: Empty Views Activity (Java).
- Name:
AppMemoriaGamer_SeuNome. - Package Name:
br.com.curso.memoria. - Language: Java.
🎨 Parte 1: O Tabuleiro (XML)
Ajuste o GridLayout para columnCount="2" e rowCount="4". Adicione 8 ImageButton com IDs de card1 a card8.
<GridLayout
android:columnCount="2"
android:rowCount="4"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- Exemplo de um botão -->
<ImageButton
android:id="@+id/card1"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="fitCenter" />
<!-- Repita até o card8 -->
</GridLayout>⚙️ Parte 2: A Lógica (Java)
No onCreate, inicialize a lista de botões e a lista de nomes das imagens (tags). Use Collections.shuffle(tags) para embaralhar o jogo.
// CONCEITO CLÁSSICO: Mostra o verso da carta ao iniciar
card.setImageResource(R.drawable.card_back);
// REVELAR: Mostra a imagem real ao clicar
if (tag.equals("poke_pikachu")) {
carta.setImageResource(R.drawable.poke_pikachu);
}📐 Desenho no Fluxograma
Início -> Embaralhar -> Clique 1 (Revela) -> Clique 2 (Revela) -> Iguais? -> SIM (Trava) / NÃO (Esconde após delay)
🛠️ Requisitos de Configuração e Solução de Problemas
1. Sintaxe do XML (O erro do ponto)
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