Cubiq
engineering.mdImplementação

Implementação

Por dentro do Cubiq

Cada giro do cubo depende de um sistema próprio: um modelo matemático, um motor 3D e um solucionador que considera os objetivos da lição. O aplicativo para Android usa Kotlin e Jetpack Compose.

Retrato do projeto

linhas de código-fonte e recursos de texto
740 244
módulos do aplicativo
39
linhas físicas de Kotlin fora dos testes
136 019
variantes de idioma
42
declarações de testestest* / androidTest* · @Test
1 624

stack.kt

Stack Android moderno

Retrato do projeto
Kotlin2.4.21
Compose BOM2026.09.00
Material 31.5.0-beta01
Adaptive1.3.0
Navigation 31.2.0
AGP9.4.1
KSP2.3.12
Gradle9.7.0
  • Kotlin
  • Jetpack Compose
  • Material 3
  • Adaptive
  • Navigation 3

Jetpack Compose e Material 3 definem os componentes e temas da interface. Adaptive ajusta o layout ao tamanho da janela, e Navigation 3 cuida da navegação e da restauração de telas. O estado chega por Coroutines e Flow; Hilt conecta os módulos do aplicativo.

architecture.kt

Camadas independentes do aplicativo

app01Hilt / DI
feature07Compose / ViewModel
  • onboarding
  • learning
  • lesson
  • practice
  • progress
  • settings
  • events
domain07contracts / use cases
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
data09repositories / storage
  • content
  • storage
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
core14UI kit / cube / solver
  • common
  • model
  • designsystem
  • uikit
  • navigation
  • analytics
  • crashlytics
  • ads
  • billing
  • push
  • hardware
  • cube
  • scrambleimage
  • solver
baselineprofile01startup / frame timing

feature → domain ← data

modulesΣ 39
  • app1
  • baselineprofile1
  • core14
  • data9
  • domain7
  • feature7
Kotlin · physical LOCΣ 136 019
feature
82 86360.9%
core
21 16715.6%
data
14 34110.5%
app
9 5147.0%
domain
6 7595.0%
buildSrc
9610.7%
baselineprofile
4140.3%

A interface, os contratos de domínio e os dados ficam em módulos separados; Hilt conecta as implementações. Compose recebe estado imutável e eventos explícitos. Room armazena o histórico e o progresso de aprendizagem, DataStore guarda as configurações e Navigation 3 restaura as pilhas das seções.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX com base nas recomendações do Android

O Cubiq implementa abordagens que o Google destaca no Apps Experience Program: Compose, layout adaptável e edge-to-edge.

Conforme o tamanho da janela
Em uma tela larga, teoria e prática ficam lado a lado. Em uma tela compacta, o conteúdo e a navegação se ajustam ao espaço disponível; o tamanho da janela determina o layout.
Navegação nativa
Edge-to-edge considera as barras do sistema e o teclado. Navigation 3 preserva as pilhas das seções e oferece suporte a Predictive Back com uma prévia da transição de volta.
Legibilidade e acessibilidade
Os temas claro e escuro, o ajuste do tamanho do texto e os rótulos semânticos de navegação ajudam a usar o aplicativo com TalkBack e um teclado. Com fontes grandes, os nomes das seções continuam disponíveis para o leitor de tela.
Recomendações do Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometria que segue a matemática

moving cubies
26
facelets
54
meshes
8
triangles
2 964

Os shaders GLSL calculam materiais PBR, rugosidade e iluminação do ambiente. O modelo e a animação ficam sincronizados: voltar um passo aplica o movimento inverso, e a câmera considera o espaço entre os painéis.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Estado do cubo / reprodução de fórmulas

A notação tipada se converte em movimentos e estados coerentes do cubo. A fila do renderer anima giros de camadas mantendo a identidade das peças e dos facelets. A fórmula é reproduzida como uma sequência de movimentos reais, com reprodução, pausa e ajuste do ritmo.

  1. Notation
  2. Cube state
  3. Move queue
  4. OpenGL ES 3.0

Avançar anima um novo movimento; voltar aplica o movimento inverso. Ir para uma posição restaura a cena-base e a sequência de destino. O cancelamento interrompe a emissão dos próximos movimentos; um giro já iniciado termina. O ciclo de vida EGL gerencia pause/release; sem GL, o percurso de aprendizagem continua disponível sem 3D.

solver.kt

Soluções para os objetivos da lição

  • BFS
  • Beam search
  • F2L

O solucionador próprio monta a solução com fórmulas e movimentos auxiliares da lição atual. SolverRequest inclui estado do cubo, peças-alvo, alvos bloqueados, fórmulas permitidas, casos e orientação. O planejador respeita a ordem dos objetivos de aprendizagem e protege as peças resolvidas.

O planejamento por fase usa BFS limitado, busca em feixe e reconhecimento de casos F2L. A validação verifica a composição das peças, inversões, torções e paridade de permutação. A política de busca limita profundidade e largura do feixe. Mudar de lição cancela a busca e impede um resultado desatualizado.

O resultado é PracticePlan: passos, referências a fórmulas, uma linha do tempo de exibição e outra de execução. A explicação mantém a orientação didática; o motor recebe a sequência completa de execução. Resultados: plan / solved / invalid input / no constrained path.

  1. Estado do cubo
  2. Validação do modelo
  3. Plano de aprendizagem
  4. Prática 3D

content.md

O conteúdo passa pela compilação

A teoria fica em 756 documentos Markdown, e a prática é definida em 336 cenários localizados. Gradle valida a estrutura das traduções e as referências a 316 ilustrações originais. Os gráficos foram preparados no Blender/Cycles; o motor Android usa uma geometria procedural separada.

workflow.md

Documentação como código / fluxo de agentes

AGENTS.md
48
README.md
16

O repositório é organizado para desenvolvimento com agentes: a hierarquia AGENTS.md define responsabilidades, restrições de arquitetura e etapas de validação; os README.md descrevem contratos dos módulos, e KDoc descreve API e invariantes.

Os contratos de arquitetura, design e localização são versionados junto ao código. PLAN.md registra escopo e passagem de trabalho; mudanças nos contratos incluem atualizações da documentação responsável. Verificações e geração passam por Gradle; CI compila as duas variantes de loja.

physical text linesΣ 740 244
Resources / localization
399 56854.0%
Kotlin · non-test
136 01918.4%
Lesson Markdown
132 64217.9%
Kotlin · JVM tests
46 6456.3%
Kotlin · Android tests
13 6361.8%
Build tooling / web
8 9851.2%
Documentation
2 7490.4%
Qualidade e metodologia de contagem

Os testes cobrem estados impossíveis do cubo, preservação de camadas resolvidas, planos de aprendizagem, cancelamento de solicitações desatualizadas, restauração de sessões e importação de dados. CI compila as duas variantes de loja; as verificações de lançamento incluem R8, APK/AAB, somas de verificação e alinhamento de bibliotecas nativas para páginas de 16 KB.

O volume de Kotlin conta linhas físicas, incluindo comentários, linhas em branco, buildSrc e código de benchmark, e exclui os diretórios de testes. A contagem de testes significa 1 343 declarações JVM e 281 declarações Android, não execuções. Os documentos incluem texto de fallback; a presença de um cenário não significa que toda lição tenha prática.

baselineprofile · @Test
3

O texto total conta linhas físicas de fontes UTF-8 versionadas: código, testes, recursos XML/JSON, conteúdo Markdown, localização, documentação, ferramentas de build e fontes web. Inclui comentários, linhas em branco e cópias de idiomas. Exclui mídia, saída gerada ou compilada, código de terceiros, configuração de serviços e o PLAN.md temporário. Mede as entradas textuais do projeto, não LOC executáveis.

Conheça o Cubiq