Files
Application/ANALYSE_CODE.md
feldenr 5ceeff6a4c 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)
2026-01-01 23:14:51 +01:00

20 KiB

Analyse Complète du Code - BoideloV3

📋 Table des Matières

  1. Présentation du Projet
  2. Structure du Projet
  3. Fichiers Principaux
  4. Fonctionnalités
  5. Technologies et Dépendances
  6. Architecture
  7. Composants et Leurs Relations
  8. Configuration
  9. Changelog et Améliorations Récentes

🎮 Présentation du Projet

BoideloV3 est une application Android de jeu d'alcool (similaire à "King's Cup" ou "Never Have I Ever"). L'application permet à un groupe de joueurs de répondre à des questions aléatoires avec des consommations de boissons associées.

Caractéristiques Principales

  • Jeu multijoueur (minimum 3 joueurs, sans maximum)
  • 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)

📁 Structure du Projet

D:\boidelo\
├── .gradle/                    # Cache de construction Gradle
├── .idea/                      # Configuration IntelliJ IDEA
├── app/
│   ├── build.gradle            # Configuration de build app-level
│   ├── libs/                   # Librairies JAR externes
│   │   ├── postgresql-42.2.27.jre7.jar
│   │   └── postgresql-42.6.0.jar
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── assets/
│           │   └── question.json     # Base de données questions (150 questions)
│           ├── java/com/example/boidelov3/
│           │   ├── 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
│           │   ├── 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
│               │   ├── 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
├── gradle.properties           # Propriétés Gradle
├── settings.gradle             # Paramètres du projet
├── gradlew, gradlew.bat        # Exécutables Gradle wrapper
└── .gitignore                  # Fichier Git ignore

📄 Fichiers Principaux

Activités Principales

MainActivity.java

Point d'entrée principal de l'application avec ajout dynamique de joueurs.

Responsabilités :

  • 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 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, 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 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 avec sliders interactifs.

Responsabilités :

  • 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

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.

public class Question {
    private int id;              // Identifiant unique
    private String question;     // Texte de la question
    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
}

QuestionRepository.java

Repository pour la gestion des questions avec filtrage.


Fonctionnalités

Gestion des 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

  • 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 gorgées via slider (0-20)
  • Randomisation optimisée des joueurs pour les questions
  • Feedback visuel avec arrière-plans colorés
  • Défis multi-manches avec affichage du compteur
  • Système de paliers : de "Grosse merde" à "L'ENDER DRAGON"

Paramètres de Partie

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

  • 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

🛠 Technologies et Dépendances

Technologies Principales

Technologie Version Usage
Android SDK 33 (compile) Développement Android natif
Java 17 Langage principal
Gradle 8.2 Automatisation de build

Bibliothèques Principales

dependencies {
    // Material Design
    implementation 'com.google.android.material:material:1.12.0'

    // Cœur AndroidX
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'

    // Réseau
    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.10.1'

    // Tests
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

🏗 Architecture

Pattern MVC (Model-View-Controller)

┌─────────────────────────────────────────────────┐
│                    Model                         │
│  • Question.java                                 │
│  • QuestionRepository.java                       │
└─────────────────────────────────────────────────┘
                      ↑
                      │
                      ↓
┌─────────────────────────────────────────────────┐
│                 Controller                       │
│  • MainActivity.java                             │
│  • Jeux.java                                     │
│  • JeuxParametres.java                           │
│  • EndGameActivity.java                          │
└─────────────────────────────────────────────────┘
                      ↑
                      │
                      ↓
┌─────────────────────────────────────────────────┐
│                   View                           │
│  • XML Layouts                                   │
│  • Resources (drawable, strings, colors)         │
│  • Animations                                    │
└─────────────────────────────────────────────────┘

Flux des Activités

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)

🔗 Composants et Leurs Relations

Flux de Données

┌────────────────────────────────────────────────────────────┐
│                     MainActivity                            │
│  - 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                           │
│  - 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 (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
                     ▼
┌────────────────────────────────────────────────────────────┐
│                   EndGameActivity                         │
│  - Affiche statistiques                                │
│  - Boutons Rejouer / Retour                             │
└────────────────────────────────────────────────────────────┘

⚙️ Configuration

Configuration de Build

Propriété Valeur
Compile SDK 33
Min SDK 24
Target SDK 33
Version Code 1
Version Name "1.0"
Package com.example.boidelov3

Configuration Base de Données

Hôte : 82.65.214.214
Port : 5432
Base de données : boidelo
Utilisateur : android

🔄 Changelog et Améliorations Récentes

Version Actuelle - 2025

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.)

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

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

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)

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

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 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 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 mis à jour - Janvier 2025 🍺