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

参考 Android 建议的 UX

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

魔方状态 / 公式播放

有类型的记法转换为转动与一致的魔方状态。渲染器队列为层转动生成动画,并保留块与面片的身份。公式按实际转动序列播放,支持播放、暂停和速度调整。

  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、校验和,以及原生库针对 16 KB 页面大小的对齐。

Kotlin 规模按物理行统计,包含注释、空行、buildSrc 和基准测试代码,排除测试目录。测试数量指 1 343 项 JVM 声明和 281 项 Android 声明,而非执行次数。文档包含回退文本;存在场景并不代表每节课都有练习。

baselineprofile · @Test
3

总文本量按受跟踪 UTF-8 文件的物理行统计,涵盖源文件、测试、XML/JSON 资源、Markdown 内容、本地化、文档、构建工具和 Web 源码。包含注释、空行和各语言副本;排除媒体、生成文件与构建输出、供应商代码、服务配置和临时 PLAN.md。这是项目文本输入的规模,并非可执行 LOC。

了解 Cubiq