Cubiq
engineering.mdImplementierung

Implementierung

Ein Blick in Cubiq

Jede Drehung des Würfels beruht auf einem eigenen System: einem mathematischen Modell, einer 3D-Engine und einem Löser, der die Lernziele berücksichtigt. Die Android-App nutzt Kotlin und Jetpack Compose.

Projektstand

Zeilen aus Quelltexten und Textressourcen
740 244
App-Module
39
physische Kotlin-Zeilen außerhalb von Tests
136 019
Sprachvarianten
42
Testdeklarationentest* / androidTest* · @Test
1 624

stack.kt

Moderner Android-Stack

Projektstand
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 und Material 3 bestimmen die Komponenten und Themes der Oberfläche. Adaptive passt das Layout an die Fenstergröße an, Navigation 3 übernimmt Navigation und Bildschirmwiederherstellung. Der Zustand kommt über Coroutines und Flow; Hilt verbindet die App-Module.

architecture.kt

Unabhängige Anwendungsschichten

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%

Oberfläche, Domänenverträge und Daten liegen in getrennten Modulen; Hilt verbindet die Implementierungen. Compose erhält unveränderlichen Zustand und explizite Ereignisse. Room speichert Verlauf und Lernfortschritt, DataStore die Einstellungen, und Navigation 3 stellt die Stapel der Bereiche wieder her.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

UX nach Android-Empfehlungen

Cubiq setzt Ansätze um, die Google im Apps Experience Program hervorhebt: Compose, adaptive Layouts und edge-to-edge.

Nach Fenstergröße
Auf breiten Bildschirmen stehen Theorie und Praxis nebeneinander. Auf kompakten Bildschirmen passen sich Inhalt und Navigation dem verfügbaren Platz an; die Fenstergröße bestimmt das Layout.
Native Navigation
Edge-to-edge berücksichtigt Systemleisten und Tastatur. Navigation 3 erhält die Stapel der Bereiche und unterstützt Predictive Back mit einer Vorschau des Übergangs zurück.
Lesbarkeit und Barrierefreiheit
Helle und dunkle Themes, Textskalierung und semantische Navigationsbeschriftungen helfen bei der Nutzung mit TalkBack und Tastatur. Bei großer Schrift bleiben die Bereichsnamen für den Screenreader zugänglich.
Empfehlungen von Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Geometrie, die der Mathematik folgt

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSL-Shader berechnen PBR-Materialien, Rauheit und Umgebungsbeleuchtung. Modell und Animation bleiben synchron: Ein Schritt zurück führt den inversen Zug aus, und die Kamera berücksichtigt den Platz zwischen den Bedienfeldern.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Würfelzustand / Formelwiedergabe

Typisierte Notation wird in Züge und konsistente Würfelzustände übersetzt. Die Renderer-Warteschlange animiert Schichtdrehungen und erhält die Identitäten von Teilen und Facelets. Eine Formel wird als Folge realer Züge abgespielt, mit Start, Pause und Tempoeinstellung.

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

Ein Schritt vorwärts animiert einen neuen Zug; rückwärts wird der inverse Zug angewandt. Ein Sprung in der Folge stellt Basisszene und Zielsequenz wieder her. Abbruch stoppt die Ausgabe weiterer Züge; eine begonnene Drehung endet regulär. Der EGL-Lebenszyklus behandelt pause/release; ohne GL bleibt der Lernpfad ohne 3D nutzbar.

solver.kt

Lösungen für die Lernziele

  • BFS
  • Beam search
  • F2L

Der eigene Löser erstellt eine Lösung aus Formeln und Hilfszügen der aktuellen Lektion. SolverRequest umfasst Würfelzustand, Zielteile, gesperrte Ziele, erlaubte Formeln, Fälle und Orientierung. Der Planer hält die Reihenfolge der Lernziele ein und schützt bereits gelöste Teile.

Die phasenspezifische Planung nutzt begrenztes BFS, Beam Search und F2L-Fallerkennung. Die Validierung prüft Teilezusammensetzung, Flips, Twists und Permutationsparität. Die Suchrichtlinie begrenzt Tiefe und Strahlbreite. Ein Lektionswechsel bricht die Suche ab und verhindert ein veraltetes Ergebnis.

Das Ergebnis ist PracticePlan: Schritte, Formelreferenzen, eine Anzeige- und eine Ausführungszeitleiste. Die Erläuterung erhält die Orientierung der Lektion; die Engine bekommt die gesamte Ausführungsfolge. Ergebnisse: plan / solved / invalid input / no constrained path.

  1. Würfelzustand
  2. Modellprüfung
  3. Lernplan
  4. 3D-Übung

content.md

Inhalte durchlaufen den Build

Die Theorie liegt in 756 Markdown-Dokumenten, die Praxis ist in 336 lokalisierten Szenarien definiert. Gradle prüft die Übersetzungsstruktur und Verweise auf 316 eigens erstellte Illustrationen. Die Grafiken wurden in Blender/Cycles vorbereitet; die Android-Engine verwendet eine separate prozedurale Geometrie.

workflow.md

Docs as code / Agenten-Workflow

AGENTS.md
48
README.md
16

Das Repository ist für Entwicklung mit Agenten organisiert: Die AGENTS.md-Hierarchie legt Zuständigkeiten, Architekturvorgaben und Validierungsprüfungen fest; README.md-Dateien beschreiben Modulverträge, KDoc API und Invarianten.

Architektur-, Design- und Lokalisierungsverträge werden neben dem Code versioniert. PLAN.md hält Umfang und Übergabe fest; Vertragsänderungen aktualisieren die zuständige Dokumentation. Prüfungen und Generierung laufen über Gradle; CI baut beide Store-Varianten.

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%
Qualität und Zählmethodik

Tests decken unmögliche Würfelzustände, den Erhalt gelöster Schichten, Lernpläne, den Abbruch veralteter Anfragen, die Wiederherstellung von Sitzungen und den Datenimport ab. CI baut beide Store-Varianten; Release-Prüfungen umfassen R8, APK/AAB, Prüfsummen und die Ausrichtung nativer Bibliotheken für 16 KB große Speicherseiten.

Der Kotlin-Umfang zählt physische Zeilen einschließlich Kommentaren, Leerzeilen, buildSrc und Benchmark-Code, ohne Testverzeichnisse. Die Testzahl bezeichnet 1 343 JVM-Deklarationen und 281 Android-Deklarationen, keine Ausführungen. Dokumente enthalten Fallback-Text; ein vorhandenes Szenario bedeutet nicht, dass jede Lektion eine Übung enthält.

baselineprofile · @Test
3

Der Gesamttext zählt physische Zeilen in versionierten UTF-8-Dateien: Quellcode, Tests, XML/JSON-Ressourcen, Markdown-Inhalte, Lokalisierung, Dokumentation, Build-Werkzeuge und Web-Quelltexte. Kommentare, Leerzeilen und Sprachkopien sind enthalten. Medien, generierte oder Build-Ausgaben, Fremdcode, Dienstkonfigurationen und die temporäre PLAN.md sind ausgeschlossen. Dies misst die Texteingaben des Projekts, keine ausführbaren LOC.

Entdecke Cubiq