Cubiq
engineering.mdImplementatie

Implementatie

Binnen in Cubiq

Achter elke draai van de kubus zit een eigen systeem: een wiskundig model, een 3D-engine en een oplosser die rekening houdt met de lesdoelen. De Android-app gebruikt Kotlin en Jetpack Compose.

Momentopname van het project

regels broncode en tekstbronnen
740 244
appmodules
39
fysieke Kotlin-regels buiten tests
136 019
taalvarianten
42
testdeclaratiestest* / androidTest* · @Test
1 624

stack.kt

Moderne Android-stack

Momentopname van het project
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 en Material 3 bepalen de interfacecomponenten en thema's. Adaptive verzorgt de indeling op basis van de venstergrootte en Navigation 3 de navigatie en het herstel van schermen. De toestand komt via Coroutines en Flow; Hilt verbindt de appmodules.

architecture.kt

Onafhankelijke applicatielagen

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%

Interface, domeincontracten en gegevens zitten in aparte modules; Hilt verbindt de implementaties. Compose ontvangt onveranderlijke toestand en expliciete gebeurtenissen. Room bewaart geschiedenis en leervoortgang, DataStore de instellingen, en Navigation 3 herstelt de stacks van de secties.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX volgens Android-richtlijnen

Cubiq past benaderingen toe die Google benadrukt in het Apps Experience Program: Compose, adaptieve indeling en edge-to-edge.

Op basis van de venstergrootte
Op een breed scherm staan theorie en praktijk naast elkaar. Op een compact scherm passen inhoud en navigatie zich aan de beschikbare ruimte aan; de venstergrootte bepaalt de indeling.
Native navigatie
Edge-to-edge houdt rekening met systeembalken en het toetsenbord. Navigation 3 bewaart de stacks van de secties en ondersteunt Predictive Back met een voorbeeld van de overgang terug.
Leesbaarheid en toegankelijkheid
Lichte en donkere thema's, tekstschaling en semantische navigatielabels helpen bij het gebruik met TalkBack en een toetsenbord. Bij grote letters blijven de sectienamen beschikbaar voor de schermlezer.
Google-richtlijnen · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometrie die de wiskunde volgt

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSL-shaders berekenen PBR-materialen, ruwheid en omgevingsverlichting. Model en animatie blijven gelijklopen: een stap terug voert de omgekeerde zet uit, en de camera houdt rekening met de ruimte tussen panelen.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Kubustoestand / formule afspelen

Getypeerde notatie wordt omgezet in zetten en consistente kubustoestanden. De rendererwachtrij animeert laagrotaties en behoudt de identiteit van stukken en facelets. Een formule speelt af als een reeks echte zetten, met afspelen, pauze en tempo-instelling.

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

Een stap vooruit animeert een nieuwe zet; een stap terug past de omgekeerde zet toe. Naar een positie springen herstelt de basisscène en doelreeks. Annulering stopt de uitgifte van volgende zetten; een gestarte draai wordt afgemaakt. De EGL-levenscyclus verwerkt pause/release; zonder GL blijft de leerroute zonder 3D beschikbaar.

solver.kt

Oplossingen voor de lesdoelen

  • BFS
  • Beam search
  • F2L

De eigen oplosser bouwt een oplossing uit formules en hulpzetten van de huidige les. SolverRequest bevat kubustoestand, doelstukken, vergrendelde doelen, toegestane formules, gevallen en oriëntatie. De planner volgt de volgorde van leerdoelen en beschermt opgeloste stukken.

Fasespecifieke planning gebruikt begrensde BFS, beam search en herkenning van F2L-gevallen. Validatie controleert de samenstelling van stukken, flips, twists en permutatiepariteit. Het zoekbeleid begrenst diepte en bundelbreedte. Een leswissel annuleert de zoekopdracht en voorkomt een verouderd resultaat.

Het resultaat is PracticePlan: stappen, formuleverwijzingen, een weergavetijdlijn en een uitvoeringstijdlijn. De uitleg behoudt de leeroriëntatie; de engine krijgt de volledige uitvoeringsreeks. Uitkomsten: plan / solved / invalid input / no constrained path.

  1. Kubustoestand
  2. Modelcontrole
  3. Leerplan
  4. 3D-oefening

content.md

Inhoud doorloopt het buildproces

De theorie staat in 756 Markdown-documenten en de praktijk is vastgelegd in 336 gelokaliseerde scenario's. Gradle controleert de vertaalstructuur en verwijzingen naar 316 eigen illustraties. De afbeeldingen zijn voorbereid in Blender/Cycles; de Android-engine gebruikt aparte procedurele geometrie.

workflow.md

Documentatie als code / agentworkflow

AGENTS.md
48
README.md
16

De repository is ingericht voor ontwikkeling met agents: de AGENTS.md-hiërarchie bepaalt verantwoordelijkheden, architectuurgrenzen en validatiecontroles; README.md-bestanden beschrijven modulecontracten, KDoc API en invarianten.

Architectuur-, ontwerp- en lokalisatiecontracten worden samen met de code geversioneerd. PLAN.md legt de scope en overdracht vast; contractwijzigingen werken de verantwoordelijke documentatie bij. Controles en generatie lopen via Gradle; CI bouwt beide winkelvarianten.

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%
Kwaliteit en telmethode

Tests omvatten onmogelijke kubustoestanden, behoud van opgeloste lagen, leerplannen, annulering van verouderde verzoeken, sessieherstel en gegevensimport. CI bouwt beide winkelvarianten; releasecontroles omvatten R8, APK/AAB, checksums en uitlijning van native bibliotheken voor pagina's van 16 KB.

De Kotlin-omvang telt fysieke regels, inclusief commentaar, lege regels, buildSrc en benchmarkcode, zonder testmappen. Het aantal tests betekent 1 343 JVM-declaraties en 281 Android-declaraties, geen uitvoeringen. Documenten bevatten fallbacktekst; een aanwezig scenario betekent niet dat elke les een oefening heeft.

baselineprofile · @Test
3

De totale tekst telt fysieke regels in bijgehouden UTF-8-bestanden: broncode, tests, XML/JSON-bronnen, Markdown-inhoud, lokalisatie, documentatie, buildgereedschap en webbroncode. Commentaar, lege regels en taalkopieën zijn inbegrepen. Media, gegenereerde of builduitvoer, externe code, serviceconfiguratie en de tijdelijke PLAN.md zijn uitgesloten. Dit meet de tekstinvoer van het project, geen uitvoerbare LOC.

Ontdek Cubiq