Livrets
Jeu d'entraînement aux tables de multiplication (Kotlin Multiplatform, Android + iOS).
Règles du jeu
- Au lancement, on configure : le nombre de questions (5–50), le temps par question (3–30 s) et la table maximum (1–12).
- Chaque question est une multiplication tirée au hasard dans les tables 1 à la table maximum :
soit
a × b = ?, soita × ? = b. On répond avec le pavé numérique. - Temps écoulé = réponse comptée comme fausse (une saisie en cours est auto-validée).
- Après chaque réponse, un feedback (vert/rouge) s'affiche 1,5 s puis la question suivante arrive.
- À la fin : score, taux de réussite, temps moyen et résumé de chaque réponse fausse.
- L'Historique conserve les parties passées et le taux de réussite cumulé par table.
Lancer l'application
Android
./gradlew :androidApp:installDebug # appareil/émulateur connecté
# ou générer l'APK :
./gradlew :androidApp:assembleDebug # androidApp/build/outputs/apk/debug/
iOS
Ouvrir iosApp/iosApp.xcodeproj dans Xcode et lancer le scheme iosApp sur un simulateur.
macOS desktop
Lancer l'application en fenêtre (480×800) depuis le terminal :
./gradlew :desktopApp:run
Les données sont stockées dans ~/.livrets/.
Play Jeux Services (Android)
Connexion silencieuse au lancement, envoi automatique du score en fin de partie et bouton « Classement » sur l'accueil (UI native Play Jeux). Hors connexion ou sans configuration console, tout échoue silencieusement : le jeu reste pleinement jouable.
Score soumis : round((somme des produits réussis) × 30 ÷ secondes par question).
Prérequis manuels dans Google Play Console :
- Créer l'app (package
com.livrets.androidApp). - Jouer → Play Jeux Services : créer le jeu, lier l'app Android, ajouter les
empreintes SHA-1 debug et release. L'
app_idgénéré est câblé dansandroidApp/src/main/res/values/games-ids.xml(meta-data dans le manifest). - Créer les 10 leaderboards avec les IDs
questions_5…questions_50(« 5 questions » … « 50 questions »). - Ajouter des testeurs Play Jeux Services pour valider la connexion en dev.
Publication Android (Play Store)
Générer l'App Bundle signé :
./gradlew :androidApp:bundleRelease # androidApp/build/outputs/bundle/release/androidApp-release.aab
La signature release lit androidApp/keystore.properties (gitigné) avec les clés
storeFile, storePassword, keyAlias, keyPassword. Sans ce fichier, le build
release échoue (volontairement) et seuls les builds debug restent possibles.
La keystore androidApp/livrets-release.keystore sert de clé d'upload Play :
la sauvegarder (avec keystore.properties), sinon plus de mises à jour possibles.
À chaque release : incrémenter versionCode dans androidApp/build.gradle.kts.
Tests
./gradlew :sharedUI:jvmTest # logique de jeu, générateur, persistance
Structure
sharedUI/: logique de jeu (game/), persistance (data/), UI Compose (ui/), thème (theme/)androidApp/: hôte AndroidiosApp/: hôte iOS (Xcode)