Cubiq
engineering.mdРеалізація

Реалізація

Cubiq зсередини

За кожним поворотом куба стоїть власна система: математична модель, 3D-рушій і розв'язувач, який враховує цілі уроку. Застосунок для Android написано на Kotlin і Jetpack Compose.

Зріз проєкту

рядків вихідного коду й текстових ресурсів
740 244
модулів застосунку
39
фізичних рядків Kotlin поза тестами
136 019
мовні варіанти
42
оголошень тестівtest* / androidTest* · @Test
1 624

stack.kt

Сучасний Android-стек

Зріз проєкту
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 і Material 3 визначають компоненти та теми інтерфейсу. Adaptive відповідає за компонування за розміром вікна, а Navigation 3 за навігацію та відновлення екранів. Стан надходить через Coroutines і Flow; Hilt пов'язує модулі застосунку.

architecture.kt

Незалежні шари застосунку

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%

Інтерфейс, контракти предметної області та дані розділено на модулі; Hilt пов'язує реалізації. Compose отримує незмінний стан і явні події. Room зберігає історію та навчальний прогрес, DataStore налаштування, а Navigation 3 відновлює стеки розділів.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX за рекомендаціями Android

У Cubiq реалізовано підходи, які Google виділяє в Apps Experience Program: Compose, адаптивне компонування та edge-to-edge.

За розміром вікна
На широкому екрані теорія і практика розташовані поруч. На компактному екрані контент і навігація підлаштовуються під доступне місце; компонування визначається розміром вікна.
Нативна навігація
Edge-to-edge враховує системні панелі та клавіатуру. Navigation 3 зберігає стеки розділів і підтримує Predictive Back із попереднім переглядом переходу назад.
Читабельність і доступність
Світла й темна теми, масштабування тексту та семантичні підписи в навігації допомагають користуватися застосунком із TalkBack і клавіатурою. За великого шрифту назви розділів залишаються доступними для екранного читача.
Рекомендації Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Геометрія, що відповідає математиці

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSL-шейдери обчислюють матеріали PBR, шорсткість і освітлення оточенням. Модель та анімація узгоджені: крок назад застосовує зворотний хід, а камера враховує вільне місце між панелями.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Стан куба / відтворення формул

Типізована нотація перетворюється на ходи й узгоджені стани куба. Черга renderer анімує повороти шарів, зберігаючи ідентичність деталей і facelet-елементів. Формула відтворюється як послідовність реальних ходів, із запуском, паузою та налаштуванням темпу.

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

Крок уперед анімує новий хід; крок назад застосовує зворотний хід. Перехід до позиції відновлює базову сцену й цільову послідовність. Скасування зупиняє видачу наступних ходів; уже початий поворот завершується. Життєвий цикл EGL обробляє pause/release; без GL навчальний шлях залишається доступним без 3D.

solver.kt

Розв'язання відповідно до цілей уроку

  • BFS
  • Beam search
  • F2L

Власний розв'язувач будує розв'язання з формул і допоміжних ходів поточного уроку. SolverRequest містить стан куба, цільові деталі, заблоковані цілі, дозволені формули, випадки й орієнтацію. Планувальник дотримується порядку навчальних цілей і захищає вже складені деталі.

Планування за фазами використовує обмежений BFS, променевий пошук і розпізнавання випадків F2L. Валідація перевіряє склад деталей, перевертання, скручування та парність перестановок. Політика пошуку обмежує глибину й ширину променя. Зміна уроку скасовує пошук і не допускає застарілого результату.

Результат — PracticePlan: кроки, посилання на формули, часова шкала показу й часова шкала виконання. Пояснення зберігає навчальну орієнтацію; рушій отримує повну послідовність виконання. Результати: plan / solved / invalid input / no constrained path.

  1. Стан куба
  2. Перевірка моделі
  3. Навчальний план
  4. 3D-практика

content.md

Контент проходить через збирання

Теорія зберігається в 756 Markdown-документах, а практика описана в 336 локалізованих сценаріях. Gradle перевіряє структуру перекладів і посилання на 316 авторських ілюстрацій. Графіку підготовлено в Blender/Cycles; Android-рушій використовує окрему процедурну геометрію.

workflow.md

Документація як код / робота з агентами

AGENTS.md
48
README.md
16

Репозиторій організовано для розробки з агентами: ієрархія AGENTS.md визначає відповідальність, архітектурні обмеження та перевірки валідації; README.md описують контракти модулів, KDoc API та інваріанти.

Контракти архітектури, дизайну й локалізації версіонуються поруч із кодом. PLAN.md фіксує обсяг і передачу роботи; зміни контрактів оновлюють відповідальну документацію. Перевірки та генерація виконуються через Gradle; CI збирає обидва варіанти для магазинів.

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%
Якість і методика підрахунку

Тести охоплюють неможливі стани куба, збереження складених шарів, навчальні плани, скасування застарілих запитів, відновлення сесій та імпорт даних. CI збирає обидва варіанти для магазинів; релізні перевірки включають R8, APK/AAB, контрольні суми та вирівнювання native-бібліотек для сторінок 16 KB.

Обсяг Kotlin пораховано у фізичних рядках, включно з коментарями, порожніми рядками, buildSrc і benchmark-кодом, без тестових каталогів. Кількість тестів означає 1 343 JVM-оголошень і 281 Android-оголошень, а не виконань. Документи включають резервний текст; наявність сценарію не означає практику в кожному уроці.

baselineprofile · @Test
3

Загальний текст рахує фізичні рядки у відстежуваних UTF-8 файлах: вихідному коді, тестах, XML/JSON ресурсах, Markdown-контенті, локалізації, документації, інструментах збирання та web-коді. Включено коментарі, порожні рядки й копії локалей. Виключено медіа, згенеровані результати та вихід збирання, код постачальників, конфігурації сервісів і тимчасовий PLAN.md. Це обсяг текстових входів проєкту, а не виконувані LOC.

Знайомство з Cubiq