📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

⚔️ P21: Duelo Jedi (Física 2D & Colisão)

v1.0 — Android Nativo, Kotlin, Mecânica de Física 2D, Detecção de Colisão Geométrica (Círculo-Círculo e AABB), Game Loop e Renderização a 60 FPS

Série Prática Android Clássico — Projeto 21 de 21


🏛️ Visão Geral & Arquitetura Visual

O projeto Duelo Jedi encerra a trilha de especialização em desenvolvimento Android nativo explorando a construção de motores de jogos 2D a partir do zero. A aplicação implementa um Game Loop contínuo com delta-time ($\Delta t$), cálculos vetoriais de velocidade, aceleração e gravidade espacial, e algoritmos rigorosos de Detecção e Resolução de Colisão (Bounding Box AABB e Círculos Delimitadores) entre sabres de luz e projéteis de plasma, renderizados com alta performance em SurfaceView / Canvas 2D.

Fluxo Visual do Duelo Jedi com Física 2D e Colisão

📁 Estrutura de Pastas Anti-Colisão

Os motores físicos, entidades de jogo e telas residem na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p21_duelo_physics/
├── assets/
│   ├── mockup_duelo_fluxo.svg
│   ├── screenshot_01_duelo_arena.svg
│   ├── screenshot_02_duelo_acao.svg
│   └── screenshot_03_duelo_vitoria.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/duelojedi/
│   │   │       │   ├── physics/
│   │   │       │   │   ├── Vetor2D.kt
│   │   │       │   │   └── CollisionDetector.kt
│   │   │       │   ├── game/
│   │   │       │   │   └── GameSurfaceView.kt
│   │   │       │   └── MainActivity.kt
│   │   │       └── res/
│   │   └── build.gradle
│   ├── gradle/
│   ├── build.gradle
│   ├── gradlew
│   ├── settings.gradle
│   └── README.md
└── index.md

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

ID Persona Narrativa da Funcionalidade Critério de Aceitação Principal Prioridade
US-01 Cavaleiro Jedi / Jogador Quero mover o sabre de luz tocando e arrastando o dedo na arena de combate. Atualização instantânea da posição do sabre com rastreamento tátil. Alta
US-02 Jogador Quero rebater disparos de blaster interceptando a trajetória com o sabre. Detecção precisa de colisão com deflexão física do projétil. Alta
US-03 Jogador Quero que a física do jogo seja independente da taxa de quadros do celular do usuário. Uso estrito de $\Delta t$ (delta time) para cálculo de deslocamento. Alta
US-04 Desenvolvedor de Jogos Quero pausar a thread do loop de jogo quando o app for minimizado para não travar a CPU. Ciclo de vida integrado com SurfaceHolder.Callback. Média
US-05 Engenheiro de QA Quero testar as fórmulas matemáticas de intersecção entre esferas e retângulos com testes unitários. Suíte de testes validando funções puras de física vetorial. Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Player([fa:fa-user Jogador / Jedi])
    GameLoop[(fa:fa-arrows-spin Game Loop Thread)]
    Physics[(fa:fa-atom Motor de Física 2D)]

    subgraph AppJedi ["⚔️ Duelo Jedi (mobile-android-kotlin)"]
        UC01["Controlar Posição do Sabre"]
        UC02["Atualizar Posição dos Projéteis"]
        UC03["Avaliar Colisão Projétil x Sabre"]
        UC04["Defletir Vetor com Ricochete"]
        UC05["Renderizar Frame no Canvas"]
    end

    Player --> UC01
    GameLoop --> UC02
    UC02 --> Physics
    UC01 --> Physics
    Physics --> UC03
    UC03 -->|Intersecção| UC04
    Physics --> UC05
    UC05 --> GameLoop

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-03, US-05 mobile-android-kotlin/app/.../Vetor2D.kt testVetor2DMathOperations()
RF-02 US-02, US-05 mobile-android-kotlin/app/.../CollisionDetector.kt testCircleCollisionIntersection()
RF-03 US-03, US-04 mobile-android-kotlin/app/.../GameSurfaceView.kt testGameLoopThreadLifecycle()
RF-04 US-02 mobile-android-kotlin/app/.../CollisionDetector.kt testReflectionVectorCalculation()
RF-05 US-01 mobile-android-kotlin/app/.../GameSurfaceView.kt testTouchTrackingCoordinates()

🛠️ Implementação Guiada (CollisionDetector.kt)

ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em mobile-android-kotlin.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p21_duelo_physics/mobile-android-kotlin

2. Compile e execute os testes unitários do motor físico

./gradlew test
./gradlew assembleDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Biblioteca de Vetores 2D Operações de álgebra linear testadas e aprovadas PASS ✅
CP-02 Algoritmo de Colisão Intersecção circular e retangular com precisão analítica PASS ✅
CP-03 Game Loop com SurfaceView Thread dedicada rodando a 60 FPS sem engasgos PASS ✅
CP-04 Física com Delta Time Deslocamento suave independente do hardware do celular PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade do motor de física aprovados com 100% PASS ✅