Cubiq
engineering.mdImplementare

Implementare

Cubiq din interior

Fiecare rotire a cubului se bazează pe un sistem propriu: un model matematic, un motor 3D și un rezolvator care ține cont de obiectivele lecției. Aplicația Android folosește Kotlin și Jetpack Compose.

Instantaneu al proiectului

linii de surse și resurse text
740 244
module ale aplicației
39
linii fizice Kotlin în afara testelor
136 019
variante lingvistice
42
declarații de testetest* / androidTest* · @Test
1 624

stack.kt

Stack Android modern

Instantaneu al proiectului
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 și Material 3 definesc componentele și temele interfeței. Adaptive gestionează dispunerea după dimensiunea ferestrei, iar Navigation 3 navigarea și restaurarea ecranelor. Starea ajunge prin Coroutines și Flow; Hilt conectează modulele aplicației.

architecture.kt

Straturi independente ale aplicației

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%

Interfața, contractele de domeniu și datele sunt în module separate; Hilt conectează implementările. Compose primește stare imuabilă și evenimente explicite. Room păstrează istoricul și progresul învățării, DataStore setările, iar Navigation 3 restaurează stivele secțiunilor.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX după recomandările Android

Cubiq implementează abordări pe care Google le evidențiază în Apps Experience Program: Compose, dispunere adaptivă și edge-to-edge.

După dimensiunea ferestrei
Pe un ecran lat, teoria și practica sunt alăturate. Pe un ecran compact, conținutul și navigarea se adaptează spațiului disponibil; dimensiunea ferestrei determină dispunerea.
Navigare nativă
Edge-to-edge ține cont de barele sistemului și de tastatură. Navigation 3 păstrează stivele secțiunilor și acceptă Predictive Back cu o previzualizare a tranziției de revenire.
Lizibilitate și accesibilitate
Temele luminoasă și întunecată, scalarea textului și etichetele semantice din navigare ajută la folosirea aplicației cu TalkBack și o tastatură. La fonturi mari, numele secțiunilor rămân disponibile cititorului de ecran.
Recomandările Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometrie care urmează matematica

moving cubies
26
facelets
54
meshes
8
triangles
2 964

Shaderele GLSL calculează materiale PBR, rugozitate și iluminare ambientală. Modelul și animația sunt sincronizate: revenirea cu un pas aplică mișcarea inversă, iar camera ține cont de spațiul dintre panouri.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Starea cubului / redarea formulelor

Notația tipizată se transformă în mișcări și stări coerente ale cubului. Coada rendererului animă rotirile straturilor, păstrând identitatea pieselor și faceleturilor. Formula se redă ca o secvență de mișcări reale, cu redare, pauză și reglarea ritmului.

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

Un pas înainte animă o mișcare nouă; un pas înapoi aplică mișcarea inversă. Saltul la o poziție restaurează scena de bază și secvența țintă. Anularea oprește emiterea mișcărilor următoare; o rotire începută se încheie. Ciclul de viață EGL gestionează pause/release; fără GL, parcursul de învățare rămâne disponibil fără 3D.

solver.kt

Soluții pentru obiectivele lecției

  • BFS
  • Beam search
  • F2L

Rezolvatorul propriu construiește soluția din formule și mișcări auxiliare ale lecției curente. SolverRequest include starea cubului, piese țintă, ținte blocate, formule permise, cazuri și orientare. Planificatorul respectă ordinea obiectivelor didactice și protejează piesele rezolvate.

Planificarea pe faze folosește BFS limitat, căutare în fascicul și recunoaștere a cazurilor F2L. Validarea verifică alcătuirea pieselor, inversările, răsucirile și paritatea permutărilor. Politica de căutare limitează adâncimea și lățimea fasciculului. Schimbarea lecției anulează căutarea și împiedică un rezultat învechit.

Rezultatul este PracticePlan: pași, referințe la formule, o cronologie de afișare și una de execuție. Explicația păstrează orientarea didactică; motorul primește secvența completă de execuție. Rezultate: plan / solved / invalid input / no constrained path.

  1. Starea cubului
  2. Validarea modelului
  3. Plan de învățare
  4. Practică 3D

content.md

Conținutul trece prin compilare

Teoria se află în 756 documente Markdown, iar practica este definită în 336 scenarii localizate. Gradle verifică structura traducerilor și referințele la 316 ilustrații originale. Grafica a fost pregătită în Blender/Cycles; motorul Android folosește geometrie procedurală separată.

workflow.md

Documentație ca cod / flux cu agenți

AGENTS.md
48
README.md
16

Depozitul este organizat pentru dezvoltare cu agenți: ierarhia AGENTS.md definește responsabilități, restricții arhitecturale și praguri de validare; README.md descriu contractele modulelor, KDoc API și invariantele.

Contractele de arhitectură, design și localizare sunt versionate alături de cod. PLAN.md consemnează scopul și predarea; schimbările contractelor actualizează documentația responsabilă. Verificările și generarea trec prin Gradle; CI compilează ambele variante pentru magazine.

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%
Calitate și metodă de numărare

Testele acoperă stări imposibile ale cubului, păstrarea straturilor rezolvate, planuri de învățare, anularea cererilor învechite, restaurarea sesiunilor și importul datelor. CI compilează ambele variante pentru magazine; verificările de lansare includ R8, APK/AAB, sume de control și alinierea bibliotecilor native pentru pagini de 16 KB.

Volumul Kotlin numără linii fizice, inclusiv comentarii, linii goale, buildSrc și cod de benchmark, fără directoarele de teste. Numărul de teste înseamnă 1 343 declarații JVM și 281 declarații Android, nu execuții. Documentele includ text de rezervă; existența unui scenariu nu înseamnă că fiecare lecție are practică.

baselineprofile · @Test
3

Textul total numără linii fizice în fișierele UTF-8 versionate: surse, teste, resurse XML/JSON, conținut Markdown, localizare, documentație, unelte de build și surse web. Include comentarii, linii goale și copii lingvistice. Exclude media, rezultate generate sau de build, cod de la furnizori, configurări de servicii și PLAN.md temporar. Este volumul intrărilor text ale proiectului, nu LOC executabile.

Descoperă Cubiq