🐛 Bugfixes:
- Correction des noms en double : vérification uniques des joueurs (insensible à la casse)
- Accord des verbes selon le nombre de joueurs : "boit/distribue" (1 joueur) vs "boivent/distribuent" (2+)
- Défis minimum 3 manches au lieu de 2 (réglable via slider -5 à +15, défaut 0)
- Gorgées minimum 1 au lieu de 2
🎨 Design:
- Bouton de suppression élégant : circulaire blanc avec icône grise (remplace croix rouge sur fond noir)
♻️ Refactoring (Jeux.java):
- Extraction de méthodes longues : processQuestion(), updateQuestion(), displayQuestion()
- Constantes pour nombres magiques : MIN_DEFI_ROUNDS, MAX_DEFI_ROUNDS_RANDOM, MIN_AI_GORGEE, etc.
- Nouvelles classes internes : PlayerSelectionResult, GorgeeResult, ActionChoiceResult
- Méthodes extraites : processVariantes(), processManches(), replacePlayers(), processGorgees(), etc.
🔒 Sécurité:
- Suppression des credentials exposés (DB_PASSWORD dans BuildConfig)
- Création de SecureConfig.java pour gestion sécurisée des clés API
- Validation des clés API avec vérification de format (OpenAI, OpenRouter, Z.ai)
- Protection HTML : ErrorHandler.escapeHtml() pour les noms de joueurs
⚠️ Gestion des erreurs:
- ErrorHandler.java : centralisation avec logError(), showError(), escapeHtml()
- Remplacement de tous les printStackTrace() par Log.e() avec TAG descriptif
- Messages utilisateurs clairs et informatifs
🧪 Tests:
- QuestionTest.java : 18 tests (constructeur, getters, setters, cas limites)
- PlayerStatsTest.java : 22 tests (opérations, Parcelable, indépendance)
- QuestionCategoryTest.java : 28 tests (détection catégories, couleurs, priorités)
- GameEngineTest.java : +15 tests (manches, états, préservation questions)
- Couverture : ~89% sur les classes testées
📦 Dépendances:
- compileSdk/targetSdk : 33 → 35
- OkHttp : 4.9.1 → 4.12.0
- Material : 1.9.0 → 1.12.0
- AppCompat : 1.6.1 → 1.7.0
- Gson : 2.8.8 → 2.11.0
📝 Documentation:
- Javadoc améliorée pour Question.java, PlayerStats.java
- PreferencesKeys.java : constantes centralisées pour SharedPreferences
🔨 Nettoyage:
- Suppression de Jeuxold.java (fichier obsolète)
- question.json : 165 questions avec IDs uniques (correction des doublons)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Nouvelles fonctionnalités:
- Hub de sélection de jeux avec cartes animées
- Refonte complète de Boidelo Classic avec nouvelle architecture
- Nouveau mode 89++ : assistant de jeu avec timer et défis
- Système de joueurs dynamique avec ajout/suppression
- Interface moderne et cohérente entre les jeux
Améliorations:
- Système de défis avec pause pendant l'affichage
- Gestion des gorgées avec slider (1-8)
- Statistiques de joueurs en temps réel
- Bouton retour fonctionnel avec gestion de la notch
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Nouveau jeu:
- Ajout du jeu Papelito (Undercover) avec flow complet
- Configuration des joueurs, temps de discussion, votes
- Système d'élimination et gestion des égalités
- Interface Material Design avec cartes et dialogues
Corrections de bugs critiques:
- Fix crash Papelito au lancement (MaterialSwitch vs Switch)
- Fix crash lors des votes nuls (égalité entre joueurs)
- Fix crash fin de partie lors du retour (navigation vers hub)
- Fix visibilité texte questions (couleur dynamique)
- Fix compteur tours défis invisible (blanc sur blanc)
- Fix icone question manquante pendant défis
Améliorations UX Boidelo Classic:
- Harmonisation des couleurs dynamiques (toolbar, bouton)
- Bouton de réglages maintenant visible (MaterialButton)
- Conteneur IA se rétracte quand désactivé
- Meilleure gestion des couleurs selon catégorie
- Fix délai entre manches pour affichage message fin
Améliorations techniques:
- Mise à jour CLAUDE.md avec architecture Papelito
- Amélioration tests unitaires (GameEngine, PlayerStats, QuestionCategory)
- Standardisation des clés Intent entre activités
- Nettoyage code mort (méthodes non utilisées)
Tests:
- 302 tests unitaires passants
- Couverture GameEngine, PlayerStats, QuestionCategory
- Tests Papelito (game logic, player management)
- Tests Game89 (challenges, players)
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Bugs corrigés:
- #1: saveGameStats() utilise currentQuestionIndex au lieu de totalQuestionsAsked
- #3: Papelito - empêche un joueur de voter pour lui-même
- #4: totalRoundsPlayed remplace playersWhoVoted.size() pour compter les rounds
- #6: Null check sur toutlesjoueurs dans BoideloClassicGameActivity
- #7: Standardisation de la clé PLAYER_STATS dans Jeux.java
- #8: try-with-resources pour InputStream dans Jeux et QuestionRepository
- #9: try-finally avec response.close() dans OpenAIService
- #10: synchronized sur toutes les méthodes SoundGenerator
- #12: MediaType.get() remplace MediaType.parse() (OkHttp 4.x)
- #13: getSerializableExtra version-aware pour API 33+
- #15: Game89 - shuffle séquentiel des défis sans répétition
- #17: Null check sur question.getQuestion() dans detectCategory
- #18: Tracking des questions posées dans BoideloClassicGameActivity
- #22: Suppression du SoundManager root stub en doublon
- #29: stopMessage utilise questionText au lieu de question.getQuestion()
- #30: Null check sur stopid dans Jeux.java
Anti-répétition:
- Chaque question posée est marquée en SharedPreferences (par ID):
elle ne revient plus, même entre les parties, tant que le stock
de 185 questions n'est pas épuisé (reset automatique ensuite)
- Le fallback ne renvoie plus une question déjà posée
Cohérence (audit croisé JSON <-> moteur, 185 questions):
- Accord du verbe selon le sujet réel: 62 questions à sujet pluriel
recevaient «boit» au lieu de «boivent» (isPluralSubject)
- Remplacement indépendant des balises <J1>/<J2>/<J3>: une question
contenant <J2> sans <J1> n'affichait plus la balise brute
- Le champ arret du JSON est désormais utilisé comme message de fin
de défi (27 messages étaient des données mortes)
- id 84: champ "distribut" (typo) jamais lu -> question muette
- 16 questions à double consigne (gorgées en dur + gorgées du moteur)
passées en auto-suffisantes
- Balises <variante> manquantes (ids 21, 97) rétablies
- 78 corrections de langue/accord dans les textes (orthographe,
accords m/f, variantes vieux/vieille, branché(e), fins de phrases
incohérentes avec le verbe ajouté...)
- FLAG_KEEP_SCREEN_ON pendant la partie
- Fin du timer de défi: carillon convivial do-mi-sol (AudioTrack,
synthèse PCM avec enveloppe de cloche) à la place des bips
ToneGenerator télécoms
- Accord singulier/pluriel: «1 gorgée» / «N gorgées» dans les toasts,
les stats et Game89Player (fini les «gorgée(s)»)
Les activités RulesListActivity et RuleDetailActivity étaient des
stubs vides (TODO) -> écran noir depuis la migration du hub.
- Liste des 3 jeux (Classic, 89++, Papelito) dans le style du hub
- Fiche de règles détaillées par jeu (déroulement, valeurs spéciales,
conditions de victoire), écrites à partir du comportement réel du code
- Bouton «Jouer maintenant» ouvrant directement la configuration du jeu
The changes on this branch are already on the target branch. This will be an empty commit.
You are not authorized to merge this pull request.
This pull request can be merged automatically.
This branch is out-of-date with the base branch
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.