Ajoute la meta-data com.google.android.gms.games.APP_ID référencée depuis res/values/games-ids.xml (app_id généré dans la Play Console) et documente le câblage dans le README.
85 lines
3.1 KiB
Markdown
85 lines
3.1 KiB
Markdown
# 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 = ?`, soit `a × ? = 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
|
||
|
||
```bash
|
||
./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 :
|
||
|
||
```bash
|
||
./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](https://play.google.com/console) :
|
||
|
||
1. Créer l'app (package `com.livrets.androidApp`).
|
||
2. Jouer → Play Jeux Services : créer le jeu, lier l'app Android, ajouter les
|
||
empreintes SHA-1 debug et release. L'`app_id` généré est câblé dans
|
||
`androidApp/src/main/res/values/games-ids.xml` (meta-data dans le manifest).
|
||
3. Créer les 10 leaderboards avec les IDs `questions_5` … `questions_50`
|
||
(« 5 questions » … « 50 questions »).
|
||
4. Ajouter des testeurs Play Jeux Services pour valider la connexion en dev.
|
||
|
||
## Publication Android (Play Store)
|
||
|
||
Générer l'App Bundle signé :
|
||
|
||
```bash
|
||
./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
|
||
|
||
```bash
|
||
./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 Android
|
||
- `iosApp/` : hôte iOS (Xcode)
|