📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.
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
- P19: Banco de Wakanda com MVVM & Room
- P20: Alliance Battle com Finite State Machine
- ➡️ P21 (este): Duelo Jedi com Física 2D & Colisão
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.
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
| 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 |
Vetor2D(x, y) suportando soma, produto escalar e magnitude.SurfaceView.onTouchEvent(MotionEvent).update().Float) para equilíbrio entre precisão e velocidade.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
| 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() |
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.
cd catalogo_projetos/android_p21_duelo_physics/mobile-android-kotlin
./gradlew test
./gradlew assembleDebug
| 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 ✅ |