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

  1. Baixe o arquivo .zip acima.
  2. Extraia as imagens.
  3. No Android Studio, copie as imagens para a pasta app/src/main/res/drawable/.
  4. 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)

  1. Template: Empty Views Activity (Java).
  2. Name: AppMemoriaGamer_SeuNome.
  3. Package Name: br.com.curso.memoria.
  4. 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