Cubiq
engineering.mdImplémentation

Implémentation

À l'intérieur de Cubiq

Chaque rotation du cube repose sur un système propre : un modèle mathématique, un moteur 3D et un solveur qui tient compte des objectifs de la leçon. L'application Android utilise Kotlin et Jetpack Compose.

Instantané du projet

lignes de sources et de ressources textuelles
740 244
modules de l'application
39
lignes physiques de Kotlin hors tests
136 019
variantes linguistiques
42
déclarations de teststest* / androidTest* · @Test
1 624

stack.kt

Une pile Android moderne

Instantané du projet
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 et Material 3 définissent les composants et thèmes de l'interface. Adaptive adapte la disposition à la taille de la fenêtre, tandis que Navigation 3 gère la navigation et la restauration des écrans. L'état arrive via Coroutines et Flow ; Hilt relie les modules de l'application.

architecture.kt

Des couches indépendantes dans l'application

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%

L'interface, les contrats du domaine et les données sont répartis en modules ; Hilt relie les implémentations. Compose reçoit un état immuable et des événements explicites. Room stocke l'historique et la progression, DataStore conserve les réglages et Navigation 3 restaure les piles des sections.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

Une UX guidée par les recommandations Android

Cubiq met en œuvre des approches que Google souligne dans Apps Experience Program : Compose, disposition adaptative et edge-to-edge.

Selon la taille de la fenêtre
Sur un écran large, théorie et pratique sont côte à côte. Sur un écran compact, le contenu et la navigation s'adaptent à l'espace disponible ; la taille de la fenêtre détermine la disposition.
Navigation native
Edge-to-edge tient compte des barres système et du clavier. Navigation 3 préserve les piles des sections et prend en charge Predictive Back avec un aperçu de la transition de retour.
Lisibilité et accessibilité
Les thèmes clair et sombre, la mise à l'échelle du texte et les libellés sémantiques de navigation facilitent l'utilisation avec TalkBack et un clavier. Avec une grande police, les noms des sections restent accessibles au lecteur d'écran.
Recommandations de Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Une géométrie qui suit les mathématiques

moving cubies
26
facelets
54
meshes
8
triangles
2 964

Les shaders GLSL calculent les matériaux PBR, la rugosité et l'éclairage de l'environnement. Le modèle et l'animation restent synchronisés : revenir en arrière applique le mouvement inverse, et la caméra tient compte de l'espace entre les panneaux.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

État du cube / lecture des formules

La notation typée devient des mouvements et des états cohérents du cube. La file du renderer anime les rotations des couches en préservant l'identité des pièces et facelets. La formule se lit comme une séquence de mouvements réels, avec lecture, pause et réglage du rythme.

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

Avancer anime un nouveau mouvement ; reculer applique le mouvement inverse. Le déplacement dans la séquence restaure la scène de base et la séquence cible. L'annulation arrête l'émission des mouvements suivants ; une rotation commencée se termine. Le cycle de vie EGL gère pause/release ; sans GL, le parcours d'apprentissage reste utilisable sans 3D.

solver.kt

Une solution adaptée aux objectifs de la leçon

  • BFS
  • Beam search
  • F2L

Le solveur développé pour l'application construit une solution à partir des formules et mouvements auxiliaires de la leçon actuelle. SolverRequest comprend l'état du cube, les pièces cibles, les cibles verrouillées, les formules autorisées, les cas et l'orientation. Le planificateur respecte l'ordre des objectifs pédagogiques et protège les pièces résolues.

La planification par phase utilise BFS borné, recherche en faisceau et reconnaissance des cas F2L. La validation vérifie la composition des pièces, retournements, torsions et parité des permutations. La politique de recherche limite profondeur et largeur du faisceau. Changer de leçon annule la recherche et empêche un résultat obsolète.

Le résultat est PracticePlan : étapes, références aux formules, chronologie d'affichage et chronologie d'exécution. L'explication conserve l'orientation de la leçon ; le moteur reçoit la séquence complète d'exécution. Résultats : plan / solved / invalid input / no constrained path.

  1. État du cube
  2. Validation du modèle
  3. Plan d'apprentissage
  4. Pratique 3D

content.md

Le contenu passe par la compilation

La théorie se trouve dans 756 documents Markdown et la pratique est définie dans 336 scénarios localisés. Gradle valide la structure des traductions et les références à 316 illustrations originales. Les graphismes ont été préparés dans Blender/Cycles ; le moteur Android utilise une géométrie procédurale distincte.

workflow.md

Documentation comme code / travail avec les agents

AGENTS.md
48
README.md
16

Le dépôt est organisé pour le développement avec des agents : la hiérarchie AGENTS.md définit les responsabilités, contraintes architecturales et contrôles de validation ; les README.md décrivent les contrats des modules, KDoc les API et invariants.

Les contrats d'architecture, de design et de localisation sont versionnés avec le code. PLAN.md consigne le périmètre et la transmission ; les changements de contrats incluent la mise à jour de leur documentation de référence. Vérifications et génération passent par Gradle ; CI compile les deux variantes de boutique.

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é et méthode de comptage

Les tests couvrent les états impossibles du cube, la préservation des couches résolues, les plans d'apprentissage, l'annulation des requêtes obsolètes, la restauration des sessions et l'importation des données. CI compile les deux variantes de boutique ; les contrôles de publication comprennent R8, APK/AAB, les sommes de contrôle et l'alignement des bibliothèques natives pour les pages de 16 KB.

Le volume de Kotlin compte les lignes physiques, y compris les commentaires, les lignes vides, buildSrc et le code de benchmark, hors répertoires de tests. Le nombre de tests correspond à 1 343 déclarations JVM et 281 déclarations Android, pas à des exécutions. Les documents incluent le texte de repli ; la présence d'un scénario ne signifie pas que chaque leçon comporte un exercice pratique.

baselineprofile · @Test
3

Le texte total compte les lignes physiques des sources UTF-8 suivies : code, tests, ressources XML/JSON, contenu Markdown, localisation, documentation, outils de compilation et sources web. Les commentaires, lignes vides et copies des langues sont inclus. Sont exclus les médias, sorties générées ou compilées, code tiers, configurations de services et PLAN.md temporaire. Cela mesure les entrées textuelles du projet, pas les LOC exécutables.

Découvre Cubiq