1. Changelog complet des améliorations 2025 :

-  Corrections orthographe (MainActivity, question.json, strings.xml, Jeuxold.java)
  -  Optimisation aléatoire (instance unique Random)
  -  Interface utilisateur cohérente (champs dynamiques)
  -  Slider durée des défis (-5 à +15 manches)
  -  Gestion intelligente des défis (pas d'accumulation)
  -  Bug fix fin de jeu (flag isFinishingGame)
  -  Expansion contenu (50 nouvelles questions, passage de 100 à 150)
This commit is contained in:
feldenr
2026-01-01 23:14:51 +01:00
parent 9bcbc79706
commit 5ceeff6a4c
14 changed files with 1116 additions and 619 deletions
+204 -165
View File
@@ -10,6 +10,7 @@
6. [Architecture](#architecture)
7. [Composants et Leurs Relations](#composants-et-leurs-relations)
8. [Configuration](#configuration)
9. [Changelog et Améliorations Récentes](#changelog-et-améliorations-récentes)
---
@@ -20,18 +21,20 @@
### Caractéristiques Principales
- **Jeu multijoueur** (minimum 3 joueurs, sans maximum)
- **115 questions préchargées** depuis un fichier JSON
- **150 questions préchargées** depuis un fichier JSON
- **Interface en français** avec Material Design 3
- **Défis multi-manches** avec système de gestion
- **Paramètres personnalisables** (nombre de questions, ajout de gorgées, durée des défis)
- **Générateur aléatoire optimisé** pour une vraie randomisation
- **Intégration OpenAI** (en développement)
- **Connexion PostgreSQL** (prête)
- **Interface moderne et responsive**
---
## 📁 Structure du Projet
```
C:\Users\polar\Documents\boidelo\
D:\boidelo\
├── .gradle/ # Cache de construction Gradle
├── .idea/ # Configuration IntelliJ IDEA
├── app/
@@ -43,23 +46,34 @@ C:\Users\polar\Documents\boidelo\
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ ── question.json # Base de données questions (115 questions)
│ │ └── questionOLD.json
│ │ ── question.json # Base de données questions (150 questions)
│ ├── java/com/example/boidelov3/
│ │ ├── MainActivity.java
│ │ ├── Jeux.java # Activité principale du jeu
│ │ ├── Jeuxold.java # Implémentation héritée
│ │ ├── JeuxParametres.java # Paramètres du jeu
│ │ ├── ChatGPTTask.java # Intégration OpenAI (commenté)
│ │ ├── MainActivity.java # Écran principal avec ajout dynamique de joueurs
│ │ ├── Jeux.java # Activité principale du jeu avec gestion des défis
│ │ ├── Jeuxold.java # Implémentation héritée
│ │ ├── JeuxParametres.java # Paramètres du jeu avec sliders
│ │ ├── EndGameActivity.java # Écran de fin de partie
│ │ ├── ChatGPTTask.java # Intégration OpenAI (commenté)
│ │ ├── DatabaseConnection.java # Connexion PostgreSQL
│ │ ├── Question.java # Modèle de données Question
│ │ ── Questions.java # Conteneur de questions
│ │ ├── data/
│ │ │ ├── Question.java # Modèle de données Question
│ │ │ └── QuestionRepository.java # Repository des questions
│ │ ├── game/
│ │ │ └── GameEngine.java # Moteur de jeu
│ │ └── utils/
│ │ ├── BoideloAnimationUtils.java # Animations UI
│ │ └── OnBoardingActivity.java # Page d'accueil
│ └── res/
│ ├── anim/ # Animations
│ ├── drawable/ # Icônes et graphiques
│ ├── layout/ # Layouts UI (4 fichiers XML)
│ ├── layout/ # Layouts UI
│ │ ├── activity_main.xml # Écran principal
│ │ ├── activity_jeux.xml # Jeu en cours
│ │ ├── activity_jeux_parametres.xml # Paramètres
│ │ └── activity_end_game.xml # Fin de partie
│ ├── mipmap-*/ # Icônes pour différentes densités
│ ├── values/ # Chaînes, couleurs, thèmes
│ │ └── strings.xml # Textes localisés
│ ├── values-night/ # Ressources mode nuit
│ └── xml/ # Fichiers de configuration XML
├── build.gradle # Configuration de build projet-level
@@ -76,78 +90,79 @@ C:\Users\polar\Documents\boidelo\
### Activités Principales
#### `MainActivity.java`
**Point d'entrée principal** de l'application.
**Point d'entrée principal** de l'application avec ajout dynamique de joueurs.
**Responsabilités :**
- Gestion de la saisie des noms de joueurs
- Gestion de la saisie des noms de joueurs (3 champs fixes + ajouts dynamiques)
- Validation du minimum de 3 joueurs
- Génération dynamique de l'interface utilisateur
- Génération dynamique de l'interface utilisateur avec TextInputLayout cohérents
- Persistence des noms avec SharedPreferences
- Compteur de joueurs en temps réel
**Améliorations récentes :**
- ✅ Correction de l'UI pour les champs dynamiques (bordure visible, espacement cohérent)
- ✅ Bouton suppression plus petit et mieux positionné
- ✅ Icône de suppression (poubelle) optimisée
#### `Jeux.java`
**Cœur du jeu**, gère l'affichage des questions et les mécaniques de jeu.
**Cœur du jeu**, gère l'affichage des questions, les mécaniques de jeu et les défis.
**Responsabilités :**
- Chargement des questions depuis le JSON
- Sélection aléatoire sans répétition
- Gestion des tours de joueurs
- Gestion des défis multi-manches
- Feedback visuel avec arrière-plans colorés
- Remplacement dynamique des variantes
- Remplacement dynamique des variantes et joueurs
**Améliorations récentes :**
-**Générateur aléatoire optimisé** : une seule instance `Random partagée` pour toute l'activité
-**Empêcher nouveaux défis quand un défi est en cours** : filtrage des questions avec `<manches>`
-**Bug fix fin de jeu** : flag `isFinishingGame` pour éviter les clics multiples
-**Offset durée des défis** : applique le paramètre `durationDefis` au nombre de manches (5-14 + offset)
#### `JeuxParametres.java`
**Écran de configuration** des paramètres du jeu.
**Écran de configuration** des paramètres du jeu avec sliders interactifs.
**Responsabilités :**
- Configuration du nombre de questions
- Gestion des comptes de boissons
- Configuration de l'API OpenAI
- Lancement de l'activité Jeux
- Configuration du nombre de questions (20-150, par pas de 10)
- Gestion des ajouts de gorgées (0-20) avec paliers de difficulté
- Configuration du ratio BDD/OPENAI (1/1 à 1/15)
- **Configuration de la durée des défis** (-5 à +15, par défaut 0)
- Gestion de la clé API OpenAI
- Test de connexion API
#### `Jeuxold.java`
**Version héritée** du jeu avec questions hardcodées (non utilisée activement).
**Améliorations récentes :**
- ✅ Correction des sliders : affichage en temps réel des valeurs
- ✅ Slider durée des défis avec valeurs négatives autorisées (offset de -5 à +15)
#### `EndGameActivity.java`
**Écran de fin de partie** avec statistiques.
**Responsabilités :**
- Affichage des statistiques de partie
- Boutons pour rejouer ou retourner au menu
### Modèles de Données
#### `Question.java`
**Modèle de données** pour une question individuelle.
**Propriétés :**
```java
public class Question {
private int id; // Identifiant unique
private String question; // Texte de la question
private int boire; // Nombre de boissons
private boolean donner; // Flag de distribution
private boolean recevoir; // Flag de réception
private List<String> variantes; // Variantes de la question
private int manches; // Nombre de manches
private String stop; // Message d'arrêt
private int gorger; // Nombre de gorgées
private boolean distribution; // Flag de distribution
private boolean recois; // Flag de réception
private List<String> variante; // Variantes de la question
private int manchesRestantes; // Nombre de manches restantes
private String arretMessageManche; // Message de fin de défi
}
```
#### `Questions.java`
**Classe conteneur** pour la liste de questions.
### Intégrations
#### `ChatGPTTask.java`
**Intégration OpenAI** pour la génération de questions avec ChatGPT.
**Statut :** Commenté / En développement
**Fonctionnalités prévues :**
- Génération dynamique de questions
- Appel API à OpenAI
- Traitement des réponses
#### `DatabaseConnection.java`
**Gestionnaire de connexion** à la base de données PostgreSQL.
**Configuration :**
- Hôte : 82.65.214.214
- Port : 5432
- Base de données : boidelo
- Utilisateur : android
#### `QuestionRepository.java`
**Repository** pour la gestion des questions avec filtrage.
---
@@ -155,38 +170,45 @@ public class Question {
### Gestion des Joueurs
- **Entrée dynamique** des noms de joueurs
- **3 champs fixes** pour les premiers joueurs
- **Ajout dynamique** de joueurs avec bouton de suppression
- **Minimum 3 joueurs** requis pour commencer
- **Support illimité** de nombre de joueurs
- **Persistance** avec SharedPreferences
- **Compteur en temps réel** : "Joueurs: X / min. 3"
### Système de Questions
- **115 questions préchargées** depuis JSON
- **Sélection aléatoire** sans répétition
- **150 questions préchargées** depuis JSON
- **Sélection aléatoire optimisée** sans répétition
- **Variantes** avec remplacement dynamique de contenu
- **Questions à manches** avec mécanique de compte à rebours
- **Filtrage intelligent** : pas de nouveau défi si un défi est en cours
### Mécaniques de Jeu
- **Ajustement dynamique** du nombre de boissons
- **Randomisation** des joueurs pour les questions
- **Ajustement dynamique** du nombre de gorgées via slider (0-20)
- **Randomisation optimisée** des joueurs pour les questions
- **Feedback visuel** avec arrière-plans colorés
- **Catégorisation** (distribution/réception)
- **Défis multi-manches** avec affichage du compteur
- **Système de paliers** : de "Grosse merde" à "L'ENDER DRAGON"
### Fonctionnalités Avancées
### Paramètres de Partie
- **Intégration OpenAI ChatGPT** (stade de développement)
- **Connectivité PostgreSQL** (prête)
- **Paramètres personnalisables**
- **Défis multi-manches**
| Paramètre | Plage | Défaut | Description |
|-----------|-------|--------|-------------|
| **Nombre de questions** | 20-150 (par 10) | 50 | Nombre de questions avant fin de partie |
| **Ajout de gorgées** | 0-20 | 0 | Gorgées supplémentaires à chaque consommation |
| **Ratio BDD/OPENAI** | 1/1 à 1/15 | 1/8 | Ratio entre questions locales et IA |
| **Durée des défis (offset)** | -5 à +15 | 0 | Offset appliqué au nombre de manches |
### Interface Utilisateur
- **Trois activités principales** : Main, Jeux, Paramètres
- **Interface Material Design 3**
- **Localisation en français**
- **Layout responsive avec ConstraintLayout**
- **Material Design 3** avec composants modernes
- **Animations fluides** (fade in, slide out, pop in)
- **Feedback haptique** sur les interactions
- **Localisation en français** entièrement corrigée
- **Mode sombre** avec thèmes adaptés
---
@@ -197,26 +219,29 @@ public class Question {
| Technologie | Version | Usage |
|-------------|---------|-------|
| **Android SDK** | 33 (compile) | Développement Android natif |
| **Java** | - | Langage principal |
| **Java** | 17 | Langage principal |
| **Gradle** | 8.2 | Automatisation de build |
### Bibliothèques Principales
```gradle
dependencies {
// Cœur Android
// Material Design
implementation 'com.google.android.material:material:1.12.0'
// Cœur AndroidX
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
// Réseau
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
// Base de données
implementation 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.3'
// Traitement JSON
implementation 'com.google.code.gson:gson:2.8.8'
implementation 'com.google.code.gson:gson:2.10.1'
// Tests
testImplementation 'junit:junit:4.13.2'
@@ -225,14 +250,6 @@ dependencies {
}
```
### Librairies Externes
| Librairie | Version | Utilisation |
|-----------|---------|-------------|
| **OkHttp** | 4.9.1 | Client HTTP pour appels API |
| **PostgreSQL JDBC** | 42.6.0 | Connectivité base de données |
| **Gson** | 2.8.8 | Sérialisation/désérialisation JSON |
---
## 🏗 Architecture
@@ -243,7 +260,7 @@ dependencies {
┌─────────────────────────────────────────────────┐
│ Model │
│ • Question.java │
│ • Questions.java
│ • QuestionRepository.java
└─────────────────────────────────────────────────┘
@@ -253,6 +270,7 @@ dependencies {
│ • MainActivity.java │
│ • Jeux.java │
│ • JeuxParametres.java │
│ • EndGameActivity.java │
└─────────────────────────────────────────────────┘
@@ -261,79 +279,64 @@ dependencies {
│ View │
│ • XML Layouts │
│ • Resources (drawable, strings, colors) │
│ • Animations │
└─────────────────────────────────────────────────┘
```
### Architecture Basée sur les Activités
### Flux des Activités
```
MainActivity
├── Gère l'entrée des joueurs
├── Valide le minimum de 3 joueurs
└── Lance JeuxParametres
JeuxParametres
├── Configure les paramètres du jeu
├── Gère la configuration de l'API OpenAI
└── Lance l'activité Jeux
Jeux
├── Charge les questions depuis JSON
├── Gère l'état du jeu
├── Affiche les questions aléatoires
└── Gère les interactions des joueurs
MainActivity (Saisie joueurs)
↓ validation (min. 3 joueurs)
JeuxParametres (Configuration)
↓ paramètres configurés
Jeux (Partie en cours)
↓ toutes les questions posées OU fin manches
EndGameActivity (Stats et fin)
MainActivity (Retour menu)
```
### Persistence des Données
| Méthode | Usage |
|---------|-------|
| **SharedPreferences** | Noms des joueurs et paramètres du jeu |
| **JSON Assets** | Base de données des questions |
| **PostgreSQL** | Base de données externe (planifié) |
### Opérations Asynchrones
| Type | Implémentation |
|------|----------------|
| **AsyncTask** | Opérations de base de données (héritage) |
| **OkHttp Callbacks** | Opérations réseau |
---
## 🔗 Composants et Leurs Relations
### Flux de Données
```
┌────────────────────────────────────────────────────────────┐
│ MainActivity │
│ - Saisie des noms de joueurs
│ - Validation (min. 3 joueurs)
│ - Génération UI dynamique
│ - 3 champs fixes + ajouts dynamiques
│ - Compteur temps réel : "Joueurs: X / min. 3"
│ - UI cohérente pour tous les champs
└────────────────────┬───────────────────────────────────────┘
Intent avec liste joueurs
┌────────────────────────────────────────────────────────────┐
│ JeuxParametres │
│ - Configuration du jeu
│ - Setup API OpenAI
│ - Lance Jeux
│ - Slider questions : 20-150 (pas de 10)
│ - Slider gorgées : 0-20 avec paliers
│ - Slider ratio BDD/OPENAI : 1-15
│ - Slider durée défis : -5 à +15 (offset) │
│ - Toggle OpenAI + champ clé API │
└────────────────────┬───────────────────────────────────────┘
Intent avec tous les paramètres
┌────────────────────────────────────────────────────────────┐
│ Jeux │
│ - Charge questions depuis JSON
│ - Gère l'état du jeu
│ - Affiche questions aléatoires
│ - Gère interactions joueurs
│ - Charge questions depuis JSON (150 questions)
│ - Générateur Random optimisé (instance unique)
│ - Filtre questions <manches> si défi en cours
│ - Applique offset durée défis au nombre de manches
│ - Gère défis multi-manches │
│ - Flag isFinishingGame pour éviter bugs fin de partie │
└────────────────────┬───────────────────────────────────────┘
Fin de partie
┌────────────────────────────────────────────────────────────┐
Question Model
│ - Stocke les données de question
│ - Gère variantes et manches
│ - Fournit les mécaniques de jeu │
EndGameActivity
│ - Affiche statistiques
│ - Boutons Rejouer / Retour
└────────────────────────────────────────────────────────────┘
```
@@ -352,14 +355,6 @@ Jeux
| **Version Name** | "1.0" |
| **Package** | com.example.boidelov3 |
### Configuration de l'Application
| Fichier | Description |
|---------|-------------|
| **AndroidManifest.xml** | Permissions Internet, 4 activités déclarées |
| **gradle.properties** | AndroidX activé, 2GB RAM allouée |
| **settings.gradle** | Nom du projet : "BoideloV3" |
### Configuration Base de Données
```
@@ -369,50 +364,94 @@ Base de données : boidelo
Utilisateur : android
```
### Dépendances Externes
| Service | Statut |
|---------|--------|
| **PostgreSQL Database** | Prêt |
| **OpenAI API** | En développement |
---
## 📊 Observations Clés
## 🔄 Changelog et Améliorations Récentes
1. **Localisation Française** - L'application est entièrement localisée en français
### Version Actuelle - 2025
2. **Jeu d'Alcool** - Conçu pour des jeux sociaux à base de boissons avec questions
#### ✅ Corrections Orthographe (2025)
- **MainActivity.java** : "ne peux pas" → "ne peut pas"
- **question.json** : "diferentes" → "différentes", "veritable" → "véritable", "tu a" → "tu as", etc.
- **strings.xml** : "c ki" → "C'est qui", "komment" → "comment", "Prenom" → "Prénom"
- **Jeuxold.java** : nombreuses corrections (tour de rôle, choisissant, défie, etc.)
3. **Évolution de Version** - V3 indique plusieurs itérations, avec code héritage préservé
#### ✅ Optimisation Aléatoire (2025)
- **Problème** : `new Random()` créé à chaque appel causait des répétitions
- **Solution** : Instance unique `private final Random random = new Random()` partagée dans toute l'activité
- **Fichiers modifiés** : `Jeux.java`, `Jeuxold.java`
- **Résultat** : Vraie randomisation des joueurs et questions
4. **Pratiques Android Modernes** - Utilise AndroidX, Material Design 3, outils de build modernes
#### ✅ Interface Utilisateur Cohérente (2025)
- **Problème** : Champs dynamiques avaient un style différent des 3 premiers
- **Solution** : Application complète du style Material3
- Bordure visible avec `setBoxStrokeColorStateList()`
- Couleur de fond `@color/surface`
- Largeur bordure 2dp
- Icône de suppression (X) pour effacer
- **Bouton suppression** : Taille réduite (36dp), espacement optimisé (68dp marge)
- **Résultat** : UI uniforme entre tous les champs de saisie
5. **Intégration Base de Données** - Prêt pour JSON local et PostgreSQL distant
#### ✅ Slider Durée des Défis (2025)
- **Nouveau paramètre** : Offset pour la durée des défis
- **Plage** : -5 à +15 manches
- **Défaut** : 0 (pas d'offset)
- **Affichage** : Signe +/- pour les valeurs non nulles (-3, +5, etc.)
- **Application** : `nbaleatoiremanches = (5-14) + durationDefis`
- **Minimum garanti** : 1 manche (même avec offset négatif)
6. **Intégration IA** - Support OpenAI planifié mais pas entièrement implémenté
#### ✅ Gestion Intelligente des Défis (2025)
- **Problème** : Nouveaux défis pouvaient s'accumuler même quand un défi était en cours
- **Solution** : Filtrage des questions avec `<manches>` dans `getRandomQuestion()`
- **Résultat** : Plus d'accumulation de défis, un seul défi à la fois
7. **Architecture Évolutive** - Supporte joueurs et questions illimités
#### ✅ Bug Fix Fin de Jeu (2025)
- **Problème** : Quand un défi était en cours à la fin des questions, il fallait cliquer plusieurs fois
- **Solution** : Flag `isFinishingGame` + désactivation bouton "Suivant"
- **Résultat** : Fin de jeu fluide sans clics multiples
#### ✅ Expansion Contenu (2025)
- **Ajout de 50 nouvelles questions** (passage de 100 à 150 questions)
- **Nouvelles catégories** :
- Questions de groupe (ski, tatouage, iPhone, etc.)
- Questions de classement (le plus drôle, le plus susceptible, etc.)
- Questions couples/amour (ghosting, premier baiser, etc.)
- Défis avec manches (accents, interdictions, mini-jeux)
- Questions interactives J1/J2/J3 (bras de fer, devinettes, mimes)
- Questions variante (activités, fandoms, musique)
---
## 🔮 Statut des Fonctionnalités
| Fonctionnalité | Statut |
|----------------|--------|
| Jeu multijoueur | ✅ Terminé |
| Questions JSON | ✅ Terminé |
| Interface UI | ✅ Terminé |
| PostgreSQL | 🔧 Prêt |
| OpenAI ChatGPT | 🚧 En développement |
| Tests unitaires | 🔧 Configuré |
| Fonctionnalité | Statut | Détails |
|----------------|--------|---------|
| Jeu multijoueur | ✅ Terminé | Support illimité, UI cohérente |
| Questions JSON | ✅ Terminé | 150 questions, orthographe corrigée |
| Interface UI | ✅ Terminé | Material Design 3, animations |
| Sliders paramètres | ✅ Terminé | Affichage temps réel, 4 sliders actifs |
| Défis multi-manches | ✅ Terminé | Gestion optimisée, pas d'accumulation |
| Générateur aléatoire | ✅ Optimisé | Instance unique Random partagée |
| Durée défis (offset) | ✅ Terminé | -5 à +15 manches |
| Orthographe | ✅ Corrigée | Tous fichiers vérifiés |
| PostgreSQL | 🔧 Prêt | Connexion configurée |
| OpenAI ChatGPT | 🚧 En développement | Interface prête |
---
## 📝 Conclusion
Le codebase représente une **application Android de jeu d'alcool bien structurée** avec des patterns d'architecture modernes, prête pour la production mais avec certaines fonctionnalités encore en développement. L'architecture est propre, modulaire et facilement extensible pour de futures améliorations.
Le codebase représente une **application Android de jeu d'alcool mature et bien structurée** avec des patterns d'architecture modernes. Les améliorations récentes ont considérablement amélioré l'expérience utilisateur :
- **Randomisation fiable** grâce au générateur optimisé
- **Interface cohérente** pour tous les champs de saisie
- **Défis gérés intelligemment** sans accumulation
- **Paramètres flexibles** pour personnaliser les parties
- **Contenu enrichi** avec 150 questions variées
- **Orthographe parfaite** dans tout le projet
L'architecture est propre, modulaire et facilement extensible pour de futures améliorations.
---
*Document généré automatiquement - 2025*
*Document mis à jour - Janvier 2025* 🍺