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:
Generated
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="CompilerConfiguration">
|
<component name="CompilerConfiguration">
|
||||||
<bytecodeTargetLevel target="21" />
|
<bytecodeTargetLevel target="17" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
Generated
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="deploymentTargetSelector">
|
<component name="deploymentTargetSelector">
|
||||||
<selectionStates>
|
<selectionStates>
|
||||||
<SelectionState runConfigName="app">
|
<SelectionState runConfigName="Unnamed">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
</selectionStates>
|
</selectionStates>
|
||||||
|
|||||||
Generated
+1
-2
@@ -5,14 +5,13 @@
|
|||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
<option name="gradleJvm" value="#JAVA_HOME" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
<option value="$PROJECT_DIR$/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
<option name="resolveExternalAnnotations" value="false" />
|
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
Generated
+1
-2
@@ -1,10 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="24" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|||||||
+204
-165
@@ -10,6 +10,7 @@
|
|||||||
6. [Architecture](#architecture)
|
6. [Architecture](#architecture)
|
||||||
7. [Composants et Leurs Relations](#composants-et-leurs-relations)
|
7. [Composants et Leurs Relations](#composants-et-leurs-relations)
|
||||||
8. [Configuration](#configuration)
|
8. [Configuration](#configuration)
|
||||||
|
9. [Changelog et Améliorations Récentes](#changelog-et-améliorations-récentes)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -20,18 +21,20 @@
|
|||||||
### Caractéristiques Principales
|
### Caractéristiques Principales
|
||||||
|
|
||||||
- **Jeu multijoueur** (minimum 3 joueurs, sans maximum)
|
- **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
|
- **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)
|
- **Intégration OpenAI** (en développement)
|
||||||
- **Connexion PostgreSQL** (prête)
|
- **Connexion PostgreSQL** (prête)
|
||||||
- **Interface moderne et responsive**
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📁 Structure du Projet
|
## 📁 Structure du Projet
|
||||||
|
|
||||||
```
|
```
|
||||||
C:\Users\polar\Documents\boidelo\
|
D:\boidelo\
|
||||||
├── .gradle/ # Cache de construction Gradle
|
├── .gradle/ # Cache de construction Gradle
|
||||||
├── .idea/ # Configuration IntelliJ IDEA
|
├── .idea/ # Configuration IntelliJ IDEA
|
||||||
├── app/
|
├── app/
|
||||||
@@ -43,23 +46,34 @@ C:\Users\polar\Documents\boidelo\
|
|||||||
│ └── main/
|
│ └── main/
|
||||||
│ ├── AndroidManifest.xml
|
│ ├── AndroidManifest.xml
|
||||||
│ ├── assets/
|
│ ├── assets/
|
||||||
│ │ ├── question.json # Base de données questions (115 questions)
|
│ │ └── question.json # Base de données questions (150 questions)
|
||||||
│ │ └── questionOLD.json
|
|
||||||
│ ├── java/com/example/boidelov3/
|
│ ├── java/com/example/boidelov3/
|
||||||
│ │ ├── MainActivity.java
|
│ │ ├── MainActivity.java # Écran principal avec ajout dynamique de joueurs
|
||||||
│ │ ├── Jeux.java # Activité principale du jeu
|
│ │ ├── Jeux.java # Activité principale du jeu avec gestion des défis
|
||||||
│ │ ├── Jeuxold.java # Implémentation héritée
|
│ │ ├── Jeuxold.java # Implémentation héritée
|
||||||
│ │ ├── JeuxParametres.java # Paramètres du jeu
|
│ │ ├── JeuxParametres.java # Paramètres du jeu avec sliders
|
||||||
│ │ ├── ChatGPTTask.java # Intégration OpenAI (commenté)
|
│ │ ├── EndGameActivity.java # Écran de fin de partie
|
||||||
|
│ │ ├── ChatGPTTask.java # Intégration OpenAI (commenté)
|
||||||
│ │ ├── DatabaseConnection.java # Connexion PostgreSQL
|
│ │ ├── DatabaseConnection.java # Connexion PostgreSQL
|
||||||
│ │ ├── Question.java # Modèle de données Question
|
│ │ ├── data/
|
||||||
│ │ └── Questions.java # Conteneur de questions
|
│ │ │ ├── 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/
|
│ └── res/
|
||||||
│ ├── anim/ # Animations
|
│ ├── anim/ # Animations
|
||||||
│ ├── drawable/ # Icônes et graphiques
|
│ ├── 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
|
│ ├── mipmap-*/ # Icônes pour différentes densités
|
||||||
│ ├── values/ # Chaînes, couleurs, thèmes
|
│ ├── values/ # Chaînes, couleurs, thèmes
|
||||||
|
│ │ └── strings.xml # Textes localisés
|
||||||
│ ├── values-night/ # Ressources mode nuit
|
│ ├── values-night/ # Ressources mode nuit
|
||||||
│ └── xml/ # Fichiers de configuration XML
|
│ └── xml/ # Fichiers de configuration XML
|
||||||
├── build.gradle # Configuration de build projet-level
|
├── build.gradle # Configuration de build projet-level
|
||||||
@@ -76,78 +90,79 @@ C:\Users\polar\Documents\boidelo\
|
|||||||
### Activités Principales
|
### Activités Principales
|
||||||
|
|
||||||
#### `MainActivity.java`
|
#### `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 :**
|
**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
|
- 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
|
- 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`
|
#### `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 :**
|
**Responsabilités :**
|
||||||
- Chargement des questions depuis le JSON
|
- Chargement des questions depuis le JSON
|
||||||
- Sélection aléatoire sans répétition
|
- Sélection aléatoire sans répétition
|
||||||
- Gestion des tours de joueurs
|
- Gestion des tours de joueurs
|
||||||
|
- Gestion des défis multi-manches
|
||||||
- Feedback visuel avec arrière-plans colorés
|
- 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`
|
#### `JeuxParametres.java`
|
||||||
**Écran de configuration** des paramètres du jeu.
|
**Écran de configuration** des paramètres du jeu avec sliders interactifs.
|
||||||
|
|
||||||
**Responsabilités :**
|
**Responsabilités :**
|
||||||
- Configuration du nombre de questions
|
- Configuration du nombre de questions (20-150, par pas de 10)
|
||||||
- Gestion des comptes de boissons
|
- Gestion des ajouts de gorgées (0-20) avec paliers de difficulté
|
||||||
- Configuration de l'API OpenAI
|
- Configuration du ratio BDD/OPENAI (1/1 à 1/15)
|
||||||
- Lancement de l'activité Jeux
|
- **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`
|
**Améliorations récentes :**
|
||||||
**Version héritée** du jeu avec questions hardcodées (non utilisée activement).
|
- ✅ 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
|
### Modèles de Données
|
||||||
|
|
||||||
#### `Question.java`
|
#### `Question.java`
|
||||||
**Modèle de données** pour une question individuelle.
|
**Modèle de données** pour une question individuelle.
|
||||||
|
|
||||||
**Propriétés :**
|
|
||||||
```java
|
```java
|
||||||
public class Question {
|
public class Question {
|
||||||
private int id; // Identifiant unique
|
private int id; // Identifiant unique
|
||||||
private String question; // Texte de la question
|
private String question; // Texte de la question
|
||||||
private int boire; // Nombre de boissons
|
private int gorger; // Nombre de gorgées
|
||||||
private boolean donner; // Flag de distribution
|
private boolean distribution; // Flag de distribution
|
||||||
private boolean recevoir; // Flag de réception
|
private boolean recois; // Flag de réception
|
||||||
private List<String> variantes; // Variantes de la question
|
private List<String> variante; // Variantes de la question
|
||||||
private int manches; // Nombre de manches
|
private int manchesRestantes; // Nombre de manches restantes
|
||||||
private String stop; // Message d'arrêt
|
private String arretMessageManche; // Message de fin de défi
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `Questions.java`
|
#### `QuestionRepository.java`
|
||||||
**Classe conteneur** pour la liste de questions.
|
**Repository** pour la gestion des questions avec filtrage.
|
||||||
|
|
||||||
### 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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -155,38 +170,45 @@ public class Question {
|
|||||||
|
|
||||||
### Gestion des Joueurs
|
### 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
|
- **Minimum 3 joueurs** requis pour commencer
|
||||||
- **Support illimité** de nombre de joueurs
|
- **Support illimité** de nombre de joueurs
|
||||||
- **Persistance** avec SharedPreferences
|
- **Persistance** avec SharedPreferences
|
||||||
|
- **Compteur en temps réel** : "Joueurs: X / min. 3"
|
||||||
|
|
||||||
### Système de Questions
|
### Système de Questions
|
||||||
|
|
||||||
- **115 questions préchargées** depuis JSON
|
- **150 questions préchargées** depuis JSON
|
||||||
- **Sélection aléatoire** sans répétition
|
- **Sélection aléatoire optimisée** sans répétition
|
||||||
- **Variantes** avec remplacement dynamique de contenu
|
- **Variantes** avec remplacement dynamique de contenu
|
||||||
- **Questions à manches** avec mécanique de compte à rebours
|
- **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
|
### Mécaniques de Jeu
|
||||||
|
|
||||||
- **Ajustement dynamique** du nombre de boissons
|
- **Ajustement dynamique** du nombre de gorgées via slider (0-20)
|
||||||
- **Randomisation** des joueurs pour les questions
|
- **Randomisation optimisée** des joueurs pour les questions
|
||||||
- **Feedback visuel** avec arrière-plans colorés
|
- **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)
|
| Paramètre | Plage | Défaut | Description |
|
||||||
- **Connectivité PostgreSQL** (prête)
|
|-----------|-------|--------|-------------|
|
||||||
- **Paramètres personnalisables**
|
| **Nombre de questions** | 20-150 (par 10) | 50 | Nombre de questions avant fin de partie |
|
||||||
- **Défis multi-manches**
|
| **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
|
### Interface Utilisateur
|
||||||
|
|
||||||
- **Trois activités principales** : Main, Jeux, Paramètres
|
- **Material Design 3** avec composants modernes
|
||||||
- **Interface Material Design 3**
|
- **Animations fluides** (fade in, slide out, pop in)
|
||||||
- **Localisation en français**
|
- **Feedback haptique** sur les interactions
|
||||||
- **Layout responsive avec ConstraintLayout**
|
- **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 |
|
| Technologie | Version | Usage |
|
||||||
|-------------|---------|-------|
|
|-------------|---------|-------|
|
||||||
| **Android SDK** | 33 (compile) | Développement Android natif |
|
| **Android SDK** | 33 (compile) | Développement Android natif |
|
||||||
| **Java** | - | Langage principal |
|
| **Java** | 17 | Langage principal |
|
||||||
| **Gradle** | 8.2 | Automatisation de build |
|
| **Gradle** | 8.2 | Automatisation de build |
|
||||||
|
|
||||||
### Bibliothèques Principales
|
### Bibliothèques Principales
|
||||||
|
|
||||||
```gradle
|
```gradle
|
||||||
dependencies {
|
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 'androidx.appcompat:appcompat:1.6.1'
|
||||||
implementation 'com.google.android.material:material:1.9.0'
|
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
|
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
|
||||||
|
|
||||||
// Réseau
|
// Réseau
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
|
||||||
|
|
||||||
// Base de données
|
// Base de données
|
||||||
implementation 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.3'
|
implementation 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.3'
|
||||||
|
|
||||||
// Traitement JSON
|
// Traitement JSON
|
||||||
implementation 'com.google.code.gson:gson:2.8.8'
|
implementation 'com.google.code.gson:gson:2.10.1'
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
testImplementation 'junit:junit:4.13.2'
|
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
|
## 🏗 Architecture
|
||||||
@@ -243,7 +260,7 @@ dependencies {
|
|||||||
┌─────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────┐
|
||||||
│ Model │
|
│ Model │
|
||||||
│ • Question.java │
|
│ • Question.java │
|
||||||
│ • Questions.java │
|
│ • QuestionRepository.java │
|
||||||
└─────────────────────────────────────────────────┘
|
└─────────────────────────────────────────────────┘
|
||||||
↑
|
↑
|
||||||
│
|
│
|
||||||
@@ -253,6 +270,7 @@ dependencies {
|
|||||||
│ • MainActivity.java │
|
│ • MainActivity.java │
|
||||||
│ • Jeux.java │
|
│ • Jeux.java │
|
||||||
│ • JeuxParametres.java │
|
│ • JeuxParametres.java │
|
||||||
|
│ • EndGameActivity.java │
|
||||||
└─────────────────────────────────────────────────┘
|
└─────────────────────────────────────────────────┘
|
||||||
↑
|
↑
|
||||||
│
|
│
|
||||||
@@ -261,79 +279,64 @@ dependencies {
|
|||||||
│ View │
|
│ View │
|
||||||
│ • XML Layouts │
|
│ • XML Layouts │
|
||||||
│ • Resources (drawable, strings, colors) │
|
│ • Resources (drawable, strings, colors) │
|
||||||
|
│ • Animations │
|
||||||
└─────────────────────────────────────────────────┘
|
└─────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
### Architecture Basée sur les Activités
|
### Flux des Activités
|
||||||
|
|
||||||
```
|
```
|
||||||
MainActivity
|
MainActivity (Saisie joueurs)
|
||||||
├── Gère l'entrée des joueurs
|
↓ validation (min. 3 joueurs)
|
||||||
├── Valide le minimum de 3 joueurs
|
JeuxParametres (Configuration)
|
||||||
└── Lance JeuxParametres
|
↓ paramètres configurés
|
||||||
|
Jeux (Partie en cours)
|
||||||
JeuxParametres
|
↓ toutes les questions posées OU fin manches
|
||||||
├── Configure les paramètres du jeu
|
EndGameActivity (Stats et fin)
|
||||||
├── Gère la configuration de l'API OpenAI
|
↓
|
||||||
└── Lance l'activité Jeux
|
MainActivity (Retour menu)
|
||||||
|
|
||||||
Jeux
|
|
||||||
├── Charge les questions depuis JSON
|
|
||||||
├── Gère l'état du jeu
|
|
||||||
├── Affiche les questions aléatoires
|
|
||||||
└── Gère les interactions des joueurs
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 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
|
## 🔗 Composants et Leurs Relations
|
||||||
|
|
||||||
|
### Flux de Données
|
||||||
|
|
||||||
```
|
```
|
||||||
┌────────────────────────────────────────────────────────────┐
|
┌────────────────────────────────────────────────────────────┐
|
||||||
│ MainActivity │
|
│ MainActivity │
|
||||||
│ - Saisie des noms de joueurs │
|
│ - 3 champs fixes + ajouts dynamiques │
|
||||||
│ - Validation (min. 3 joueurs) │
|
│ - Compteur temps réel : "Joueurs: X / min. 3" │
|
||||||
│ - Génération UI dynamique │
|
│ - UI cohérente pour tous les champs │
|
||||||
└────────────────────┬───────────────────────────────────────┘
|
└────────────────────┬───────────────────────────────────────┘
|
||||||
│
|
│ Intent avec liste joueurs
|
||||||
▼
|
▼
|
||||||
┌────────────────────────────────────────────────────────────┐
|
┌────────────────────────────────────────────────────────────┐
|
||||||
│ JeuxParametres │
|
│ JeuxParametres │
|
||||||
│ - Configuration du jeu │
|
│ - Slider questions : 20-150 (pas de 10) │
|
||||||
│ - Setup API OpenAI │
|
│ - Slider gorgées : 0-20 avec paliers │
|
||||||
│ - Lance Jeux │
|
│ - 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 │
|
│ Jeux │
|
||||||
│ - Charge questions depuis JSON │
|
│ - Charge questions depuis JSON (150 questions) │
|
||||||
│ - Gère l'état du jeu │
|
│ - Générateur Random optimisé (instance unique) │
|
||||||
│ - Affiche questions aléatoires │
|
│ - Filtre questions <manches> si défi en cours │
|
||||||
│ - Gère interactions joueurs │
|
│ - 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 │
|
│ EndGameActivity │
|
||||||
│ - Stocke les données de question │
|
│ - Affiche statistiques │
|
||||||
│ - Gère variantes et manches │
|
│ - Boutons Rejouer / Retour │
|
||||||
│ - Fournit les mécaniques de jeu │
|
|
||||||
└────────────────────────────────────────────────────────────┘
|
└────────────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -352,14 +355,6 @@ Jeux
|
|||||||
| **Version Name** | "1.0" |
|
| **Version Name** | "1.0" |
|
||||||
| **Package** | com.example.boidelov3 |
|
| **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
|
### Configuration Base de Données
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -369,50 +364,94 @@ Base de données : boidelo
|
|||||||
Utilisateur : android
|
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
|
## 🔮 Statut des Fonctionnalités
|
||||||
|
|
||||||
| Fonctionnalité | Statut |
|
| Fonctionnalité | Statut | Détails |
|
||||||
|----------------|--------|
|
|----------------|--------|---------|
|
||||||
| Jeu multijoueur | ✅ Terminé |
|
| Jeu multijoueur | ✅ Terminé | Support illimité, UI cohérente |
|
||||||
| Questions JSON | ✅ Terminé |
|
| Questions JSON | ✅ Terminé | 150 questions, orthographe corrigée |
|
||||||
| Interface UI | ✅ Terminé |
|
| Interface UI | ✅ Terminé | Material Design 3, animations |
|
||||||
| PostgreSQL | 🔧 Prêt |
|
| Sliders paramètres | ✅ Terminé | Affichage temps réel, 4 sliders actifs |
|
||||||
| OpenAI ChatGPT | 🚧 En développement |
|
| Défis multi-manches | ✅ Terminé | Gestion optimisée, pas d'accumulation |
|
||||||
| Tests unitaires | 🔧 Configuré |
|
| 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
|
## 📝 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* 🍺
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"questions": [
|
"questions": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"question": "Celles/Ceux qui ont habité dans plus de 3 villes diferentes",
|
"question": "Celles/Ceux qui ont habité dans plus de 3 villes différentes",
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
"recois": true
|
"recois": true
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"question": "si tu n'as pas ton veritable nom sur insta",
|
"question": "si tu n'as pas ton véritable nom sur insta",
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
"recois": true
|
"recois": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"question": "si tu a des photos sur insta",
|
"question": "si tu as des photos sur insta",
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
"recois": true
|
"recois": true
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"question": "<J1> a toi de juger : entre <J1> et <J2> qui stresse le plus pour un rien selon toi? Le perdant ",
|
"question": "<J1> à toi de juger : entre <J1> et <J2> qui stresse le plus pour un rien selon toi? Le perdant ",
|
||||||
"gorger": 5,
|
"gorger": 5,
|
||||||
"distribution": false,
|
"distribution": false,
|
||||||
"recois": true
|
"recois": true
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 16,
|
"id": 16,
|
||||||
"question": "<J1> a qui appartient le slogan suivant? <variante>",
|
"question": "<J1> à qui appartient le slogan suivant? <variante>",
|
||||||
"variante": ["Des pâtes oui mais des (panzani)"," Le plaisir pour les petites faims. (Kinder Bueno)","Réveillez le lion qui est en vous. (Cereale lion)","Parce que le monde bouge (CIC)","Ça coule de source ! (Cristaline)", "Pensez différemment (apple)" ],
|
"variante": ["Des pâtes oui mais des (panzani)"," Le plaisir pour les petites faims. (Kinder Bueno)","Réveillez le lion qui est en vous. (Cereale lion)","Parce que le monde bouge (CIC)","Ça coule de source ! (Cristaline)", "Pensez différemment (apple)" ],
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
@@ -385,7 +385,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 38,
|
"id": 38,
|
||||||
"question": "Si tu as un téléphone qui a un prix supperieur d'achat a 1000Euros, tu est riche donc en tant que personne généreuse",
|
"question": "Si tu as un téléphone qui a un prix supérieur d'achat à 1000 euros, tu es riche donc en tant que personne généreuse",
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
"recois": false
|
"recois": false
|
||||||
@@ -507,7 +507,7 @@
|
|||||||
{
|
{
|
||||||
"id": 54,
|
"id": 54,
|
||||||
"jeux": true,
|
"jeux": true,
|
||||||
"question": "<J1> à l'oeil de serpent ! Dès qu'un joueur te regarde dans les yeux, il/elle boit. Si tu es arrivé a faire boire personne avant <manches> manches, tu ",
|
"question": "<J1> à l'oeil de serpent ! Dès qu'un joueur te regarde dans les yeux, il/elle boit. Si tu es arrivé à faire boire personne avant <manches> manches, tu ",
|
||||||
"gorger": 4,
|
"gorger": 4,
|
||||||
"distribution": false,
|
"distribution": false,
|
||||||
"recois": true
|
"recois": true
|
||||||
@@ -588,7 +588,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 65,
|
"id": 65,
|
||||||
"question": "Si <J1> arrive a finir son verre en moins de 5 secondes, il/elle ",
|
"question": "Si <J1> arrive à finir son verre en moins de 5 secondes, il/elle ",
|
||||||
"gorger": 6,
|
"gorger": 6,
|
||||||
"distribution": true,
|
"distribution": true,
|
||||||
"recois": false,
|
"recois": false,
|
||||||
@@ -603,7 +603,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 67,
|
"id": 67,
|
||||||
"question": "<J1> dit un mot, la personne suivante le répète et en ajoute un nouveau, ainsi de suite jusqu'a ce que quelqu'un se trompe. Le perdant boit autant de gorgées qu'il y a eu de personne avant lui",
|
"question": "<J1> dit un mot, la personne suivante le répète et en ajoute un nouveau, ainsi de suite jusqu'à ce que quelqu'un se trompe. Le perdant boit autant de gorgées qu'il y a eu de personne avant lui",
|
||||||
"jeux": true
|
"jeux": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -615,7 +615,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 69,
|
"id": 69,
|
||||||
"question": "Quand l'heure affichera un multiple de 10 (22h, 22h10 ...) le premier a crier 'merde j'ai oublié mon chat'",
|
"question": "Quand l'heure affichera un multiple de 10 (22h, 22h10 ...) le premier à crier 'merde j'ai oublié mon chat'",
|
||||||
"gorger": 3,
|
"gorger": 3,
|
||||||
"distribut":false,
|
"distribut":false,
|
||||||
"manches": true,
|
"manches": true,
|
||||||
@@ -843,10 +843,345 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 100,
|
"id": 100,
|
||||||
"question": "Défi cuisine : <J1> doit Créez la combinaison d'alcool la plus bizarre avec les ingrédients présents, <J2> doit boire la mixture",
|
"question": "Défi cuisine : <J1> doit créer la combinaison d'alcool la plus bizarre avec les ingrédients présents, <J2> doit boire la mixture",
|
||||||
"gorger": 2,
|
"gorger": 2,
|
||||||
"distribution": false,
|
"distribution": false,
|
||||||
"recois": true
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 101,
|
||||||
|
"question": "Ceux qui ont déjà fait du ski",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 102,
|
||||||
|
"question": "Ceux qui ont un tatouage",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 103,
|
||||||
|
"question": "Ceux qui portent des lentilles de contact",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"question": "Ceux qui ont déjà fait un crochet en blanc",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 105,
|
||||||
|
"question": "Ceux qui ont plus de 1000 abonnés sur Instagram",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 106,
|
||||||
|
"question": "Ceux qui parlent une autre langue que le français",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"question": "Ceux qui ont déjà été en couple avec quelqu'un dans la pièce",
|
||||||
|
"gorger": 4,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"question": "Les joueurs qui ont un iPhone",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"question": "Ceux qui ont déjà participé à un jeu télévisé",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"question": "Ceux qui ont déjà fait une manif",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"question": "Le/La plus susceptible du groupe",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 112,
|
||||||
|
"question": "Le/La plus drôle du groupe (vote à main levée, le perdant boit)",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 113,
|
||||||
|
"question": "Le/La plus 'bête' cul du groupe",
|
||||||
|
"gorger": 4,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114,
|
||||||
|
"question": "Le/La plus timide",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 115,
|
||||||
|
"question": "Le/La plus likely to rater sa vie",
|
||||||
|
"gorger": 4,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 116,
|
||||||
|
"question": "Celui/Celle qui a le plus de stories Instagram",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 117,
|
||||||
|
"question": "Les célibataires de plus de <variante> ans",
|
||||||
|
"gorger": 4,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true,
|
||||||
|
"variante": ["23","25","27","30"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 118,
|
||||||
|
"question": "Ceux qui ont déjà ghosté quelqu'un",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 119,
|
||||||
|
"question": "Celui/Celle qui a fait le pire premier baiser de l'histoire",
|
||||||
|
"gorger": 4,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 120,
|
||||||
|
"question": "Le/La plus 'pick up artist' du groupe",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 121,
|
||||||
|
"question": "<J1> doit parler avec un accent <variante> jusqu'à la fin du défi. <manches> manches",
|
||||||
|
"gorger": 0,
|
||||||
|
"variante": ["belge","suisse","canadien","allemand","anglais","espagnol"],
|
||||||
|
"arret": "Accent oublié!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 122,
|
||||||
|
"question": "Interdiction de dire 'oui' ou 'non' pendant <manches> manches. Si tu dis oui/non : 3 gorgées !",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Plus d'interdiction !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 123,
|
||||||
|
"question": "<J1> doit inventer un surnom ridicule à <J2> et l'utiliser pendant <manches> manches",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Surnom oublié!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 124,
|
||||||
|
"question": "Pause pip interdite pendant <manches> manches. 5 gorgées si tu vas aux toilettes !",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Tu peux enfin aller aux toilettes !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 125,
|
||||||
|
"question": "<J1> ne doit plus répondre quand on l'appelle par son prénom pendant <manches> manches. 3 gorgées par oubli !",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Tu peux enfin répondre à ton prénom !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 126,
|
||||||
|
"question": "Mini-quiz géographique : <J1> doit nommer la capitale d'un pays. Si faux : 2 gorgées. Continue pendant <manches> manches ou jusqu'à 3 bonnes réponses.",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Quiz terminé !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 127,
|
||||||
|
"question": "<J1> doit compléter toutes les phrases des autres par 'coucou bigourd' pendant <manches> manches",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Plus de coucou bigourd !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 128,
|
||||||
|
"question": "<J1> est le serviteur personnel de <J2> pendant <manches> manches. <J2> peut demander des gorgées !",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Servitude terminée !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 129,
|
||||||
|
"question": "Interdiction de rire pendant <manches> manches. 4 gorgées si tu ris !",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Tu peux enfin rire !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 130,
|
||||||
|
"question": "<J1> doit faire une imitation d'un animal au choix de <J2> toutes les 3 questions pendant <manches> manches",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Plus d'imitations !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 131,
|
||||||
|
"question": "<J1> et <J2> se regardent dans les yeux pendant 10 secondes sans rire. Le premier à rire boit 4 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 132,
|
||||||
|
"question": "<J1> doit donner un compliment à <J2>. Si <J2> n'est pas satisfait : <J1> boit 3 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 133,
|
||||||
|
"question": "<J1> à toi de choisir : qui de <J2> ou <J3> a le plus mauvais goût musical ? Le perdant boit 3 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 134,
|
||||||
|
"question": "<J1> doit deviner ce que <J2> a mangé aujourd'hui. 1 gorgée par mauvaise réponse, max 5",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 135,
|
||||||
|
"question": "<J1> et <J2> font un bras de fer. Le perdant boit 5 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 136,
|
||||||
|
"question": "<J1> doit nommer une qualité de <J2>. Si <J2> n'est pas d'accord : 3 gorgées pour <J1>",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 137,
|
||||||
|
"question": "<J1> doit deviner la couleur des sous-vêtements de <J2>. 2 gorgées si faux",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"question": "<J1> doit mimer le métier de <J2>. Les autres doivent deviner en moins de 30 secondes ou <J1> boit 4 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 139,
|
||||||
|
"question": "Ceux qui ont déjà fait du <variante>",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true,
|
||||||
|
"variante": ["cheval","velo","kayak","surf","paintball"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 140,
|
||||||
|
"question": "Les fans de <variante>",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true,
|
||||||
|
"variante": ["Harry Potter","Star Wars","Marvel","Game of Thrones","One Piece"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 141,
|
||||||
|
"question": "Ceux qui écoutent du <variante>",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true,
|
||||||
|
"variante": ["rap","rock","electro","metal","jazz","classique"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 142,
|
||||||
|
"question": "Ceux qui ont déjà fait un binge watch d'une série en moins de 24h",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 143,
|
||||||
|
"question": "Le/La plus 'influençant' du groupe (vote à main levée)",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 144,
|
||||||
|
"question": "Ceux qui ont un animal de compagnie",
|
||||||
|
"gorger": 1,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 145,
|
||||||
|
"question": "<J1> doit dire 3 mots commençant par la même lettre que <J2> choisit. Si échec : 3 gorgées",
|
||||||
|
"gorger": 0,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 146,
|
||||||
|
"question": "Ceux qui ont déjà dormi dehors (camping, festival, etc.)",
|
||||||
|
"gorger": 2,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 147,
|
||||||
|
"question": "Le/La plus 'branché' du groupe selon les autres",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": false,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 148,
|
||||||
|
"question": "Ceux qui ont un_permis de conduire",
|
||||||
|
"gorger": 1,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 149,
|
||||||
|
"question": "<J1> doit répéter tout ce que <J2> dit comme un perroquet pendant <manches> manches",
|
||||||
|
"gorger": 0,
|
||||||
|
"arret": "Plus de perroquet !"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 150,
|
||||||
|
"question": "Ceux qui ont déjà fait un saut à l'élastique ou en parachute",
|
||||||
|
"gorger": 3,
|
||||||
|
"distribution": true,
|
||||||
|
"recois": true
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.google.gson.Gson;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -53,18 +54,23 @@ public class Jeux extends AppCompatActivity {
|
|||||||
private List<String> toutlesjoueurs;
|
private List<String> toutlesjoueurs;
|
||||||
private List<Question> questionsAvecManches = new ArrayList<>();
|
private List<Question> questionsAvecManches = new ArrayList<>();
|
||||||
|
|
||||||
|
// Générateur aléatoire unique pour toute l'activité
|
||||||
|
private final Random random = new Random();
|
||||||
|
|
||||||
// Paramètres de partie
|
// Paramètres de partie
|
||||||
private int nombreQuestions;
|
private int nombreQuestions;
|
||||||
private int ajoutGorgees;
|
private int ajoutGorgees;
|
||||||
private boolean openAI;
|
private boolean openAI;
|
||||||
private int ratiOpenai;
|
private int ratiOpenai;
|
||||||
private String keyOpenai;
|
private String keyOpenai;
|
||||||
|
private int durationDefis; // Offset pour la durée des défis
|
||||||
|
|
||||||
// État du jeu
|
// État du jeu
|
||||||
private int currentQuestionIndex = 0;
|
private int currentQuestionIndex = 0;
|
||||||
private int totalQuestionsAsked = 0;
|
private int totalQuestionsAsked = 0;
|
||||||
private String currentQuestionText = "";
|
private String currentQuestionText = "";
|
||||||
private boolean isMancheActive = false;
|
private boolean isMancheActive = false;
|
||||||
|
private boolean isFinishingGame = false; // Flag pour empêcher les appels multiples pendant la fin du jeu
|
||||||
|
|
||||||
// Clés pour sauvegarde d'état
|
// Clés pour sauvegarde d'état
|
||||||
private static final String KEY_TOTAL_QUESTIONS = "total_questions_asked";
|
private static final String KEY_TOTAL_QUESTIONS = "total_questions_asked";
|
||||||
@@ -84,8 +90,9 @@ public class Jeux extends AppCompatActivity {
|
|||||||
toutlesjoueurs = getIntent().getStringArrayListExtra("EXTRA_LIST_JOUEUR");
|
toutlesjoueurs = getIntent().getStringArrayListExtra("EXTRA_LIST_JOUEUR");
|
||||||
nombreQuestions = getIntent().getIntExtra("EXTRA_NOMBRE_QUESTIONS", 50);
|
nombreQuestions = getIntent().getIntExtra("EXTRA_NOMBRE_QUESTIONS", 50);
|
||||||
ajoutGorgees = getIntent().getIntExtra("EXTRA_AJOUT_GORGEE", 0);
|
ajoutGorgees = getIntent().getIntExtra("EXTRA_AJOUT_GORGEE", 0);
|
||||||
openAI = getIntent().getBooleanExtra("EXTRA_OPENAI", false);
|
|
||||||
ratiOpenai = getIntent().getIntExtra("EXTRA_RATIO_OPENAI", 0);
|
ratiOpenai = getIntent().getIntExtra("EXTRA_RATIO_OPENAI", 0);
|
||||||
|
durationDefis = getIntent().getIntExtra("EXTRA_DURATION_DEFIS", 0);
|
||||||
|
openAI = getIntent().getBooleanExtra("EXTRA_OPENAI", false);
|
||||||
keyOpenai = getIntent().getStringExtra("EXTRA_KEY_OPENAI");
|
keyOpenai = getIntent().getStringExtra("EXTRA_KEY_OPENAI");
|
||||||
|
|
||||||
// Charger les questions depuis le JSON
|
// Charger les questions depuis le JSON
|
||||||
@@ -98,6 +105,8 @@ public class Jeux extends AppCompatActivity {
|
|||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
restoreGameState(savedInstanceState);
|
restoreGameState(savedInstanceState);
|
||||||
} else {
|
} else {
|
||||||
|
// Réinitialiser le flag de fin de jeu
|
||||||
|
isFinishingGame = false;
|
||||||
// Afficher la première question
|
// Afficher la première question
|
||||||
updateQuestion();
|
updateQuestion();
|
||||||
}
|
}
|
||||||
@@ -125,6 +134,9 @@ public class Jeux extends AppCompatActivity {
|
|||||||
BoideloAnimationUtils.applyButtonPressAnimation(suivantButton);
|
BoideloAnimationUtils.applyButtonPressAnimation(suivantButton);
|
||||||
BoideloAnimationUtils.applyButtonPressAnimation(skipButton);
|
BoideloAnimationUtils.applyButtonPressAnimation(skipButton);
|
||||||
|
|
||||||
|
// Cacher le bouton Passé au début (uniquement visible pendant les défis)
|
||||||
|
skipButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
// Initialiser la couleur de fond (respecte le mode jour/nuit)
|
// Initialiser la couleur de fond (respecte le mode jour/nuit)
|
||||||
int backgroundColor = ContextCompat.getColor(this, R.color.game_normal);
|
int backgroundColor = ContextCompat.getColor(this, R.color.game_normal);
|
||||||
getWindow().getDecorView().setBackgroundColor(backgroundColor);
|
getWindow().getDecorView().setBackgroundColor(backgroundColor);
|
||||||
@@ -193,6 +205,11 @@ public class Jeux extends AppCompatActivity {
|
|||||||
* Met à jour la question affichée avec toutes les animations
|
* Met à jour la question affichée avec toutes les animations
|
||||||
*/
|
*/
|
||||||
private void updateQuestion() {
|
private void updateQuestion() {
|
||||||
|
// Si le jeu est en train de se terminer, ne rien faire
|
||||||
|
if (isFinishingGame) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Vérifier si toutes les questions ont été posées
|
// Vérifier si toutes les questions ont été posées
|
||||||
if (totalQuestionsAsked >= nombreQuestions) {
|
if (totalQuestionsAsked >= nombreQuestions) {
|
||||||
// Vérifier s'il y a encore des manches actives
|
// Vérifier s'il y a encore des manches actives
|
||||||
@@ -247,10 +264,11 @@ public class Jeux extends AppCompatActivity {
|
|||||||
// Vibration de succès
|
// Vibration de succès
|
||||||
BoideloAnimationUtils.triggerSuccessHaptic(this);
|
BoideloAnimationUtils.triggerSuccessHaptic(this);
|
||||||
|
|
||||||
// Masquer le compteur de manches et l'indicateur
|
// Masquer le compteur de manches, l'indicateur et le bouton Passé
|
||||||
mancheCounterTextView.setVisibility(View.GONE);
|
mancheCounterTextView.setVisibility(View.GONE);
|
||||||
questionIndicator.setVisibility(View.GONE);
|
questionIndicator.setVisibility(View.GONE);
|
||||||
mancheQuestionText.setVisibility(View.GONE);
|
mancheQuestionText.setVisibility(View.GONE);
|
||||||
|
skipButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
// Animation de fond jaune temporaire
|
// Animation de fond jaune temporaire
|
||||||
int yellowColor = ContextCompat.getColor(this, R.color.game_manche_end);
|
int yellowColor = ContextCompat.getColor(this, R.color.game_manche_end);
|
||||||
@@ -267,6 +285,9 @@ public class Jeux extends AppCompatActivity {
|
|||||||
* Affiche le message de fin de manche finale (quand le jeu se termine)
|
* Affiche le message de fin de manche finale (quand le jeu se termine)
|
||||||
*/
|
*/
|
||||||
private void showFinalMancheEndMessage() {
|
private void showFinalMancheEndMessage() {
|
||||||
|
// Marquer le jeu comme en train de se terminer
|
||||||
|
isFinishingGame = true;
|
||||||
|
|
||||||
// Récupérer le message de la dernière manche
|
// Récupérer le message de la dernière manche
|
||||||
if (!questionsAvecManches.isEmpty()) {
|
if (!questionsAvecManches.isEmpty()) {
|
||||||
Question lastManche = questionsAvecManches.get(0);
|
Question lastManche = questionsAvecManches.get(0);
|
||||||
@@ -280,10 +301,12 @@ public class Jeux extends AppCompatActivity {
|
|||||||
// Vibration de succès
|
// Vibration de succès
|
||||||
BoideloAnimationUtils.triggerSuccessHaptic(this);
|
BoideloAnimationUtils.triggerSuccessHaptic(this);
|
||||||
|
|
||||||
// Masquer le compteur et l'indicateur
|
// Masquer le compteur, l'indicateur et le bouton Passé
|
||||||
mancheCounterTextView.setVisibility(View.GONE);
|
mancheCounterTextView.setVisibility(View.GONE);
|
||||||
questionIndicator.setVisibility(View.GONE);
|
questionIndicator.setVisibility(View.GONE);
|
||||||
mancheQuestionText.setVisibility(View.GONE);
|
mancheQuestionText.setVisibility(View.GONE);
|
||||||
|
skipButton.setVisibility(View.GONE);
|
||||||
|
suivantButton.setEnabled(false); // Désactiver le bouton pendant la fin
|
||||||
|
|
||||||
// Terminer après un délai
|
// Terminer après un délai
|
||||||
mancheCounterTextView.postDelayed(() -> {
|
mancheCounterTextView.postDelayed(() -> {
|
||||||
@@ -397,12 +420,35 @@ public class Jeux extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Passe la question actuelle
|
* Passe la question actuelle ou ignore le défi en cours
|
||||||
*/
|
*/
|
||||||
private void skipQuestion() {
|
private void skipQuestion() {
|
||||||
// Marquer la question comme posée pour ne pas la revoir
|
// Vérifier s'il y a un défi en cours
|
||||||
totalQuestionsAsked++;
|
if (!questionsAvecManches.isEmpty()) {
|
||||||
updateProgressBar();
|
// Ignorer le défi actuel
|
||||||
|
Question mancheToRemove = questionsAvecManches.get(0);
|
||||||
|
questionsAvecManches.clear();
|
||||||
|
|
||||||
|
// Masquer le compteur, l'indicateur et le bouton Passé
|
||||||
|
mancheCounterTextView.setVisibility(View.GONE);
|
||||||
|
questionIndicator.setVisibility(View.GONE);
|
||||||
|
mancheQuestionText.setVisibility(View.GONE);
|
||||||
|
skipButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
// Afficher un message de confirmation
|
||||||
|
Toast.makeText(this, "Défi ignoré !", Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
// Vibration de confirmation
|
||||||
|
BoideloAnimationUtils.triggerHapticFeedback(this);
|
||||||
|
|
||||||
|
// Animation de fond
|
||||||
|
int defaultColor = ContextCompat.getColor(this, R.color.game_normal);
|
||||||
|
BoideloAnimationUtils.animateBackgroundColor(getWindow().getDecorView(), defaultColor);
|
||||||
|
} else {
|
||||||
|
// Sinon, passer simplement la question
|
||||||
|
totalQuestionsAsked++;
|
||||||
|
updateProgressBar();
|
||||||
|
}
|
||||||
updateQuestion();
|
updateQuestion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,13 +505,15 @@ public class Jeux extends AppCompatActivity {
|
|||||||
*/
|
*/
|
||||||
public List<String> TroisJoueurAleatoire(List<String> toutlesjoueurs) {
|
public List<String> TroisJoueurAleatoire(List<String> toutlesjoueurs) {
|
||||||
Set<String> setJoueur = new HashSet<>();
|
Set<String> setJoueur = new HashSet<>();
|
||||||
Random rand = new Random();
|
|
||||||
|
|
||||||
while (setJoueur.size() < 3 && toutlesjoueurs.size() >= 3) {
|
while (setJoueur.size() < 3 && toutlesjoueurs.size() >= 3) {
|
||||||
setJoueur.add(toutlesjoueurs.get(rand.nextInt(toutlesjoueurs.size())));
|
setJoueur.add(toutlesjoueurs.get(random.nextInt(toutlesjoueurs.size())));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ArrayList<>(setJoueur);
|
// Mélanger la liste pour avoir un ordre aléatoire (pas toujours le même)
|
||||||
|
List<String> result = new ArrayList<>(setJoueur);
|
||||||
|
Collections.shuffle(result, random);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -502,8 +550,28 @@ public class Jeux extends AppCompatActivity {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Random random = new Random();
|
// Filtrer les questions : si un défi est en cours, exclure celles avec <manches>
|
||||||
Question question = unaskedQuestions.get(random.nextInt(unaskedQuestions.size()));
|
List<Question> availableQuestions = new ArrayList<>();
|
||||||
|
boolean mancheActive = !questionsAvecManches.isEmpty();
|
||||||
|
|
||||||
|
for (Question question : unaskedQuestions) {
|
||||||
|
if (mancheActive) {
|
||||||
|
// Un défi est en cours, exclure les questions avec <manches>
|
||||||
|
if (!question.getQuestion().contains("<manches>")) {
|
||||||
|
availableQuestions.add(question);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Pas de défi en cours, toutes les questions sont disponibles
|
||||||
|
availableQuestions.add(question);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si aucune question disponible (que des questions avec <manches> alors qu'un défi est en cours)
|
||||||
|
if (availableQuestions.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Question question = availableQuestions.get(random.nextInt(availableQuestions.size()));
|
||||||
askedQuestions.add(String.valueOf(question.getId()));
|
askedQuestions.add(String.valueOf(question.getId()));
|
||||||
|
|
||||||
// Sauvegarder les questions posées
|
// Sauvegarder les questions posées
|
||||||
@@ -521,7 +589,6 @@ public class Jeux extends AppCompatActivity {
|
|||||||
* Traite une question (remplace les variables, etc.)
|
* Traite une question (remplace les variables, etc.)
|
||||||
*/
|
*/
|
||||||
private void processQuestion(Question question) {
|
private void processQuestion(Question question) {
|
||||||
Random random = new Random();
|
|
||||||
String questionText = question.getQuestion();
|
String questionText = question.getQuestion();
|
||||||
|
|
||||||
// Remplacer les variantes
|
// Remplacer les variantes
|
||||||
@@ -532,13 +599,21 @@ public class Jeux extends AppCompatActivity {
|
|||||||
|
|
||||||
// Gérer les manches
|
// Gérer les manches
|
||||||
if (questionText.contains("<manches>")) {
|
if (questionText.contains("<manches>")) {
|
||||||
int nbaleatoiremanches = random.nextInt(10) + 5;
|
int nbaleatoiremanches = random.nextInt(10) + 5 + durationDefis;
|
||||||
|
// S'assurer qu'il y a au moins 1 manche
|
||||||
|
if (nbaleatoiremanches < 1) {
|
||||||
|
nbaleatoiremanches = 1;
|
||||||
|
}
|
||||||
questionText = questionText.replace("<manches>", String.valueOf(nbaleatoiremanches));
|
questionText = questionText.replace("<manches>", String.valueOf(nbaleatoiremanches));
|
||||||
question.setManchesRestantes(nbaleatoiremanches);
|
question.setManchesRestantes(nbaleatoiremanches);
|
||||||
|
|
||||||
String stopid = getArretById(question.getId());
|
String stopid = getArretById(question.getId());
|
||||||
question.setArretMessageManche("Fin de défi!\n" + stopid);
|
question.setArretMessageManche("Fin de défi!\n" + stopid);
|
||||||
questionsAvecManches.add(question);
|
questionsAvecManches.add(question);
|
||||||
|
|
||||||
|
// Afficher le bouton Passé pendant les défis
|
||||||
|
skipButton.setVisibility(View.VISIBLE);
|
||||||
|
BoideloAnimationUtils.fadeIn(skipButton, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remplacer les joueurs
|
// Remplacer les joueurs
|
||||||
@@ -637,6 +712,7 @@ public class Jeux extends AppCompatActivity {
|
|||||||
totalQuestionsAsked = savedInstanceState.getInt(KEY_TOTAL_QUESTIONS, 0);
|
totalQuestionsAsked = savedInstanceState.getInt(KEY_TOTAL_QUESTIONS, 0);
|
||||||
currentQuestionText = savedInstanceState.getString(KEY_CURRENT_QUESTION_TEXT, "");
|
currentQuestionText = savedInstanceState.getString(KEY_CURRENT_QUESTION_TEXT, "");
|
||||||
isMancheActive = savedInstanceState.getBoolean(KEY_IS_MANCHE_ACTIVE, false);
|
isMancheActive = savedInstanceState.getBoolean(KEY_IS_MANCHE_ACTIVE, false);
|
||||||
|
isFinishingGame = false; // Réinitialiser le flag de fin de jeu
|
||||||
|
|
||||||
// Restaurer la progression
|
// Restaurer la progression
|
||||||
progressBar.setProgress(totalQuestionsAsked);
|
progressBar.setProgress(totalQuestionsAsked);
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ import okhttp3.Response;
|
|||||||
|
|
||||||
public class JeuxParametres extends AppCompatActivity {
|
public class JeuxParametres extends AppCompatActivity {
|
||||||
|
|
||||||
private SeekBar seekBar1, seekBar2, seekBar3;
|
private SeekBar seekBar1, seekBar2, seekBar3, seekBarDuration;
|
||||||
private TextView textView1, textView2, textView5, textViewRatioGen;
|
private TextView textView1, textView2, textView5, textViewRatioGen, questionCountValue, gorgeesValue, durationValue;
|
||||||
private SwitchMaterial checkBoxGPT;
|
private SwitchMaterial checkBoxGPT;
|
||||||
private EditText editText, editTextKeyGPT;
|
private EditText editText, editTextKeyGPT;
|
||||||
private String keyGPT;
|
private String keyGPT;
|
||||||
@@ -52,19 +52,25 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
seekBar1 = findViewById(R.id.seekBar1);
|
seekBar1 = findViewById(R.id.seekBar1);
|
||||||
seekBar2 = findViewById(R.id.seekBar2);
|
seekBar2 = findViewById(R.id.seekBar2);
|
||||||
seekBar3 = findViewById(R.id.seekBar3);
|
seekBar3 = findViewById(R.id.seekBar3);
|
||||||
|
seekBarDuration = findViewById(R.id.seekBarDuration);
|
||||||
textView1 = findViewById(R.id.textView1);
|
textView1 = findViewById(R.id.textView1);
|
||||||
textView2 = findViewById(R.id.textView2);
|
textView2 = findViewById(R.id.textView2);
|
||||||
textView5 = findViewById(R.id.textView5);
|
textView5 = findViewById(R.id.textView5);
|
||||||
editTextKeyGPT = findViewById(R.id.editTextGPT);
|
editTextKeyGPT = findViewById(R.id.editTextGPT);
|
||||||
textViewRatioGen = findViewById(R.id.textViewRatioGen);
|
textViewRatioGen = findViewById(R.id.textViewRatioGen);
|
||||||
|
questionCountValue = findViewById(R.id.questionCountValue);
|
||||||
|
gorgeesValue = findViewById(R.id.gorgeesValue);
|
||||||
|
durationValue = findViewById(R.id.durationValue);
|
||||||
|
|
||||||
// Initialiser les TextView avec les valeurs par défaut
|
// Initialiser les TextView avec les valeurs par défaut
|
||||||
int initialQuestions = 50;
|
int initialQuestions = 50;
|
||||||
int initialGorgees = 0;
|
int initialGorgees = 0;
|
||||||
int initialRatio = 8;
|
int initialRatio = 8;
|
||||||
|
int initialDuration = 0;
|
||||||
|
|
||||||
textView1.setText("Nombre de questions avant la fin de partie : " + initialQuestions);
|
questionCountValue.setText(String.valueOf(initialQuestions));
|
||||||
textView2.setText("Ajout de gorgées : " + initialGorgees);
|
gorgeesValue.setText(String.valueOf(initialGorgees));
|
||||||
|
durationValue.setText("0"); // Afficher 0 par défaut (pas de signe pour 0)
|
||||||
textView5.setText("Palier : Grosse merde");
|
textView5.setText("Palier : Grosse merde");
|
||||||
textViewRatioGen.setText("Ratio BDD/OPENAI : 1/" + initialRatio);
|
textViewRatioGen.setText("Ratio BDD/OPENAI : 1/" + initialRatio);
|
||||||
|
|
||||||
@@ -89,6 +95,13 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
seekBar3.setMax(15);
|
seekBar3.setMax(15);
|
||||||
seekBar3.setProgress(8);
|
seekBar3.setProgress(8);
|
||||||
|
|
||||||
|
// Configuration de la seekBarDuration (permet valeurs négatives pour offset)
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
seekBarDuration.setMin(-5); // Permet un offset négatif jusqu'à -5
|
||||||
|
}
|
||||||
|
seekBarDuration.setMax(15);
|
||||||
|
seekBarDuration.setProgress(0); // Valeur par défaut à 0
|
||||||
|
|
||||||
// Configuration des listeners pour les seekBars
|
// Configuration des listeners pour les seekBars
|
||||||
seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -96,7 +109,7 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
// Ajustement de la valeur au multiple de 10 le plus proche
|
// Ajustement de la valeur au multiple de 10 le plus proche
|
||||||
int adjustedProgress = Math.round(progress / 10) * 10;
|
int adjustedProgress = Math.round(progress / 10) * 10;
|
||||||
seekBar.setProgress(adjustedProgress);
|
seekBar.setProgress(adjustedProgress);
|
||||||
textView1.setText("Nombre de questions avant la fin de partie : " + adjustedProgress);
|
questionCountValue.setText(String.valueOf(adjustedProgress));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -111,8 +124,8 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
seekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
seekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
// Mise à jour du textView2 en fonction de la valeur de la seekBar2
|
// Mise à jour du gorgeesValue en fonction de la valeur de la seekBar2
|
||||||
textView2.setText("Ajout de gorgées : " + progress);
|
gorgeesValue.setText(String.valueOf(progress));
|
||||||
// Mise à jour du textView5 en fonction de la valeur de la seekBar2
|
// Mise à jour du textView5 en fonction de la valeur de la seekBar2
|
||||||
switch (progress) {
|
switch (progress) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -169,7 +182,7 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Configuration du checkBox // Q : IL sert a quoi ?
|
// Configuration du checkBox // Q : IL sert à quoi ?
|
||||||
// R : Il sert à activer/désactiver les vues en dessous
|
// R : Il sert à activer/désactiver les vues en dessous
|
||||||
|
|
||||||
checkBoxGPT = findViewById(R.id.checkBoxGPT);
|
checkBoxGPT = findViewById(R.id.checkBoxGPT);
|
||||||
@@ -201,6 +214,29 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Configuration de la seekBarDuration
|
||||||
|
seekBarDuration.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
|
// Afficher avec signe +/- pour bien voir l'offset, mais sans signe pour 0
|
||||||
|
String displayValue;
|
||||||
|
if (progress > 0) {
|
||||||
|
displayValue = "+" + progress;
|
||||||
|
} else {
|
||||||
|
displayValue = String.valueOf(progress); // Affiche "0" ou "-X"
|
||||||
|
}
|
||||||
|
durationValue.setText(displayValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Partie OpenAI : enregistrement de la clé en dur.
|
// Partie OpenAI : enregistrement de la clé en dur.
|
||||||
// Récupérer une instance des SharedPreferences
|
// Récupérer une instance des SharedPreferences
|
||||||
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
|
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
|
||||||
@@ -291,6 +327,7 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
int nombreQuestions = seekBar1.getProgress();
|
int nombreQuestions = seekBar1.getProgress();
|
||||||
int ajoutGorgees = seekBar2.getProgress();
|
int ajoutGorgees = seekBar2.getProgress();
|
||||||
int ratioBddOpenAI = seekBar3.getProgress();
|
int ratioBddOpenAI = seekBar3.getProgress();
|
||||||
|
int durationDefis = seekBarDuration.getProgress();
|
||||||
boolean openAI = checkBoxGPT.isChecked();
|
boolean openAI = checkBoxGPT.isChecked();
|
||||||
|
|
||||||
toutlesjoueurs = getIntent().getStringArrayListExtra("EXTRA_LIST_JOUEUR");
|
toutlesjoueurs = getIntent().getStringArrayListExtra("EXTRA_LIST_JOUEUR");
|
||||||
@@ -322,6 +359,7 @@ public class JeuxParametres extends AppCompatActivity {
|
|||||||
intent.putExtra("EXTRA_NOMBRE_QUESTIONS", nombreQuestions);
|
intent.putExtra("EXTRA_NOMBRE_QUESTIONS", nombreQuestions);
|
||||||
intent.putExtra("EXTRA_AJOUT_GORGEE", ajoutGorgees);
|
intent.putExtra("EXTRA_AJOUT_GORGEE", ajoutGorgees);
|
||||||
intent.putExtra("EXTRA_RATIO_OPENAI", ratioBddOpenAI);
|
intent.putExtra("EXTRA_RATIO_OPENAI", ratioBddOpenAI);
|
||||||
|
intent.putExtra("EXTRA_DURATION_DEFIS", durationDefis);
|
||||||
intent.putExtra("EXTRA_OPENAI", openAI);
|
intent.putExtra("EXTRA_OPENAI", openAI);
|
||||||
final EditText editText = findViewById(R.id.editTextGPT);
|
final EditText editText = findViewById(R.id.editTextGPT);
|
||||||
intent.putExtra("EXTRA_KEY_OPENAI",editText.getText().toString() );
|
intent.putExtra("EXTRA_KEY_OPENAI",editText.getText().toString() );
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
int ratiOpenai;
|
int ratiOpenai;
|
||||||
String keyOpenai, phraseGPTString;
|
String keyOpenai, phraseGPTString;
|
||||||
|
|
||||||
|
// Générateur aléatoire unique pour toute l'activité
|
||||||
|
private final Random random = new Random();
|
||||||
|
|
||||||
|
|
||||||
public Jeuxold() {
|
public Jeuxold() {
|
||||||
//System.out.println("Je suis dans le constructeur jeux");
|
//System.out.println("Je suis dans le constructeur jeux");
|
||||||
@@ -109,39 +112,39 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
List aleatoirejoueurs = TroisJoueurAleatoire(toutlesjoueurs);
|
List aleatoirejoueurs = TroisJoueurAleatoire(toutlesjoueurs);
|
||||||
phraseAvecNom.add(ChoixJoueurAleatoire(toutlesjoueurs) + " dois boire " + Gorgeesaleatoire(2, 4)+ " Gorgées");
|
phraseAvecNom.add(ChoixJoueurAleatoire(toutlesjoueurs) + " dois boire " + Gorgeesaleatoire(2, 4)+ " Gorgées");
|
||||||
phraseAvecNom.add(ChoixJoueurAleatoire((toutlesjoueurs))+ " est le vieux briscard ! Interdiction de montrer tes dents pendant 5 manches");
|
phraseAvecNom.add(ChoixJoueurAleatoire((toutlesjoueurs))+ " est le vieux briscard ! Interdiction de montrer tes dents pendant 5 manches");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0) + " et "+ aleatoirejoueurs.get(1) +" liser le premier SMS qui s'affiche quand on tape désolé dans la barre de recherche. Refusez pour 5 gorgées");
|
phraseAvecNom.add(aleatoirejoueurs.get(0) + " et "+ aleatoirejoueurs.get(1) +" lire le premier SMS qui s'affiche quand on tape désolé dans la barre de recherche. Refusez pour 5 gorgées");
|
||||||
phraseAvecNom.add( "A tour de role, vous avez exactement 3 secondes pour donner un mot en rapport avec le mots dit precedemment. Le joueur qui perd boit "+ Gorgeesaleatoire(2, 4) + " Gorgées! "+ aleatoirejoueurs.get(2)+" tu commences en choissisant un mot.");
|
phraseAvecNom.add( "A tour de rôle, vous avez exactement 3 secondes pour donner un mot en rapport avec le mots dit précédemment. Le joueur qui perd boit "+ Gorgeesaleatoire(2, 4) + " Gorgées! "+ aleatoirejoueurs.get(2)+" tu commences en choisissant un mot.");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+ " defie "+ aleatoirejoueurs.get(1) + " au chifoumi ! Le joueur qui gagne distribue 5 Gorgées");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+ " défie "+ aleatoirejoueurs.get(1) + " au chifoumi ! Le joueur qui gagne distribue 5 Gorgées");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+ " a toi de juger : entre "+aleatoirejoueurs.get(1)+ " et "+ aleatoirejoueurs.get(2) + " qui stresse le plus pour un rien selon toi? Cette personne se detendra en buvant " + Gorgeesaleatoire(3, 5 ) + " Gorgées");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+ " à toi de juger : entre "+aleatoirejoueurs.get(1)+ " et "+ aleatoirejoueurs.get(2) + " qui stresse le plus pour un rien selon toi? Cette personne se détendra en buvant " + Gorgeesaleatoire(3, 5 ) + " Gorgées");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est dans le futur ! Tu dois parler au futur pendant 4 tours Une gorgées a chaque manque.");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est dans le futur ! Tu dois parler au futur pendant 4 tours Une gorgée à chaque manque.");
|
||||||
phraseAvecNom.add("Les joueurs de Counter Strike peuvent distribuer" + GorgeesaleatoireAmeliorer(1, 4));
|
phraseAvecNom.add("Les joueurs de Counter Strike peuvent distribuer" + GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" tu bois autant de gorgées que tu as d'années d'études après le BAC");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" tu bois autant de gorgées que tu as d'années d'études après le BAC");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+" ferment leurs yeux ! Ils/Elles doivent deviner la couleur des yeux de l'autre. Si ils/elles se trompent, c'est "+GorgeesaleatoireAmeliorer(2, 4));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+" ferment leurs yeux ! Ils/Elles doivent deviner la couleur des yeux de l'autre. Si ils/elles se trompent, c'est "+GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est manchot ! Il/Elle ne peut plus utiliser ses doigts durant 3 tours . Si il/elle s'en sert, il/elle devra boire autant de gorgées qu'il/elle a utilisé de doigts");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est manchot ! Il/Elle ne peut plus utiliser ses doigts durant 3 tours . Si il/elle s'en sert, il/elle devra boire autant de gorgées qu'il/elle a utilisé de doigts");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+" , si vous êtes ensemble dans la vraie vie, vous pouvez distribuer 2 gorgées , autrement buvez-les");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+" , si vous êtes ensemble dans la vraie vie, vous pouvez distribuer 2 gorgées , autrement buvez-les");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", donne le nombre d'habitant du Tadjikistant ( à 1 000 000 près) ou boit "+GorgeesaleatoireAmeliorer(2, 4));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", donne le nombre d'habitants du Tadjikistan ( à 1 000 000 près) ou boit "+GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" a la tourette ! A chaque fois que tu bois une gorgée, tu dois CRIER une insulte. C'est un stade avancé, ça dure 3 tours");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" a la tourette ! A chaque fois que tu bois une gorgée, tu dois CRIER une insulte. C'est un stade avancé, ça dure 3 tours");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", donne la couleur préférée de "+aleatoirejoueurs.get(1)+" si tu te trompes, c'est 2 gorgées");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", donne la couleur préférée de "+aleatoirejoueurs.get(1)+" si tu te trompes, c'est 2 gorgées");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" à l'oeil de serpent pendant 5 tours ! Dès qu'un joueur te regarde dans les yeux, il/elle boit. Si personne ne t'as regardé tu bois"+GorgeesaleatoireAmeliorer(5, 9));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" à l'oeil de serpent pendant 5 tours ! Dès qu'un joueur te regarde dans les yeux, il/elle boit. Si personne ne t'a regardé tu bois"+GorgeesaleatoireAmeliorer(5, 9));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+"se mesurent ! Le plus petit peut bois"+GorgeesaleatoireAmeliorer(3, 5));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+"se mesurent ! Le plus petit peut boire"+GorgeesaleatoireAmeliorer(3, 5));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" doit terminer toutes ses phrases par - C'est clair pendant 7 tours");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" doit terminer toutes ses phrases par - C'est clair pendant 7 tours");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" distribue"+GorgeesaleatoireAmeliorer(2,5)+" à la personne que tu trouves la mieux foutue");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" distribue"+GorgeesaleatoireAmeliorer(2,5)+" à la personne que tu trouves la mieux foutue");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" distribue"+GorgeesaleatoireAmeliorer(2,5)+" à qui tu veux.");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" distribue"+GorgeesaleatoireAmeliorer(2,5)+" à qui tu veux.");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+" se défient au 'je te tiens, tu me tiens', le premier qui rit sera une tapette, et devra boire"+GorgeesaleatoireAmeliorer(4,6));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+" se défient au 'je te tiens, tu me tiens', le premier qui rit sera une tapette, et devra boire"+GorgeesaleatoireAmeliorer(4,6));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+"n'ont plus le droit d'utiliser leur téléphone jusqu'à la fin du jeu ! A chaque manque c'est"+GorgeesaleatoireAmeliorer(1,3));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+"n'ont plus le droit d'utiliser leur téléphone jusqu'à la fin du jeu ! A chaque manque c'est"+GorgeesaleatoireAmeliorer(1,3));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+ "racontent une anecdote, celui/celle qui sort la plus banale boit "+GorgeesaleatoireAmeliorer(3, 6));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+aleatoirejoueurs.get(1)+ "racontent une anecdote, celui/celle qui sort la plus banale boit "+GorgeesaleatoireAmeliorer(3, 6));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", pour"+GorgeesaleatoireAmeliorer(2,4)+", a qui est ce slogan? Y a pas plus fort. (Vigor)");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", pour"+GorgeesaleatoireAmeliorer(2,4)+", à qui est ce slogan? Y a pas plus fort. (Vigor)");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Vrai ou faux? L'eau est bleu car elle reflète le ciel? (Non) Si tu as repondu faux tu devras boire : "+GorgeesaleatoireAmeliorer(2,4));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Vrai ou faux? L'eau est bleue car elle reflète le ciel? (Non) Si tu as répondu faux tu devras boire : "+GorgeesaleatoireAmeliorer(2,4));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Si on te dit Marco? ... Si tu as dis Polo tu bois "+GorgeesaleatoireAmeliorer(1,3));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Si on te dit Marco? ... Si tu as dit Polo tu bois "+GorgeesaleatoireAmeliorer(1,3));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Boire un café fait baisser le taux d'alcool? "+GorgeesaleatoireAmeliorer(5, 8)+"en jeu (FAUX)");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", Boire un café fait baisser le taux d'alcool? "+GorgeesaleatoireAmeliorer(5, 8)+"en jeu (FAUX)");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est l'aigris pendant 5tours ! Dès que tu souris ou rigoles, tu bois "+GorgeesaleatoireAmeliorer(2,3));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" est l'aigris pendant 5 tours ! Dès que tu souris ou rigoles, tu bois "+GorgeesaleatoireAmeliorer(2,3));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" fait un geste, le suivant répète et en ajoute un. Le perdant boit"+GorgeesaleatoireAmeliorer(3,5));
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" fait un geste, le suivant répète et en ajoute un. Le perdant boit"+GorgeesaleatoireAmeliorer(3,5));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", "+aleatoirejoueurs.get(2)+" et "+aleatoirejoueurs.get(1)+" vont désigner quelqu'un qui doit terminer son verre ");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", "+aleatoirejoueurs.get(2)+" et "+aleatoirejoueurs.get(1)+" vont désigner quelqu'un qui doit terminer son verre ");
|
||||||
phraseAvecNom.add("Récitez l'alphabet en énonçant une lettre à tour de rôle. Si "+aleatoirejoueurs.get(0)+" finit son verre avant, cul sec pour tout le monde !");
|
phraseAvecNom.add("Récitez l'alphabet en énonçant une lettre à tour de rôle. Si "+aleatoirejoueurs.get(0)+" finit son verre avant, cul sec pour tout le monde !");
|
||||||
phraseAvecNom.add("Si"+aleatoirejoueurs.get(0)+" arrive a finir son verre en moins de 5 secondes, il/elle peut distribuer"+ GorgeesaleatoireAmeliorer(5, 8));
|
phraseAvecNom.add("Si"+aleatoirejoueurs.get(0)+" arrive à finir son verre en moins de 5 secondes, il/elle peut distribuer"+ GorgeesaleatoireAmeliorer(5, 8));
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+"sont lies, si l'un boit alors l'autre aussi, et ce pendant 5 tours");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" et "+ aleatoirejoueurs.get(1)+"sont liés, si l'un boit alors l'autre aussi, et ce pendant 5 tours");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+", "+aleatoirejoueurs.get(2)+" et "+ aleatoirejoueurs.get(1)+"sont lies, si l'un boit alors les autres aussi, et ce pendant 5 tours");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+", "+aleatoirejoueurs.get(2)+" et "+ aleatoirejoueurs.get(1)+"sont liés, si l'un boit alors les autres aussi, et ce pendant 5 tours");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" dit un mot, la personne suivante le répète et en ajoute un nouveau, ainsi de suite jusqu'a ce que quelqu'un se trompe. Le perdant boit autant de gorgées qu'il y a eu de personne avant lui");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" dit un mot, la personne suivante le répète et en ajoute un nouveau, ainsi de suite jusqu'à ce que quelqu'un se trompe. Le perdant boit autant de gorgées qu'il y a eu de personne avant lui");
|
||||||
phraseAvecNom.add(aleatoirejoueurs.get(0)+" doit choisir un mot que tout le monde devra dire à chaque fois qu'une personne boit.");
|
phraseAvecNom.add(aleatoirejoueurs.get(0)+" doit choisir un mot que tout le monde devra dire à chaque fois qu'une personne boit.");
|
||||||
//phraseAvecNom.add(aleatoirejoueurs.get(0)+"");
|
//phraseAvecNom.add(aleatoirejoueurs.get(0)+"");
|
||||||
//phraseAvecNom.add(aleatoirejoueurs.get(0)+"");
|
//phraseAvecNom.add(aleatoirejoueurs.get(0)+"");
|
||||||
@@ -155,15 +158,15 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
List<String> phraseSansNom = new ArrayList<String>();
|
List<String> phraseSansNom = new ArrayList<String>();
|
||||||
//Ajout de defis
|
//Ajout de defis
|
||||||
phraseSansNom.add("Tout le monde boit "+ Gorgeesaleatoire(1, 2)+" gorgée(s)");
|
phraseSansNom.add("Tout le monde boit "+ Gorgeesaleatoire(1, 2)+" gorgée(s)");
|
||||||
phraseSansNom.add("Quand l'heure affichera un multiple de 10 (22h, 22h10 ...) le premier a crier \"merde j'ai oublié mon chat\" distribura " + Gorgeesaleatoire(10, 12)+ " Gorgées");
|
phraseSansNom.add("Quand l'heure affichera un multiple de 10 (22h, 22h10 ...) le premier à crier \"merde j'ai oublié mon chat\" distribuera " + Gorgeesaleatoire(10, 12)+ " Gorgées");
|
||||||
phraseSansNom.add("Ceux qui ont dansé aujourd'hui boivent 4 gorgées");
|
phraseSansNom.add("Ceux qui ont dansé aujourd'hui boivent 4 gorgées");
|
||||||
phraseSansNom.add("Bois "+ Gorgeesaleatoire(2, 6)+ " Gorgées si tu n'as pas ton veritable nom sur insta");
|
phraseSansNom.add("Bois "+ Gorgeesaleatoire(2, 6)+ " Gorgées si tu n'as pas ton véritable nom sur insta");
|
||||||
phraseSansNom.add("Bois "+ Gorgeesaleatoire(2, 3)+ " Gorgées si tu a des photos sur insta.");
|
phraseSansNom.add("Bois "+ Gorgeesaleatoire(2, 3)+ " Gorgées si tu as des photos sur insta.");
|
||||||
phraseSansNom.add("Plutôt ne plus avoir de mains ou de jambes? les perdants boivent "+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Plutôt ne plus avoir de mains ou de jambes? les perdants boivent "+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Celles/Ceux qui ont habité dans plus de 3 villes boivent "+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Celles/Ceux qui ont habité dans plus de 3 villes différentes boivent "+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Vive la poésie ! Nos phrases doivent rimer sous peine d'une gorgée");
|
phraseSansNom.add("Vive la poésie ! Nos phrases doivent rimer sous peine d'une gorgée");
|
||||||
phraseSansNom.add("Elisez le joueur le moins drôle d'entre vous, ce dernier boit" + GorgeesaleatoireAmeliorer(1,4 ));
|
phraseSansNom.add("Élisez le joueur le moins drôle d'entre vous, ce dernier boit" + GorgeesaleatoireAmeliorer(1,4 ));
|
||||||
phraseSansNom.add("Elisez le joueur le plus drôle d'entre vous, ce dernier distribue" + GorgeesaleatoireAmeliorer(1,4 ));
|
phraseSansNom.add("Élisez le joueur le plus drôle d'entre vous, ce dernier distribue" + GorgeesaleatoireAmeliorer(1,4 ));
|
||||||
phraseSansNom.add("La dernière personne à avoir vomi en soirée distribue" + GorgeesaleatoireAmeliorer(2,4));
|
phraseSansNom.add("La dernière personne à avoir vomi en soirée distribue" + GorgeesaleatoireAmeliorer(2,4));
|
||||||
phraseSansNom.add("Les filles peuvent distribuer"+ GorgeesaleatoireAmeliorer(1, 2));
|
phraseSansNom.add("Les filles peuvent distribuer"+ GorgeesaleatoireAmeliorer(1, 2));
|
||||||
phraseSansNom.add("Les garçons peuvent distribuer"+ GorgeesaleatoireAmeliorer(1, 2));
|
phraseSansNom.add("Les garçons peuvent distribuer"+ GorgeesaleatoireAmeliorer(1, 2));
|
||||||
@@ -175,7 +178,7 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
phraseSansNom.add("Plutôt avoir un tapis volant, ou un frigo qui se remplit tout seul ? Votez tous en même temps. La minorité boit "+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Plutôt avoir un tapis volant, ou un frigo qui se remplit tout seul ? Votez tous en même temps. La minorité boit "+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Les couples trinquer ensemble "+ GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Les couples trinquer ensemble "+ GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Le/La plus radin(e) boit"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Le/La plus radin(e) boit"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Le mec qui a le plus gros ventre à bière boit"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Le mec qui a le plus gros ventre de bière boit"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Tous ceux qui se sont déjà fait exclure de cours boivent"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Tous ceux qui se sont déjà fait exclure de cours boivent"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Tous ceux qui ont des frères et soeurs boivent"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Tous ceux qui ont des frères et soeurs boivent"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Celles et ceux qui ont un Windows phone peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Celles et ceux qui ont un Windows phone peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
@@ -186,40 +189,40 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
phraseSansNom.add("Plutôt avoir du temps ou de l'argent ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Plutôt avoir du temps ou de l'argent ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Celles/Ceux qui ont fait des études de L boivent"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Celles/Ceux qui ont fait des études de L boivent"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Le premier joueur qui en embrasse un autre sur la bouche pourra distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Le premier joueur qui en embrasse un autre sur la bouche pourra distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Celles et ceux qui joue de la guitare peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Celles et ceux qui jouent de la guitare peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Celles et ceux qui joue du piano peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
phraseSansNom.add("Celles et ceux qui jouent du piano peuvent distribuer"+GorgeesaleatoireAmeliorer(1,4));
|
||||||
phraseSansNom.add("Les gens qui se sont masturbés aujourd'hui peuvent distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Les gens qui se sont masturbés aujourd'hui peuvent distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Celui ou celle a la meilleure place boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Celui ou celle à la meilleure place boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Celles et ceux qui n'ont jamais trompé leur partenaire (c'est bien) peuvent distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Celles et ceux qui n'ont jamais trompé leur partenaire (c'est bien) peuvent distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Celui/Celle avec les vêtements les plus moches boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Celui/Celle avec les vêtements les plus moches boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Celui/Celle qui a les cheveux les plus longs boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Celui/Celle qui a les cheveux les plus longs boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("On doit doser son Alcool les yeux fermés"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("On doit doser son Alcool les yeux fermés"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Plutôt série ou film ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Plutôt série ou film ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Elisez le plus débile d'entre vous, ce dernier boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Élisez le plus débile d'entre vous, ce dernier boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Le premier qui donne un film de - Christopher Nolan - pourra distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Le premier qui donne un film de - Christopher Nolan - pourra distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Le premier qui donne un film avec Christian Clavier pourra boire"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Le premier qui donne un film avec Christian Clavier pourra boire"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Les végans boivent "+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Les végans boivent "+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("La fille la plus maquillé boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("La fille la plus maquillée boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Celles/Ceux qui ont déjà appelé leur partenaire par le prénom de leurs ex boivent"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Celles/Ceux qui ont déjà appelé leur partenaire par le prénom de leurs ex boivent"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("La première personne qui désigne le plus jeune peut distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("La première personne qui désigne le plus jeune peut distribuer"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Plutôt avoir des connaissances illimitées ou dirigier le monde ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 4));
|
phraseSansNom.add("Plutôt avoir des connaissances illimitées ou diriger le monde ? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 4));
|
||||||
phraseSansNom.add("Plutôt n'avoir aucun ami ou ne plus pouvoir utiliser d'appareil électronique ? Votez tous en même temps. La minorité boit"+ GorgeesaleatoireAmeliorer(2, 5));
|
phraseSansNom.add("Plutôt n'avoir aucun ami ou ne plus pouvoir utiliser d'appareil électronique ? Votez tous en même temps. La minorité boit"+ GorgeesaleatoireAmeliorer(2, 5));
|
||||||
phraseSansNom.add("Plutot vaincre le patrikaka ou la polution dans le monde? Votez tous en meme temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 2));
|
phraseSansNom.add("Plutôt vaincre le patrikaka ou la pollution dans le monde? Votez tous en même temps. La minorité boit"+GorgeesaleatoireAmeliorer(1, 2));
|
||||||
phraseSansNom.add("Jeu du LUTIN : Jusqu'a la fin du jeu. Vous devez enlever le lutin de votre verre pour pouvoir boire et le remettre ensuite sinon vous devait reboire");
|
phraseSansNom.add("Jeu du LUTIN : Jusqu'à la fin du jeu. Vous devez enlever le lutin de votre verre pour pouvoir boire et le remettre ensuite sinon vous devez reboire");
|
||||||
phraseSansNom.add("Celles et ceux qui boivent de la Vodka peuvent distribuer "+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Celles et ceux qui boivent de la Vodka peuvent distribuer "+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Les joueurs qui ont un A dans leur prénom boivent "+GorgeesaleatoireAmeliorer(3,5));
|
phraseSansNom.add("Les joueurs qui ont un A dans leur prénom boivent "+GorgeesaleatoireAmeliorer(3,5));
|
||||||
phraseSansNom.add("Les joueurs qui ont un P dans le prénom distribue"+GorgeesaleatoireAmeliorer(1, 3));
|
phraseSansNom.add("Les joueurs qui ont un P dans le prénom distribuent"+GorgeesaleatoireAmeliorer(1, 3));
|
||||||
phraseSansNom.add("Le premier joueur à ramener un objet rouge (pas de vêtements) peut distribuer"+GorgeesaleatoireAmeliorer(3,5));
|
phraseSansNom.add("Le premier joueur à ramener un objet rouge (pas de vêtements) peut distribuer"+GorgeesaleatoireAmeliorer(3,5));
|
||||||
phraseSansNom.add("Le premier joueur qui dévoile un de ses secrets et que personne autour ne sait peut distribuer"+ GorgeesaleatoireAmeliorer(3, 6));
|
phraseSansNom.add("Le premier joueur qui dévoile un de ses secrets et que personne autour ne sait peut distribuer"+ GorgeesaleatoireAmeliorer(3, 6));
|
||||||
phraseSansNom.add("Chaque joueur doit lire à haute voix le dernier SMS qu'il a reçu. Si il/elle refuse, c'est"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Chaque joueur doit lire à haute voix le dernier SMS qu'il a reçu. Si il/elle refuse, c'est"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Le joueur avec le plus gros cul boit"+ GorgeesaleatoireAmeliorer(2, 6));
|
phraseSansNom.add("Le joueur avec le plus gros cul boit"+ GorgeesaleatoireAmeliorer(2, 6));
|
||||||
phraseSansNom.add("Celles/Ceux qui ont moins de 20ans boivent"+ GorgeesaleatoireAmeliorer(2, 7));
|
phraseSansNom.add("Celles/Ceux qui ont moins de 20ans boivent"+ GorgeesaleatoireAmeliorer(2, 7));
|
||||||
phraseSansNom.add("Celui ou celle avec le plus gros appetit sexuel boit"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Celui ou celle avec le plus gros appétit sexuel boit"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Ceux/Celles qui fumes boivent "+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Ceux/Celles qui fument boivent "+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Celles et ceux qui ont au moins un BAC +3 peuvent distribuer"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Celles et ceux qui ont au moins un BAC +3 peuvent distribuer"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Le premier joueur à se lever peut donner"+ GorgeesaleatoireAmeliorer(6, 7));
|
phraseSansNom.add("Le premier joueur à se lever peut donner"+ GorgeesaleatoireAmeliorer(6, 7));
|
||||||
phraseSansNom.add("Celles et ceux qui n'ont jamais fait de strip tease boivent"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Celles et ceux qui n'ont jamais fait de strip tease boivent"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Le premier joueur à enlever un vêtements pourra distribuer"+ GorgeesaleatoireAmeliorer(5, 7));
|
phraseSansNom.add("Le premier joueur à enlever un vêtement pourra distribuer"+ GorgeesaleatoireAmeliorer(5, 7));
|
||||||
phraseSansNom.add("Jeu des peaux ! Triez vous du joueur le plus bronzé au joueur le moins bronzé. Le plus bronzé prend 1 gorgée, le second 2 gorgées, etc.");
|
phraseSansNom.add("Jeu des peaux ! Triez vous du joueur le plus bronzé au joueur le moins bronzé. Le plus bronzé prend 1 gorgée, le second 2 gorgées, etc.");
|
||||||
phraseSansNom.add("Tous ceux qui ont déjà uriné dans une piscine boivent"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Tous ceux qui ont déjà uriné dans une piscine boivent"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
phraseSansNom.add("Celui/Celle avec le plus d'amis sur Facebook boit"+ GorgeesaleatoireAmeliorer(2, 4));
|
phraseSansNom.add("Celui/Celle avec le plus d'amis sur Facebook boit"+ GorgeesaleatoireAmeliorer(2, 4));
|
||||||
@@ -255,11 +258,10 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
public int Gorgeesaleatoire(int Min, int Max){
|
public int Gorgeesaleatoire(int Min, int Max){
|
||||||
int offset = ajoutGorgees;
|
int offset = ajoutGorgees;
|
||||||
int nbgorgées;
|
int nbgorgées;
|
||||||
Random rand = new Random();
|
|
||||||
if (Min == 1 && Max == 2){
|
if (Min == 1 && Max == 2){
|
||||||
nbgorgées = rand.nextInt(Max + Min);
|
nbgorgées = random.nextInt(Max + Min);
|
||||||
}else {
|
}else {
|
||||||
nbgorgées = Min+rand.nextInt(Max - Min);
|
nbgorgées = Min + random.nextInt(Max - Min);
|
||||||
}
|
}
|
||||||
if(nbgorgées == 0){
|
if(nbgorgées == 0){
|
||||||
nbgorgées = 1;
|
nbgorgées = 1;
|
||||||
@@ -267,40 +269,32 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
nbgorgées = nbgorgées + offset;
|
nbgorgées = nbgorgées + offset;
|
||||||
return nbgorgées;
|
return nbgorgées;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String GorgeesaleatoireAmeliorer(int Min, int Max){
|
public String GorgeesaleatoireAmeliorer(int Min, int Max){
|
||||||
int offset = ajoutGorgees;
|
int offset = ajoutGorgees;
|
||||||
int nbgorgées;
|
int nbgorgées;
|
||||||
Random rand = new Random();
|
|
||||||
if (Min == 1 && Max == 2){
|
if (Min == 1 && Max == 2){
|
||||||
nbgorgées = rand.nextInt(Max + Min);
|
nbgorgées = random.nextInt(Max + Min);
|
||||||
}else {
|
}else {
|
||||||
nbgorgées = Min+rand.nextInt(Max - Min);
|
nbgorgées = Min + random.nextInt(Max - Min);
|
||||||
}
|
}
|
||||||
if(nbgorgées == 0){
|
if(nbgorgées == 0){
|
||||||
nbgorgées = 1;
|
nbgorgées = 1;
|
||||||
}
|
}
|
||||||
nbgorgées = nbgorgées + offset;
|
nbgorgées = nbgorgées + offset;
|
||||||
String debut;
|
|
||||||
|
|
||||||
String nbgorgéesstr;
|
String nbgorgéesstr = " " + Integer.toString(nbgorgées) + " Gorgée(s)";
|
||||||
String nbgorgéesstr1;
|
|
||||||
debut = " ";
|
|
||||||
nbgorgéesstr1 = " Gorgée(s)";
|
|
||||||
nbgorgéesstr = debut + Integer.toString(nbgorgées) + nbgorgéesstr1;
|
|
||||||
return nbgorgéesstr;
|
return nbgorgéesstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String Nbaleatoirelist(List list){
|
public String Nbaleatoirelist(List list){
|
||||||
Random rand = new Random();
|
return (String) list.get(random.nextInt(list.size()));
|
||||||
String phrase = (String) list.get(rand.nextInt(list.size()));
|
|
||||||
return phrase;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Nbaleatoire(){
|
public int Nbaleatoire(){
|
||||||
int Max = 100;
|
int Max = 100;
|
||||||
int Min = 0;
|
int Min = 0;
|
||||||
Random rand = new Random();
|
return random.nextInt(Max - Min);
|
||||||
int nbaleatoire = rand.nextInt(Max - Min);
|
|
||||||
return nbaleatoire;
|
|
||||||
}
|
}
|
||||||
public boolean JoueurOuPas(){
|
public boolean JoueurOuPas(){
|
||||||
boolean TrueFalse;
|
boolean TrueFalse;
|
||||||
@@ -317,43 +311,17 @@ public class Jeuxold extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
public List TroisJoueurAleatoire(List toutlesjoueurs){
|
public List TroisJoueurAleatoire(List toutlesjoueurs){
|
||||||
List<String> listJoueur = new ArrayList<String>();
|
List<String> listJoueur = new ArrayList<String>();
|
||||||
while (true){
|
while (listJoueur.size() < 3){
|
||||||
Random rand = new Random();
|
String joueur = (String) toutlesjoueurs.get(random.nextInt(toutlesjoueurs.size()));
|
||||||
String joueur1 = (String) toutlesjoueurs.get(rand.nextInt(toutlesjoueurs.size()));
|
if (!listJoueur.contains(joueur)) {
|
||||||
String joueur2 = (String) toutlesjoueurs.get(rand.nextInt(toutlesjoueurs.size()));
|
listJoueur.add(joueur);
|
||||||
String joueur3 = (String) toutlesjoueurs.get(rand.nextInt(toutlesjoueurs.size()));
|
|
||||||
if(joueur1 == joueur2 ){
|
|
||||||
}else{
|
|
||||||
if (joueur1 == joueur3){
|
|
||||||
}else {
|
|
||||||
if (joueur2 == joueur3) {
|
|
||||||
}else{
|
|
||||||
listJoueur.add(joueur1);
|
|
||||||
listJoueur.add(joueur2);
|
|
||||||
listJoueur.add(joueur3);
|
|
||||||
return listJoueur;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return listJoueur;
|
||||||
|
}
|
||||||
|
|
||||||
public String ChoixJoueurAleatoire( List toutlesjoueurs){
|
public String ChoixJoueurAleatoire(List toutlesjoueurs){
|
||||||
//System.out.println(inttoutlesjoueurs);
|
return (String) toutlesjoueurs.get(random.nextInt(toutlesjoueurs.size()));
|
||||||
Random rand = new Random();
|
|
||||||
String joueur = (String) toutlesjoueurs.get(rand.nextInt(toutlesjoueurs.size()));
|
|
||||||
//System.out.println(joueur);
|
|
||||||
//int nbaleatoire = rand.nextInt(max -min + 1 ) + min;
|
|
||||||
//int nbaleatoire2 = nbaleatoire - 1;
|
|
||||||
//if(nbaleatoire2 == -1 ){
|
|
||||||
// nbaleatoire2 = 0;
|
|
||||||
//}
|
|
||||||
//System.out.println( "nb aleatoire " + nbaleatoire) ;
|
|
||||||
//joueur = (String) toutlesjoueurs.get(nbaleatoire2);
|
|
||||||
//System.out.println(joueur);
|
|
||||||
return joueur ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public void OnClickButton1(View v){
|
public void OnClickButton1(View v){
|
||||||
finish();
|
finish();
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
);
|
);
|
||||||
rowParams.setMargins(0, 8, 0, 8);
|
rowParams.setMargins(0, 0, 0, 12); // Marge identique aux champs statiques (12dp)
|
||||||
playerRow.setLayoutParams(rowParams);
|
playerRow.setLayoutParams(rowParams);
|
||||||
|
|
||||||
// Créer un nouveau TextInputLayout
|
// Créer un nouveau TextInputLayout
|
||||||
@@ -110,16 +110,28 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
);
|
);
|
||||||
textInputParams.setMargins(0, 0, 60, 0); // Laisser de la place pour le bouton supprimer
|
// Plus d'espace pour le bouton poubelle (68dp au lieu de 52dp)
|
||||||
|
textInputParams.setMargins(0, 0, 68, 0);
|
||||||
textInputLayout.setLayoutParams(textInputParams);
|
textInputLayout.setLayoutParams(textInputParams);
|
||||||
textInputLayout.setBoxBackgroundMode(com.google.android.material.textfield.TextInputLayout.BOX_BACKGROUND_OUTLINE);
|
textInputLayout.setBoxBackgroundMode(com.google.android.material.textfield.TextInputLayout.BOX_BACKGROUND_OUTLINE);
|
||||||
textInputLayout.setHint("Nom");
|
textInputLayout.setHint("Nom");
|
||||||
|
|
||||||
// Appliquer les couleurs du thème pour la cohérence
|
// Appliquer exactement les mêmes styles que le XML
|
||||||
int primaryColor = androidx.core.content.ContextCompat.getColor(this, R.color.primary);
|
// Créer un ColorStateList pour la bordure : grise par défaut, primaire quand focus
|
||||||
int hintColor = androidx.core.content.ContextCompat.getColor(this, R.color.text_hint);
|
int[][] states = new int[][] {
|
||||||
textInputLayout.setBoxStrokeColor(primaryColor);
|
new int[] { android.R.attr.state_focused},
|
||||||
|
new int[] {}
|
||||||
|
};
|
||||||
|
int[] colors = new int[] {
|
||||||
|
androidx.core.content.ContextCompat.getColor(this, R.color.primary),
|
||||||
|
androidx.core.content.ContextCompat.getColor(this, android.R.color.darker_gray) // Bordure grise par défaut
|
||||||
|
};
|
||||||
|
android.content.res.ColorStateList strokeColorStateList = new android.content.res.ColorStateList(states, colors);
|
||||||
|
textInputLayout.setBoxStrokeColorStateList(strokeColorStateList);
|
||||||
|
textInputLayout.setBoxStrokeWidth(2); // Largeur de bordure comme dans le XML
|
||||||
|
textInputLayout.setBoxBackgroundColor(androidx.core.content.ContextCompat.getColor(this, R.color.surface));
|
||||||
textInputLayout.setDefaultHintTextColor(androidx.core.content.ContextCompat.getColorStateList(this, R.color.text_hint));
|
textInputLayout.setDefaultHintTextColor(androidx.core.content.ContextCompat.getColorStateList(this, R.color.text_hint));
|
||||||
|
textInputLayout.setEndIconMode(com.google.android.material.textfield.TextInputLayout.END_ICON_CLEAR_TEXT);
|
||||||
|
|
||||||
// Créer un nouveau TextInputEditText
|
// Créer un nouveau TextInputEditText
|
||||||
TextInputEditText newEditText = new TextInputEditText(this);
|
TextInputEditText newEditText = new TextInputEditText(this);
|
||||||
@@ -147,19 +159,19 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
// Ajouter l'EditText au TextInputLayout
|
// Ajouter l'EditText au TextInputLayout
|
||||||
textInputLayout.addView(newEditText);
|
textInputLayout.addView(newEditText);
|
||||||
|
|
||||||
// Créer le bouton de suppression
|
// Créer le bouton de suppression - taille réduite
|
||||||
ImageButton deleteButton = new ImageButton(this);
|
ImageButton deleteButton = new ImageButton(this);
|
||||||
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(
|
int dp36 = (int) (36 * getResources().getDisplayMetrics().density);
|
||||||
(int) (48 * getResources().getDisplayMetrics().density),
|
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(dp36, dp36);
|
||||||
(int) (48 * getResources().getDisplayMetrics().density)
|
buttonParams.setMargins(0, 4, 10, 4); // Plus d'espace à droite (10dp au lieu de 6)
|
||||||
);
|
|
||||||
buttonParams.setMargins(0, 4, 8, 4);
|
|
||||||
buttonParams.gravity = android.view.Gravity.END | android.view.Gravity.CENTER_VERTICAL;
|
buttonParams.gravity = android.view.Gravity.END | android.view.Gravity.CENTER_VERTICAL;
|
||||||
deleteButton.setLayoutParams(buttonParams);
|
deleteButton.setLayoutParams(buttonParams);
|
||||||
deleteButton.setBackgroundResource(android.R.drawable.ic_menu_delete);
|
deleteButton.setImageResource(android.R.drawable.ic_menu_delete);
|
||||||
int errorColor = androidx.core.content.ContextCompat.getColor(this, R.color.error);
|
int errorColor = androidx.core.content.ContextCompat.getColor(this, R.color.error);
|
||||||
deleteButton.setColorFilter(errorColor);
|
deleteButton.setColorFilter(errorColor);
|
||||||
deleteButton.setScaleType(ImageButton.ScaleType.CENTER_INSIDE);
|
deleteButton.setScaleType(ImageButton.ScaleType.CENTER_INSIDE);
|
||||||
|
deleteButton.setBackgroundColor(android.graphics.Color.TRANSPARENT); // Fond transparent
|
||||||
|
deleteButton.setPadding(4, 4, 4, 4); // Padding interne réduit
|
||||||
deleteButton.setContentDescription("Supprimer ce joueur");
|
deleteButton.setContentDescription("Supprimer ce joueur");
|
||||||
|
|
||||||
// Configuration du bouton de suppression avec animation
|
// Configuration du bouton de suppression avec animation
|
||||||
@@ -271,7 +283,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
//Lancement de l'activité (Jeux_parametres)
|
//Lancement de l'activité (Jeux_parametres)
|
||||||
|
|
||||||
Intent intent = new Intent(this, JeuxParametres.class);
|
Intent intent = new Intent(this, JeuxParametres.class);
|
||||||
//Regarde si le pseudo est vide et envoie a l'activité jeux
|
//Regarde si le pseudo est vide et envoie à l'activité jeux
|
||||||
if (toutlesjoueurs.isEmpty()){
|
if (toutlesjoueurs.isEmpty()){
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
CharSequence text = "Merci de rentrer des joueurs";
|
CharSequence text = "Merci de rentrer des joueurs";
|
||||||
@@ -287,7 +299,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
CharSequence text = "La partie ne peux pas commencer avec moins de 3 joueurs";
|
CharSequence text = "La partie ne peut pas commencer avec moins de 3 joueurs";
|
||||||
int duration = Toast.LENGTH_SHORT;
|
int duration = Toast.LENGTH_SHORT;
|
||||||
Toast toast = Toast.makeText(context, text, duration);
|
Toast toast = Toast.makeText(context, text, duration);
|
||||||
toast.show();
|
toast.show();
|
||||||
|
|||||||
@@ -88,52 +88,52 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@id/questionIndicator">
|
app:layout_constraintTop_toBottomOf="@id/questionIndicator">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="536dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="24dp">
|
android:padding="24dp">
|
||||||
|
|
||||||
<!-- Manche Question Text (petit) -->
|
<!-- Manche Question Text (petit) -->
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/mancheQuestionText"
|
android:id="@+id/mancheCounter"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="24dp"
|
android:layout_marginTop="16dp"
|
||||||
android:gravity="center"
|
android:background="@drawable/bg_card"
|
||||||
android:text="Défi en cours"
|
android:paddingStart="16dp"
|
||||||
android:textColor="@color/text_secondary"
|
android:paddingTop="8dp"
|
||||||
android:textSize="14sp"
|
android:paddingEnd="16dp"
|
||||||
android:textStyle="italic"
|
android:paddingBottom="8dp"
|
||||||
android:visibility="gone" />
|
android:text="Manches: 5"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/mancheQuestionText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="24dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Défi en cours"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="italic"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<!-- Question Text -->
|
<!-- Question Text -->
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textView1"
|
android:id="@+id/textView1"
|
||||||
style="@style/BoideloQuestionText"
|
style="@style/BoideloQuestionText"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="Question"
|
android:text="Question"
|
||||||
android:textSize="26sp" />
|
android:textSize="26sp"/>
|
||||||
|
|
||||||
<!-- Manche Counter (if applicable) -->
|
<!-- Manche Counter (if applicable) -->
|
||||||
<TextView
|
|
||||||
android:id="@+id/mancheCounter"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:background="@drawable/bg_card"
|
|
||||||
android:paddingStart="16dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:paddingEnd="16dp"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
android:text="Manches: 5"
|
|
||||||
android:textColor="@color/primary"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -153,33 +153,34 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent">
|
app:layout_constraintStart_toStartOf="parent">
|
||||||
|
|
||||||
<!-- Skip Button -->
|
<!-- Skip Button -->
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/skipButton"
|
|
||||||
style="@style/BoideloButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="56dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:onClick="onSkipClick"
|
|
||||||
android:text="Passer"
|
|
||||||
android:textColor="@color/text_secondary"
|
|
||||||
app:backgroundTint="@color/surface_variant"
|
|
||||||
app:cornerRadius="28dp" />
|
|
||||||
|
|
||||||
<!-- Next Button -->
|
<!-- Next Button -->
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button"
|
android:id="@+id/skipButton"
|
||||||
style="@style/BoideloButton.Primary"
|
style="@style/BoideloButton"
|
||||||
android:layout_width="0dp"
|
android:layout_width="229dp"
|
||||||
android:layout_height="56dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:layout_weight="2"
|
android:layout_weight="1"
|
||||||
android:onClick="OnClickButton1"
|
android:onClick="onSkipClick"
|
||||||
android:text="Suivant"
|
android:text="Abandonner le défi"
|
||||||
android:textSize="18sp"
|
android:textSize="12sp"
|
||||||
app:cornerRadius="28dp"
|
android:textColor="@color/error"
|
||||||
app:icon="@android:drawable/ic_media_play"
|
app:backgroundTint="@color/surface_variant"
|
||||||
app:iconGravity="textEnd" />
|
app:cornerRadius="28dp"/>
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/button"
|
||||||
|
style="@style/BoideloButton.Primary"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:onClick="OnClickButton1"
|
||||||
|
android:text="Suivant"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:cornerRadius="28dp"
|
||||||
|
app:icon="@android:drawable/ic_media_play"
|
||||||
|
app:iconGravity="textEnd"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -11,16 +11,7 @@
|
|||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
android:theme="@style/ThemeOverlay.AppCompat.Dark"/>
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
android:background="@color/primary"
|
|
||||||
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
@@ -54,136 +45,183 @@
|
|||||||
app:cardElevation="4dp">
|
app:cardElevation="4dp">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:padding="16dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
style="@style/BoideloSubtitle"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="16dp"
|
android:orientation="vertical"
|
||||||
android:text="Paramètres de partie"
|
android:padding="16dp">
|
||||||
app:drawableStartCompat="@android:drawable/ic_menu_edit"
|
|
||||||
app:drawableTint="@color/primary" />
|
|
||||||
|
|
||||||
<!-- Number of Questions -->
|
<!-- Number of Questions -->
|
||||||
<LinearLayout
|
<TextView
|
||||||
android:layout_width="match_parent"
|
style="@style/BoideloSubtitle"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_marginBottom="20dp"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:layout_marginBottom="16dp"
|
||||||
|
android:text="Paramètres de partie"
|
||||||
|
app:drawableStartCompat="@android:drawable/ic_menu_edit"
|
||||||
|
app:drawableTint="@color/primary"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="20dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textView1"
|
android:id="@+id/textView1"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:text="Nombre de questions"
|
android:text="Nombre de questions"
|
||||||
android:textColor="@color/text_primary"
|
android:textColor="@color/text_primary"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/questionCountValue"
|
android:id="@+id/questionCountValue"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/bg_card"
|
android:background="@drawable/bg_card"
|
||||||
android:paddingStart="12dp"
|
android:paddingStart="12dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="12dp"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="4dp"
|
||||||
android:text="50"
|
android:text="50"
|
||||||
android:textColor="@color/primary"
|
android:textColor="@color/primary"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<SeekBar
|
<SeekBar
|
||||||
android:id="@+id/seekBar1"
|
android:id="@+id/seekBar1"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:progressTint="@color/accent"
|
android:progressTint="@color/accent"
|
||||||
android:thumbTint="@color/accent" />
|
android:thumbTint="@color/accent"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- Drink Addition -->
|
<!-- Drink Addition -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="20dp"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="20dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textView2"
|
android:id="@+id/textView2"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:text="Ajout de gorgées"
|
android:text="Ajout de gorgées"
|
||||||
android:textColor="@color/text_primary"
|
android:textColor="@color/text_primary"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/gorgeesValue"
|
android:id="@+id/gorgeesValue"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/bg_card"
|
android:background="@drawable/bg_card"
|
||||||
android:paddingStart="12dp"
|
android:paddingStart="12dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="12dp"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="4dp"
|
||||||
android:text="0"
|
android:text="0"
|
||||||
android:textColor="@color/accent"
|
android:textColor="@color/accent"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<SeekBar
|
<SeekBar
|
||||||
android:id="@+id/seekBar2"
|
android:id="@+id/seekBar2"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:progressTint="@color/accent"
|
android:progressTint="@color/accent"
|
||||||
android:thumbTint="@color/accent" />
|
android:thumbTint="@color/accent"/>
|
||||||
|
|
||||||
<!-- Palier Indicator -->
|
<!-- Palier Indicator -->
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="12dp"
|
|
||||||
app:cardBackgroundColor="@color/surface_variant"
|
|
||||||
app:cardCornerRadius="8dp"
|
|
||||||
app:cardElevation="0dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/textView5"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:layout_marginTop="12dp"
|
||||||
android:padding="12dp"
|
app:cardBackgroundColor="@color/surface_variant"
|
||||||
android:text="Palier : Grosse merde"
|
app:cardCornerRadius="8dp"
|
||||||
android:textColor="@color/text_secondary"
|
app:cardElevation="0dp">
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold" />
|
<TextView
|
||||||
|
android:id="@+id/textView5"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:text="Palier : Grosse merde"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- Duration of Challenges -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewDuration"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="Durée des défis"
|
||||||
|
android:textColor="@color/text_primary"
|
||||||
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/durationValue"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/bg_card"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:paddingBottom="4dp"
|
||||||
|
android:text="0"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/seekBarDuration"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:progressTint="@color/accent"
|
||||||
|
android:thumbTint="@color/accent"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|||||||
@@ -11,70 +11,63 @@
|
|||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
android:theme="@style/ThemeOverlay.AppCompat.Dark"/>
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
android:background="@color/primary"
|
|
||||||
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
|
|
||||||
|
<!-- Floating Action Button -->
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="16dp">
|
android:padding="16dp">
|
||||||
|
|
||||||
<!-- Title -->
|
<!-- Title -->
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/Titre"
|
android:id="@+id/Titre"
|
||||||
style="@style/BoideloTitle"
|
style="@style/BoideloTitle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:text="@string/bienvenue" />
|
android:text="@string/bienvenue"/>
|
||||||
|
|
||||||
<!-- Player Count Indicator -->
|
<!-- Player Count Indicator -->
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="16dp"
|
|
||||||
app:cardBackgroundColor="@color/primary_light"
|
|
||||||
app:cardCornerRadius="12dp"
|
|
||||||
app:cardElevation="2dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:layout_marginBottom="16dp"
|
||||||
android:orientation="horizontal"
|
app:cardBackgroundColor="@color/accent"
|
||||||
android:padding="12dp">
|
app:cardCornerRadius="12dp"
|
||||||
|
app:cardElevation="2dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="12dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="24dp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:src="@drawable/ic_player_three"
|
android:src="@drawable/ic_player_three"
|
||||||
app:tint="@color/white" />
|
app:tint="@color/white"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/playerCountText"
|
android:id="@+id/playerCountText"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Joueurs: 0 / min. 3"
|
android:text="Joueurs: 0 / min. 3"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -82,119 +75,120 @@
|
|||||||
|
|
||||||
<!-- Players Input Card -->
|
<!-- Players Input Card -->
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="16dp"
|
|
||||||
app:cardBackgroundColor="@color/white"
|
|
||||||
app:cardCornerRadius="16dp"
|
|
||||||
app:cardElevation="4dp"
|
|
||||||
app:strokeColor="@color/surface_variant"
|
|
||||||
app:strokeWidth="1dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_marginBottom="16dp"
|
||||||
android:padding="16dp">
|
app:cardBackgroundColor="@color/white"
|
||||||
|
app:cardCornerRadius="16dp"
|
||||||
|
app:cardElevation="4dp"
|
||||||
|
app:strokeColor="@color/surface_variant"
|
||||||
|
app:strokeWidth="1dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@color/background"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textView2"
|
android:id="@+id/textView2"
|
||||||
style="@style/BoideloCaption"
|
style="@style/BoideloCaption"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/laisse_vide_si_il_y_a_pas_assez_de_joueur" />
|
android:text="@string/laisse_vide_si_il_y_a_pas_assez_de_joueur"/>
|
||||||
|
|
||||||
<!-- Default Player Inputs -->
|
<!-- Default Player Inputs -->
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/textInputLayoutJ1"
|
android:id="@+id/textInputLayoutJ1"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="12dp"
|
|
||||||
android:hint="@string/nom"
|
|
||||||
app:boxBackgroundColor="@color/surface"
|
|
||||||
app:boxStrokeColor="@color/primary"
|
|
||||||
app:boxStrokeWidth="2dp"
|
|
||||||
app:endIconMode="clear_text"
|
|
||||||
app:errorEnabled="false"
|
|
||||||
app:hintTextColor="@color/text_hint"
|
|
||||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
|
||||||
android:id="@+id/J1"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textPersonName"
|
android:layout_marginBottom="12dp"
|
||||||
android:maxLines="1"
|
android:hint="@string/nom"
|
||||||
android:textSize="16sp" />
|
app:boxBackgroundColor="@color/surface"
|
||||||
|
app:boxStrokeColor="@color/primary"
|
||||||
|
app:boxStrokeWidth="2dp"
|
||||||
|
app:endIconMode="clear_text"
|
||||||
|
app:errorEnabled="false"
|
||||||
|
app:hintTextColor="@color/text_hint"
|
||||||
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/J1"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textPersonName"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/textInputLayoutJ2"
|
android:id="@+id/textInputLayoutJ2"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="12dp"
|
|
||||||
android:hint="@string/nom"
|
|
||||||
app:boxBackgroundColor="@color/surface"
|
|
||||||
app:boxStrokeColor="@color/primary"
|
|
||||||
app:boxStrokeWidth="2dp"
|
|
||||||
app:endIconMode="clear_text"
|
|
||||||
app:hintTextColor="@color/text_hint"
|
|
||||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
|
||||||
android:id="@+id/J2"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textPersonName"
|
android:layout_marginBottom="12dp"
|
||||||
android:maxLines="1"
|
android:hint="@string/nom"
|
||||||
android:textSize="16sp" />
|
app:boxBackgroundColor="@color/surface"
|
||||||
|
app:boxStrokeColor="@color/primary"
|
||||||
|
app:boxStrokeWidth="2dp"
|
||||||
|
app:endIconMode="clear_text"
|
||||||
|
app:hintTextColor="@color/text_hint"
|
||||||
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/J2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textPersonName"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/textInputLayoutJ3"
|
android:id="@+id/textInputLayoutJ3"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="12dp"
|
|
||||||
android:hint="@string/nom"
|
|
||||||
app:boxBackgroundColor="@color/surface"
|
|
||||||
app:boxStrokeColor="@color/primary"
|
|
||||||
app:boxStrokeWidth="2dp"
|
|
||||||
app:endIconMode="clear_text"
|
|
||||||
app:hintTextColor="@color/text_hint"
|
|
||||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
|
||||||
android:id="@+id/J3"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textPersonName"
|
android:layout_marginBottom="12dp"
|
||||||
android:maxLines="1"
|
android:hint="@string/nom"
|
||||||
android:textSize="16sp" />
|
app:boxBackgroundColor="@color/surface"
|
||||||
|
app:boxStrokeColor="@color/primary"
|
||||||
|
app:boxStrokeWidth="2dp"
|
||||||
|
app:endIconMode="clear_text"
|
||||||
|
app:hintTextColor="@color/text_hint"
|
||||||
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/J3"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textPersonName"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<!-- Dynamic Player Input Container -->
|
<!-- Dynamic Player Input Container -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/nameEntryLayout"
|
android:id="@+id/nameEntryLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical"/>
|
||||||
|
|
||||||
<!-- Add Player Button -->
|
<!-- Add Player Button -->
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/Validation"
|
android:id="@+id/Validation"
|
||||||
style="@style/BoideloButton.Secondary"
|
style="@style/BoideloButton.Secondary"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:onClick="onClickButton1"
|
android:onClick="onClickButton1"
|
||||||
android:text="@string/c_ok"
|
android:text="@string/c_ok"
|
||||||
app:icon="@android:drawable/ic_input_add"
|
app:icon="@android:drawable/ic_input_add"
|
||||||
app:iconGravity="textStart" />
|
app:iconGravity="textStart"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -202,25 +196,23 @@
|
|||||||
|
|
||||||
<!-- Bottom Spacer for FAB -->
|
<!-- Bottom Spacer for FAB -->
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="80dp" />
|
android:layout_height="80dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
<!-- Floating Action Button -->
|
|
||||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||||
android:id="@+id/Go"
|
android:id="@+id/Go"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="172dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:onClick="onClickButtonStart"
|
android:onClick="onClickButtonStart"
|
||||||
android:text="@string/go"
|
android:text="@string/go"
|
||||||
android:textColor="@color/text_primary"
|
android:textColor="@color/text_primary"
|
||||||
app:backgroundTint="@color/accent"
|
app:backgroundTint="@color/accent"
|
||||||
app:icon="@android:drawable/ic_media_play"
|
app:icon="@android:drawable/ic_media_play"
|
||||||
app:iconTint="@color/text_primary" />
|
app:iconTint="@color/text_primary"/>
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|||||||
@@ -3,20 +3,20 @@
|
|||||||
<string name="j10">J10</string>
|
<string name="j10">J10</string>
|
||||||
<string name="pseudo">Pseudo</string>
|
<string name="pseudo">Pseudo</string>
|
||||||
<string name="nom">Nom</string>
|
<string name="nom">Nom</string>
|
||||||
<string name="c_ki">c ki</string>
|
<string name="c_ki">C\'est qui</string>
|
||||||
<string name="komment_il_s_appel">komment il s\'appel</string>
|
<string name="komment_il_s_appel">comment il s\'appelle</string>
|
||||||
<string name="who">who</string>
|
<string name="who">who</string>
|
||||||
<string name="joueur">Joueur</string>
|
<string name="joueur">Joueur</string>
|
||||||
<string name="prenom">Prenom</string>
|
<string name="prenom">Prénom</string>
|
||||||
<string name="c_ok">Ajouter une nouvelle personne</string>
|
<string name="c_ok">Ajouter une nouvelle personne</string>
|
||||||
<string name="laisse_vide_si_il_y_a_pas_assez_de_joueur">Pour commencer le jeu, il suffit d\'abord de rentrer le noms des joueurs</string>
|
<string name="laisse_vide_si_il_y_a_pas_assez_de_joueur">Pour commencer le jeu, il suffit d\'abord de rentrer les noms des joueurs</string>
|
||||||
<string name="joueurTITRE">Joueur :</string>
|
<string name="joueurTITRE">Joueur :</string>
|
||||||
<string name="bienvenue">Bienvenue sur Boidelo </string>
|
<string name="bienvenue">Bienvenue sur Boidelo </string>
|
||||||
<string name="eclatax_4_gorg_es">Eclatax (+4 Gorgées)</string>
|
<string name="eclatax_4_gorg_es">Eclatax (+4 Gorgées)</string>
|
||||||
<string name="habitu_s_2_gorg_es">Habitués (+2 Gorgées)</string>
|
<string name="habitu_s_2_gorg_es">Habitués (+2 Gorgées)</string>
|
||||||
<string name="go">"Suivant !"</string>
|
<string name="go">"Suivant !"</string>
|
||||||
<string name="param_tres_du_jeu">Paramètres du jeu</string>
|
<string name="param_tres_du_jeu">Paramètres du jeu</string>
|
||||||
<string name="commencer_a_vous_mettre_une_mine">Commencer a vous mettre une mine !</string>
|
<string name="commencer_a_vous_mettre_une_mine">Commencer à vous mettre une mine !</string>
|
||||||
<string name="activer_les_questions_par_chatgpt">Activer les questions par ChatGPT</string>
|
<string name="activer_les_questions_par_chatgpt">Activer les questions par ChatGPT</string>
|
||||||
<string name="cl_api_openai">Clé API OpenAI</string>
|
<string name="cl_api_openai">Clé API OpenAI</string>
|
||||||
<string name="openai">OpenAI [En cours de développement]</string>
|
<string name="openai">OpenAI [En cours de développement]</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user