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 съдържание, локализация, документация, build инструменти и уеб изходен код. Включва коментари, празни редове и езикови копия. Изключва медии, генерирани и build резултати, код на доставчици, конфигурации на услуги и временния PLAN.md. Това е обемът на текстовите входове на проекта, а не изпълними LOC.

Опознай Cubiq