Cubiq
engineering.mdImplementazione

Implementazione

Dentro Cubiq

Ogni rotazione del cubo si basa su un sistema proprio: un modello matematico, un motore 3D e un risolutore che considera gli obiettivi della lezione. L'app Android usa Kotlin e Jetpack Compose.

Istantanea del progetto

righe di sorgenti e risorse testuali
740 244
moduli dell'app
39
righe fisiche di Kotlin fuori dai test
136 019
varianti linguistiche
42
dichiarazioni di testtest* / androidTest* · @Test
1 624

stack.kt

Stack Android moderno

Istantanea del progetto
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 definiscono componenti e temi dell'interfaccia. Adaptive gestisce il layout in base alla dimensione della finestra, mentre Navigation 3 gestisce navigazione e ripristino delle schermate. Lo stato arriva tramite Coroutines e Flow; Hilt collega i moduli dell'app.

architecture.kt

Livelli indipendenti dell'applicazione

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%

Interfaccia, contratti di dominio e dati sono in moduli separati; Hilt collega le implementazioni. Compose riceve uno stato immutabile ed eventi espliciti. Room conserva cronologia e progressi, DataStore le impostazioni, mentre Navigation 3 ripristina gli stack delle sezioni.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX secondo le raccomandazioni Android

Cubiq implementa approcci che Google evidenzia in Apps Experience Program: Compose, layout adattivo ed edge-to-edge.

In base alla dimensione della finestra
Su uno schermo ampio, teoria e pratica sono affiancate. Su uno schermo compatto, contenuto e navigazione si adattano allo spazio disponibile; la dimensione della finestra determina il layout.
Navigazione nativa
Edge-to-edge tiene conto delle barre di sistema e della tastiera. Navigation 3 conserva gli stack delle sezioni e supporta Predictive Back con un'anteprima della transizione di ritorno.
Leggibilità e accessibilità
Temi chiaro e scuro, ridimensionamento del testo ed etichette semantiche nella navigazione aiutano a usare l'app con TalkBack e una tastiera. Con caratteri grandi, i nomi delle sezioni restano accessibili al lettore di schermo.
Raccomandazioni Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometria che segue la matematica

moving cubies
26
facelets
54
meshes
8
triangles
2 964

Gli shader GLSL calcolano materiali PBR, rugosità e illuminazione ambientale. Modello e animazione restano sincronizzati: tornare indietro applica la mossa inversa, e la fotocamera considera lo spazio tra i pannelli.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Stato del cubo / riproduzione delle formule

La notazione tipizzata diventa mosse e stati coerenti del cubo. La coda del renderer anima rotazioni degli strati conservando l'identità di pezzi e facelet. La formula si riproduce come una sequenza di mosse reali, con riproduzione, pausa e regolazione del ritmo.

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

Avanzare anima una nuova mossa; tornare indietro applica la mossa inversa. Spostarsi a una posizione ripristina scena di base e sequenza di destinazione. L'annullamento ferma l'emissione di nuove mosse; una rotazione iniziata si completa. Il ciclo di vita EGL gestisce pause/release; senza GL, il percorso di apprendimento resta disponibile senza 3D.

solver.kt

Soluzioni per gli obiettivi della lezione

  • BFS
  • Beam search
  • F2L

Il risolutore sviluppato per l'app costruisce una soluzione con formule e mosse ausiliarie della lezione attuale. SolverRequest comprende stato del cubo, pezzi obiettivo, obiettivi bloccati, formule consentite, casi e orientamento. Il pianificatore rispetta l'ordine degli obiettivi didattici e protegge i pezzi risolti.

La pianificazione per fase usa BFS limitato, ricerca a fascio e riconoscimento dei casi F2L. La validazione verifica composizione dei pezzi, capovolgimenti, torsioni e parità delle permutazioni. La politica di ricerca limita profondità e ampiezza del fascio. Cambiare lezione annulla la ricerca e impedisce un risultato obsoleto.

Il risultato è PracticePlan: passi, riferimenti alle formule, timeline di visualizzazione e timeline di esecuzione. La spiegazione mantiene l'orientamento della lezione; il motore riceve l'intera sequenza di esecuzione. Esiti: plan / solved / invalid input / no constrained path.

  1. Stato del cubo
  2. Validazione del modello
  3. Piano di apprendimento
  4. Pratica 3D

content.md

Il contenuto passa dalla compilazione

La teoria è in 756 documenti Markdown e la pratica è definita in 336 scenari localizzati. Gradle verifica la struttura delle traduzioni e i riferimenti a 316 illustrazioni originali. La grafica è stata preparata in Blender/Cycles; il motore Android usa una geometria procedurale separata.

workflow.md

Documentazione come codice / flusso degli agenti

AGENTS.md
48
README.md
16

Il repository è organizzato per lo sviluppo con agenti: la gerarchia AGENTS.md definisce responsabilità, vincoli architetturali e controlli di validazione; i README.md descrivono i contratti dei moduli, KDoc le API e le invarianti.

I contratti di architettura, design e localizzazione sono versionati insieme al codice. PLAN.md registra ambito e passaggio di consegne; le modifiche ai contratti aggiornano la documentazione di riferimento. Controlli e generazione passano da Gradle; CI compila entrambe le varianti per gli store.

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%
Qualità e metodo di conteggio

I test coprono stati impossibili del cubo, conservazione degli strati risolti, piani di apprendimento, annullamento delle richieste obsolete, ripristino delle sessioni e importazione dei dati. CI compila entrambe le varianti per gli store; i controlli di rilascio includono R8, APK/AAB, checksum e allineamento delle librerie native per pagine da 16 KB.

Il volume di Kotlin conta le righe fisiche, inclusi commenti, righe vuote, buildSrc e codice benchmark, esclusi i percorsi dei test. Il numero di test indica 1 343 dichiarazioni JVM e 281 dichiarazioni Android, non esecuzioni. I documenti includono testo di fallback; la presenza di uno scenario non implica una pratica in ogni lezione.

baselineprofile · @Test
3

Il testo totale conta righe fisiche in fonti UTF-8 versionate: codice, test, risorse XML/JSON, contenuti Markdown, localizzazione, documentazione, strumenti di build e sorgenti web. Include commenti, righe vuote e copie delle lingue. Esclude media, output generato o compilato, codice di terzi, configurazioni di servizi e PLAN.md temporaneo. Misura gli input testuali del progetto, non LOC eseguibili.

Scopri Cubiq