ecb44f1934
🐛 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>
152 lines
3.8 KiB
Java
152 lines
3.8 KiB
Java
package com.example.boidelov3;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Représente une question du jeu Boidelo avec toutes ses propriétés.
|
|
*
|
|
* <p>Cette classe contient toutes les informations nécessaires pour afficher
|
|
* et traiter une question lors du jeu.</p>
|
|
*
|
|
* <p>Propriétés principales :</p>
|
|
* <ul>
|
|
* <li>{@code id} : Identifiant unique de la question</li>
|
|
* <li>{@code question} : Texte de la question (peut contenir des balises)</li>
|
|
* <li>{@code gorger} : Nombre de gorgées à boire/distribuer</li>
|
|
* <li>{@code distribution} : Si vrai, le joueur distribue des gorgées</li>
|
|
* <li>{@code recois} : Si vrai, le joueur boit des gorgées</li>
|
|
* <li>{@code manches} : Si vrai, la question est un défi à manches</li>
|
|
* <li>{@code caliente} : Si vrai, la question est spéciale/hot</li>
|
|
* <li>{@code variante} : Liste des choix possibles pour une variante</li>
|
|
* </ul>
|
|
*
|
|
* <p>Balises spéciales dans le texte :</p>
|
|
* <ul>
|
|
* <li>{@code <J1>}, {@code <J2>}, {@code <J3>} : Joueurs sélectionnés</li>
|
|
* <li>{@code <manches>} : Nombre de manches pour un défi</li>
|
|
* <li>{@code <variante>} : Choix à remplacer par une variante</li>
|
|
* </ul>
|
|
*/
|
|
public class Question {
|
|
private int id;
|
|
private String question;
|
|
private int gorger;
|
|
private boolean distribution;
|
|
private List<String> variante;
|
|
private boolean recois;
|
|
private boolean manches;
|
|
private boolean caliente;
|
|
private String arret; // mise à jour du type de données
|
|
private int manchesRestantes; // pour le nombre de manches restantes
|
|
private String arretMessage; // pour le message d'arrêt
|
|
private String arretMessageManche; // pour le message d'arrêt pour les manches
|
|
|
|
/**
|
|
* Constructeur par défaut.
|
|
* Initialise tous les champs à leurs valeurs par défaut.
|
|
*/
|
|
public Question() {
|
|
}
|
|
|
|
// Getters et setters pour tous les champs
|
|
|
|
/**
|
|
* Retourne l'identifiant unique de la question.
|
|
* @return L'ID de la question
|
|
*/
|
|
public int getId() {
|
|
return id;
|
|
}
|
|
|
|
public void setId(int id) {
|
|
this.id = id;
|
|
}
|
|
|
|
public String getQuestion() {
|
|
return question;
|
|
}
|
|
|
|
public void setQuestion(String question) {
|
|
this.question = question;
|
|
}
|
|
|
|
public int getGorger() {
|
|
return gorger;
|
|
}
|
|
|
|
public void setGorger(int gorger) {
|
|
this.gorger = gorger;
|
|
}
|
|
|
|
public boolean isDistribution() {
|
|
return distribution;
|
|
}
|
|
|
|
public void setDistribution(boolean distribution) {
|
|
this.distribution = distribution;
|
|
}
|
|
|
|
public List<String> getVariante() {
|
|
return variante;
|
|
}
|
|
|
|
public void setVariante(List<String> variante) {
|
|
this.variante = variante;
|
|
}
|
|
|
|
public boolean isRecois() {
|
|
return recois;
|
|
}
|
|
|
|
public void setRecois(boolean recois) {
|
|
this.recois = recois;
|
|
}
|
|
|
|
public boolean isManches() {
|
|
return manches;
|
|
}
|
|
|
|
public void setManches(boolean manches) {
|
|
this.manches = manches;
|
|
}
|
|
|
|
public String getArret() {
|
|
return arret;
|
|
}
|
|
|
|
public void setArret(String arret) {
|
|
this.arret = arret;
|
|
}
|
|
|
|
public int getManchesRestantes() {
|
|
return manchesRestantes;
|
|
}
|
|
|
|
public void setManchesRestantes(int manchesRestantes) {
|
|
this.manchesRestantes = manchesRestantes;
|
|
}
|
|
|
|
public String getArretMessage() {
|
|
return arretMessage;
|
|
}
|
|
|
|
public void setArretMessage(String arretMessage) {
|
|
this.arretMessage = arretMessage;
|
|
}
|
|
public String getArretMessageManche() {
|
|
return arretMessageManche;
|
|
}
|
|
|
|
public void setArretMessageManche(String arretMessageManche) {
|
|
this.arretMessageManche = arretMessageManche;
|
|
}
|
|
|
|
public boolean isCaliente() {
|
|
return caliente;
|
|
}
|
|
|
|
public void setCaliente(boolean caliente) {
|
|
this.caliente = caliente;
|
|
}
|
|
}
|