🔴 P03: Genius Game (Simon Says)

Este é o seu projeto de Transição. Você continuará usando o desenho em XML, mas escreverá toda a lógica em Kotlin. É aqui que você sentirá o poder da linguagem moderna!


🎯 Objetivo do Projeto

Criar o clássico jogo de memória das cores. O app pisca uma sequência de botões coloridos e o jogador deve repetir a sequência exata para ganhar pontos.


📖 Dicionário do Projeto

  • ViewBinding: É a forma moderna de conectar o XML ao Kotlin. Você não precisa mais de findViewById! O Kotlin cria uma “ponte” automática para você.

  • List / ArrayList: É uma “fila” de itens. Usaremos uma lista para guardar a sequência de cores que o computador sorteou.

  • Coroutine (Delay): Usaremos o delay do Kotlin para fazer as cores piscarem de forma suave.


🏗️ Passo a Passo (Wizard do Android Studio)

  1. Template: Empty Views Activity.

  2. Name: AppGeniusGamer_SeuNome.

  3. Package Name: br.com.curso.genius.

  4. Language: Kotlin.


🎨 Parte 1: As Cores (XML)

Crie 4 botões grandes na tela (Verde, Vermelho, Amarelo e Azul).

🎨 Padrão de Cores (Hexadecimal)

  • Verde: #4CAF50

  • Vermelho: #F44336

  • Amarelo: #FFEB3B

  • Azul: #2196F3


⚙️ Parte 2: A Lógica em Kotlin

O Diferencial do Kotlin:

Em Kotlin, você pode criar uma lista de botões e sorteá-los de forma muito simples:

val sorteado = listaDeBotoes.random()


✅ Gabarito Comentado (Lógica da Sequência)

 
class MainActivity : AppCompatActivity() {
 
    
 
    // Lista para guardar a sequência do computador
 
    private val sequenciaComputador = mutableListOf<Int>()
 
    private var passoJogador = 0
 
    private fun adicionarNovaCor() {
 
        // Sorteia um número de 0 a 3 (um para cada cor)
 
        val novaCor = (0..3).random()
 
        sequenciaComputador.add(novaCor)
 
        
 
        // Faz a sequência piscar na tela
 
        mostrarSequencia()
 
    }
 
    private fun verificarJogada(corClicada: Int) {
 
        if (corClicada == sequenciaComputador[passoJogador]) {
 
            passoJogador++
 
            if (passoJogador == sequenciaComputador.size) {
 
                // Jogador acertou tudo! Próximo nível.
 
                passoJogador = 0
 
                adicionarNovaCor()
 
            }
 
        } else {
 
            // ERROU! Game Over
 
            println("GAME OVER! Pontuação: ${sequenciaComputador.size - 1}")
 
            sequenciaComputador.clear()
 
        }
 
    }
 
}
 

📐 Organização de Pastas

Mesmo sendo XML, já comece a organizar:

br.com.curso.genius.ui.MainActivity

br.com.curso.genius.logic.GameEngine (Opcional: mover a lógica para cá).


??? 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’.