Cubiq
engineering.mdImplementering

Implementering

Inuti Cubiq

Varje vridning av kuben bygger på ett eget system: en matematisk modell, en 3D-motor och en lösare som tar hänsyn till lektionens mål. Android-appen använder Kotlin och Jetpack Compose.

Projektögonblicksbild

rader källkod och textresurser
740 244
appmoduler
39
fysiska Kotlin-rader utanför tester
136 019
språkvarianter
42
testdeklarationertest* / androidTest* · @Test
1 624

stack.kt

Modern Android-stack

Projektögonblicksbild
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 och Material 3 bestämmer gränssnittets komponenter och teman. Adaptive hanterar layout efter fönsterstorlek och Navigation 3 navigation och skärmåterställning. Tillståndet kommer via Coroutines och Flow; Hilt kopplar ihop appmodulerna.

architecture.kt

Oberoende lager i appen

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%

Gränssnitt, domänkontrakt och data ligger i separata moduler; Hilt kopplar ihop implementationerna. Compose får oföränderligt tillstånd och uttryckliga händelser. Room lagrar historik och inlärningsframsteg, DataStore inställningar, och Navigation 3 återställer avsnittens stackar.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX enligt Androids rekommendationer

Cubiq använder arbetssätt som Google lyfter fram i Apps Experience Program: Compose, adaptiv layout och edge-to-edge.

Efter fönsterstorlek
På en bred skärm visas teori och praktik sida vid sida. På en kompakt skärm anpassas innehåll och navigation till det tillgängliga utrymmet; fönsterstorleken styr layouten.
Native navigation
Edge-to-edge tar hänsyn till systemfält och tangentbord. Navigation 3 bevarar avsnittens stackar och stöder Predictive Back med en förhandsvisning av övergången tillbaka.
Läsbarhet och tillgänglighet
Ljusa och mörka teman, textskalning och semantiska navigationsetiketter underlättar användningen med TalkBack och tangentbord. Vid stor text finns avsnittens namn fortfarande tillgängliga för skärmläsaren.
Googles rekommendationer · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometri som följer matematiken

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSL-shaders beräknar PBR-material, råhet och omgivningsbelysning. Modell och animation är samordnade: ett steg tillbaka utför det omvända draget, och kameran tar hänsyn till utrymmet mellan panelerna.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Kubtillstånd / formeluppspelning

Typad notation omvandlas till drag och samordnade kubtillstånd. Rendererkön animerar lagervridningar och bevarar identiteten hos delar och facelets. Formeln spelas som en följd av riktiga drag, med uppspelning, paus och tempojustering.

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

Ett steg framåt animerar ett nytt drag; ett steg bakåt tillämpar det omvända draget. Ett positionshopp återställer grundscenen och målsekvensen. Avbrytning stoppar fler drag från att skickas; en påbörjad vridning slutförs. EGL-livscykeln hanterar pause/release; utan GL finns lärvägen kvar utan 3D.

solver.kt

Lösningar för lektionens mål

  • BFS
  • Beam search
  • F2L

Den egna lösaren bygger en lösning av den aktuella lektionens formler och hjälpdrag. SolverRequest innehåller kubtillstånd, måldelar, låsta mål, tillåtna formler, fall och orientering. Planeraren följer lärmålens ordning och skyddar lösta delar.

Fasspecifik planering använder begränsad BFS, strålsökning och identifiering av F2L-fall. Validering kontrollerar delarnas sammansättning, vändningar, vridningar och permutationsparitet. Sökpolicyn begränsar djup och strålbredd. Lektionsbyte avbryter sökningen och hindrar ett inaktuellt resultat.

Resultatet är PracticePlan: steg, formelreferenser, en visningstidslinje och en exekveringstidslinje. Förklaringen bevarar lärorienteringen; motorn får hela exekveringssekvensen. Utfall: plan / solved / invalid input / no constrained path.

  1. Kubens tillstånd
  2. Modellvalidering
  3. Inlärningsplan
  4. 3D-övning

content.md

Innehållet går genom bygget

Teorin finns i 756 Markdown-dokument och övningarna definieras i 336 lokaliserade scenarier. Gradle kontrollerar översättningsstrukturen och hänvisningar till 316 egna illustrationer. Grafiken förbereddes i Blender/Cycles; Android-motorn använder separat procedurell geometri.

workflow.md

Dokumentation som kod / arbete med agenter

AGENTS.md
48
README.md
16

Kodförrådet är organiserat för utveckling med agenter: AGENTS.md-hierarkin anger ansvar, arkitekturbegränsningar och valideringskontroller; README.md beskriver modulkontrakt, KDoc API och invarianter.

Arkitektur-, design- och lokaliseringskontrakt versionshanteras tillsammans med koden. PLAN.md dokumenterar omfattning och överlämning; kontraktsändringar uppdaterar ansvarig dokumentation. Kontroller och generering sker via Gradle; CI bygger båda butiksvarianterna.

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%
Kvalitet och räknemetod

Testerna omfattar omöjliga kubtillstånd, bevarande av lösta lager, inlärningsplaner, avbrutna inaktuella förfrågningar, sessionsåterställning och dataimport. CI bygger båda butiksvarianterna; versionskontroller omfattar R8, APK/AAB, kontrollsummor och justering av native-bibliotek för sidor på 16 KB.

Kotlin-omfånget räknar fysiska rader, inklusive kommentarer, tomma rader, buildSrc och benchmarkkod, utan testkataloger. Testantalet betyder 1 343 JVM-deklarationer och 281 Android-deklarationer, inte körningar. Dokumenten innehåller reservtext; ett scenario innebär inte att varje lektion har en övning.

baselineprofile · @Test
3

Den totala texten räknar fysiska rader i versionshanterade UTF-8-filer: källkod, tester, XML/JSON-resurser, Markdown-innehåll, lokalisering, dokumentation, byggverktyg och webbkällor. Kommentarer, tomma rader och språkkopior ingår. Media, genererade och byggda utdata, tredjepartskod, tjänstekonfiguration och tillfällig PLAN.md undantas. Detta mäter projektets textindata, inte körbara LOC.

Upptäck Cubiq