Cubiq
engineering.mdImplementación

Implementación

Cubiq por dentro

Cada giro del cubo se apoya en un sistema propio: un modelo matemático, un motor 3D y un solucionador que tiene en cuenta los objetivos de la lección. La aplicación para Android usa Kotlin y Jetpack Compose.

Instantánea del proyecto

líneas de código fuente y recursos de texto
740 244
módulos de la aplicación
39
líneas físicas de Kotlin fuera de los tests
136 019
variantes de idioma
42
declaraciones de teststest* / androidTest* · @Test
1 624

stack.kt

Stack Android moderno

Instantánea del proyecto
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 y Material 3 definen los componentes y temas de la interfaz. Adaptive ajusta la distribución al tamaño de la ventana y Navigation 3 gestiona la navegación y la restauración de pantallas. El estado llega mediante Coroutines y Flow; Hilt conecta los módulos de la aplicación.

architecture.kt

Capas independientes de la aplicación

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%

La interfaz, los contratos de dominio y los datos se separan en módulos; Hilt conecta las implementaciones. Compose recibe un estado inmutable y eventos explícitos. Room almacena el historial y el progreso de aprendizaje, DataStore guarda los ajustes y Navigation 3 restaura las pilas de las secciones.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX según las recomendaciones de Android

Cubiq implementa enfoques que Google destaca en Apps Experience Program: Compose, distribución adaptable y edge-to-edge.

Según el tamaño de la ventana
En una pantalla ancha, la teoría y la práctica se muestran una junto a otra. En una pantalla compacta, el contenido y la navegación se ajustan al espacio disponible; el tamaño de la ventana determina la distribución.
Navegación nativa
Edge-to-edge tiene en cuenta las barras del sistema y el teclado. Navigation 3 conserva las pilas de las secciones y admite Predictive Back con una vista previa de la transición de regreso.
Legibilidad y accesibilidad
Los temas claro y oscuro, el escalado del texto y las etiquetas semánticas de navegación ayudan a usar la aplicación con TalkBack y un teclado. Con texto grande, los nombres de las secciones siguen disponibles para el lector de pantalla.
Recomendaciones de Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometría que sigue las matemáticas

moving cubies
26
facelets
54
meshes
8
triangles
2 964

Los shaders GLSL calculan los materiales PBR, la rugosidad y la iluminación del entorno. El modelo y la animación se mantienen sincronizados: retroceder aplica el movimiento inverso, y la cámara tiene en cuenta el espacio entre paneles.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Estado del cubo / reproducción de fórmulas

La notación tipada se convierte en movimientos y estados coherentes del cubo. La cola del renderer anima giros de capas conservando la identidad de piezas y facelets. La fórmula se reproduce como una secuencia de movimientos reales, con reproducción, pausa y ajuste del ritmo.

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

Avanzar anima un movimiento nuevo; retroceder aplica el movimiento inverso. Desplazarse a una posición restaura la escena base y la secuencia objetivo. La cancelación detiene la emisión de nuevos movimientos; el giro iniciado termina. El ciclo de vida EGL gestiona pause/release; sin GL, la ruta de aprendizaje sigue disponible sin 3D.

solver.kt

Soluciones para los objetivos de la lección

  • BFS
  • Beam search
  • F2L

El solucionador propio construye una solución con fórmulas y movimientos auxiliares de la lección actual. SolverRequest incluye estado del cubo, piezas objetivo, objetivos bloqueados, fórmulas permitidas, casos y orientación. El planificador respeta el orden de los objetivos de aprendizaje y protege las piezas resueltas.

La planificación por fase usa BFS acotado, búsqueda en haz y reconocimiento de casos F2L. La validación comprueba la composición de piezas, volteos y torsiones, y la paridad de permutaciones. La política de búsqueda limita profundidad y anchura del haz. Cambiar de lección cancela la búsqueda e impide un resultado obsoleto.

El resultado es PracticePlan: pasos, referencias a fórmulas, una línea temporal de visualización y otra de ejecución. La explicación mantiene la orientación de la lección; el motor recibe la secuencia completa de ejecución. Resultados: plan / solved / invalid input / no constrained path.

  1. Estado del cubo
  2. Validación del modelo
  3. Plan de aprendizaje
  4. Práctica 3D

content.md

El contenido pasa por la compilación

La teoría se almacena en 756 documentos Markdown, y la práctica se define en 336 escenarios localizados. Gradle valida la estructura de las traducciones y las referencias a 316 ilustraciones originales. Los gráficos se prepararon en Blender/Cycles; el motor Android usa una geometría procedural independiente.

workflow.md

Documentación como código / flujo de agentes

AGENTS.md
48
README.md
16

El repositorio está organizado para el desarrollo con agentes: la jerarquía AGENTS.md define responsabilidades, restricciones arquitectónicas y controles de validación; los README.md describen contratos de módulos y KDoc la API y las invariantes.

Los contratos de arquitectura, diseño y localización se versionan junto al código. PLAN.md registra alcance y traspaso; los cambios de contratos incluyen actualizaciones de la documentación responsable. Las comprobaciones y la generación pasan por Gradle; CI compila ambas variantes de tienda.

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%
Calidad y metodología de recuento

Los tests cubren estados imposibles del cubo, la conservación de capas resueltas, los planes de aprendizaje, la cancelación de solicitudes obsoletas, la restauración de sesiones y la importación de datos. CI compila ambas variantes de tienda; las comprobaciones de publicación incluyen R8, APK/AAB, sumas de comprobación y alineación de bibliotecas nativas para páginas de 16 KB.

El volumen de Kotlin cuenta líneas físicas, incluidos comentarios, líneas en blanco, buildSrc y código de benchmark, y excluye los directorios de tests. El número de tests corresponde a 1 343 declaraciones JVM y 281 declaraciones Android, no a ejecuciones. Los documentos incluyen texto de respaldo; la existencia de un escenario no implica que cada lección tenga práctica.

baselineprofile · @Test
3

El texto total cuenta líneas físicas de fuentes UTF-8 bajo control de versiones: código, tests, recursos XML/JSON, contenido Markdown, localización, documentación, herramientas de compilación y fuentes web. Incluye comentarios, líneas en blanco y copias de idiomas. Excluye multimedia, salida generada o compilada, código de terceros, configuración de servicios y el PLAN.md temporal. Mide las entradas de texto del proyecto, no LOC ejecutables.

Descubre Cubiq