diff --git a/.gradle/8.9/checksums/checksums.lock b/.gradle/8.9/checksums/checksums.lock
deleted file mode 100644
index a54b5d1..0000000
Binary files a/.gradle/8.9/checksums/checksums.lock and /dev/null differ
diff --git a/.gradle/8.9/dependencies-accessors/gc.properties b/.gradle/8.9/dependencies-accessors/gc.properties
deleted file mode 100644
index e69de29..0000000
diff --git a/.gradle/8.9/fileChanges/last-build.bin b/.gradle/8.9/fileChanges/last-build.bin
deleted file mode 100644
index f76dd23..0000000
Binary files a/.gradle/8.9/fileChanges/last-build.bin and /dev/null differ
diff --git a/.gradle/8.9/fileHashes/fileHashes.lock b/.gradle/8.9/fileHashes/fileHashes.lock
deleted file mode 100644
index 79732b4..0000000
Binary files a/.gradle/8.9/fileHashes/fileHashes.lock and /dev/null differ
diff --git a/.gradle/8.9/gc.properties b/.gradle/8.9/gc.properties
deleted file mode 100644
index e69de29..0000000
diff --git a/.gradle/9.2.0/checksums/checksums.lock b/.gradle/9.2.0/checksums/checksums.lock
deleted file mode 100644
index d1dd12c..0000000
Binary files a/.gradle/9.2.0/checksums/checksums.lock and /dev/null differ
diff --git a/.gradle/9.2.0/fileChanges/last-build.bin b/.gradle/9.2.0/fileChanges/last-build.bin
deleted file mode 100644
index f76dd23..0000000
Binary files a/.gradle/9.2.0/fileChanges/last-build.bin and /dev/null differ
diff --git a/.gradle/9.2.0/fileHashes/fileHashes.bin b/.gradle/9.2.0/fileHashes/fileHashes.bin
deleted file mode 100644
index 00361ba..0000000
Binary files a/.gradle/9.2.0/fileHashes/fileHashes.bin and /dev/null differ
diff --git a/.gradle/9.2.0/fileHashes/fileHashes.lock b/.gradle/9.2.0/fileHashes/fileHashes.lock
deleted file mode 100644
index 65cd3fc..0000000
Binary files a/.gradle/9.2.0/fileHashes/fileHashes.lock and /dev/null differ
diff --git a/.gradle/9.2.0/gc.properties b/.gradle/9.2.0/gc.properties
deleted file mode 100644
index e69de29..0000000
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
deleted file mode 100644
index eecbfad..0000000
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and /dev/null differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
deleted file mode 100644
index 80b5bf2..0000000
--- a/.gradle/buildOutputCleanup/cache.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sun Mar 29 14:38:47 CEST 2026
-gradle.version=9.2.0
diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/sae/chuzzle/Controleur.java b/src/main/java/sae/chuzzle/Controleur.java
index ae9d8f7..74d2d82 100644
--- a/src/main/java/sae/chuzzle/Controleur.java
+++ b/src/main/java/sae/chuzzle/Controleur.java
@@ -1,7 +1,6 @@
package sae.chuzzle;
import android.app.Activity;
-import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -54,7 +53,7 @@ public class Controleur {
if (tvNbObjectifs != null) tvNbObjectifs.setVisibility(View.VISIBLE);
if (layoutCles != null) layoutCles.setVisibility(View.VISIBLE);
- // Listener du bouton de réinitialisation
+
if (btnReinitialisationObjectif != null) {
btnReinitialisationObjectif.setOnClickListener(v -> reinitialiserObjectif());
}
@@ -106,7 +105,7 @@ public class Controleur {
gestionnaireObjectifs.incrementerReussites();
objectifActuel = gestionnaireObjectifs.genererObjectif();
} else if (objectifActuel.estEchoue()) {
- // Plus de coups disponibles et objectif non réussi → fin de partie immédiate
+ // Plus de coups disponibles et objectif non réussi -> fin de partie immédiate
Toast.makeText(activite, "Objectif échoué !",
Toast.LENGTH_SHORT
).show();
@@ -140,14 +139,28 @@ public class Controleur {
* Lancer l'écran de fin.
*/
public void verifierFinDePartie() {
+ int nbARetenir;
+ if (hardMode) {
+ nbARetenir = gestionnaireObjectifs.getNbObjectifsRealises();
+ } else {
+ nbARetenir = 0;
+ }
+
+ String description;
+ if (hardMode == true && objectifActuel != null) {
+ description = objectifActuel.getDescription();
+ } else {
+ description = null;
+ }
+
if (etatJeu.estTerminee()) {
FinPartieActivity.demarrer(
activite,
etatJeu.obtenirScore(),
etatJeu.obtenirNbCoups(),
graine,
- hardMode ? gestionnaireObjectifs.getNbObjectifsRealises() : 0,
- (hardMode && objectifActuel != null) ? objectifActuel.getDescription() : null,
+ nbARetenir,
+ description,
etatJeu.obtenirGrille(),
etatJeu.obtenirVerrous()
);
@@ -161,12 +174,16 @@ public class Controleur {
vueGrille.definirVerrous(etatJeu.obtenirVerrous());
if (hardMode && objectifActuel != null) {
- if (tvObjectif != null) tvObjectif.setText(objectifActuel.getDescription());
- if (tvNbObjectifs != null) tvNbObjectifs.setText("Objectifs réussis : " + gestionnaireObjectifs.getNbObjectifsRealises());
+ if (tvObjectif != null){
+ tvObjectif.setText(objectifActuel.getDescription());
+ }
+ if (tvNbObjectifs != null){
+ tvNbObjectifs.setText("Objectifs réussis : " + gestionnaireObjectifs.getNbObjectifsRealises());
+ }
int nbCles = gestionnaireObjectifs.getNbCles();
if (tvCles != null) {
- tvCles.setText("🗝️ Clés : " + nbCles);
+ tvCles.setText("🗝️ Clés : " + nbCles + " (Max 1)");
}
if (btnReinitialisationObjectif != null) {
// Grisé si 0 clé
diff --git a/src/main/java/sae/chuzzle/FinPartieActivity.java b/src/main/java/sae/chuzzle/FinPartieActivity.java
index b7d66dd..3eebda7 100644
--- a/src/main/java/sae/chuzzle/FinPartieActivity.java
+++ b/src/main/java/sae/chuzzle/FinPartieActivity.java
@@ -8,6 +8,9 @@ import android.widget.TextView;
public class FinPartieActivity extends Activity {
+ private FinPartieControleur controleur;
+ private Button btnMenu;
+
/**
* Méthode statique pour démarrer l'activité avec toutes les données nécessaires.
*/
@@ -97,18 +100,18 @@ public class FinPartieActivity extends Activity {
vueGrilleFinale.definirVerrous(verrous);
}
- // Bouton retour au menu
- Button btnMenu = findViewById(R.id.btnFinMenu);
- btnMenu.setOnClickListener(v -> {
- Intent intent = new Intent(this, MenuActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- finish();
- });
+
+ controleur = new FinPartieControleur(this);
+ btnMenu = findViewById(R.id.btnFinMenu);
+ btnMenu.setOnClickListener(controleur);
}
@Override
public void onBackPressed() {
+ retourMenu();
+ }
+
+ public void retourMenu() {
Intent intent = new Intent(this, MenuActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
diff --git a/src/main/java/sae/chuzzle/FinPartieControleur.java b/src/main/java/sae/chuzzle/FinPartieControleur.java
new file mode 100644
index 0000000..0ee10fe
--- /dev/null
+++ b/src/main/java/sae/chuzzle/FinPartieControleur.java
@@ -0,0 +1,25 @@
+package sae.chuzzle;
+
+import android.app.Activity;
+import android.view.View;
+
+/**
+ * Contrôleur pour l'écran de fin de partie.
+ * Gère les interactions utilisateur
+ */
+public class FinPartieControleur implements View.OnClickListener {
+
+ private final Activity activity;
+
+ public FinPartieControleur(Activity activity) {
+ this.activity = activity;
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ if (v.getId() == R.id.btnFinMenu) {
+ ((FinPartieActivity) activity).retourMenu();
+ }
+ }
+}
diff --git a/src/main/java/sae/chuzzle/GestionnaireObjectifs.java b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java
index 73b4820..9f24c52 100644
--- a/src/main/java/sae/chuzzle/GestionnaireObjectifs.java
+++ b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java
@@ -11,6 +11,7 @@ import java.util.Random;
public class GestionnaireObjectifs {
private final Random random;
private int nbObjectifsRealises = 0;
+ private int nbCles = 0;
public GestionnaireObjectifs(long graine) {
@@ -54,8 +55,31 @@ public class GestionnaireObjectifs {
}
public void incrementerReussites() {
-
nbObjectifsRealises++;
+ // 1 clé gagnée tous les 2 objectifs réussis, maximum 1 clés en stock
+ if (nbObjectifsRealises % 2 == 0) {
+ ajouterCle();
+ }
+ }
+
+ public int getNbCles() {
+ return nbCles;
+ }
+
+ public void ajouterCle() {
+ // Ajoute une clé maximum 1 en stock
+ nbCles = Math.min(nbCles + 1, 1);
+ }
+
+ /**
+ * Consomme 1 clé pour réinitialiser l'objectif.
+ */
+ public boolean consommerCles() {
+ if (nbCles >= 1) {
+ nbCles -= 1;
+ return true;
+ }
+ return false;
}
public int getNbObjectifsRealises() {
@@ -65,11 +89,13 @@ public class GestionnaireObjectifs {
public void sauvegarder(Bundle out) {
out.putInt("nb_objectifs_total", nbObjectifsRealises);
+ out.putInt("nb_cles", nbCles);
}
public void restaurer(Bundle in) {
if (in != null) {
nbObjectifsRealises = in.getInt("nb_objectifs_total", 0);
+ nbCles = in.getInt("nb_cles", 0);
}
}
}
diff --git a/src/main/java/sae/chuzzle/Objectif.java b/src/main/java/sae/chuzzle/Objectif.java
index 8f6fef2..5de6d1c 100644
--- a/src/main/java/sae/chuzzle/Objectif.java
+++ b/src/main/java/sae/chuzzle/Objectif.java
@@ -8,7 +8,7 @@ import android.os.Bundle;
public class Objectif {
private final int couleur; // Index de la couleur cible (0-6)
private final int nbSeriesCible; // Nombre de séries à réaliser
- private final int nbCoupsMax; // Limite de coups initiale
+ private final int nbCoupsMax; // Limite de coups à faire
private final int poids; // Probabilité d'apparition (poids pour le tirage)
private int seriesRealisees = 0;
diff --git a/src/main/res/layout/activity_main.xml b/src/main/res/layout/activity_main.xml
index 514fe10..efcd1e2 100644
--- a/src/main/res/layout/activity_main.xml
+++ b/src/main/res/layout/activity_main.xml
@@ -60,7 +60,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="🗝️ Clés : 0"
+ android:text="🗝️ Clés : 0 (Max 1)"
android:textColor="#E2C94E"
android:textSize="14sp"/>
diff --git a/src/main/res/layout/activity_options.xml b/src/main/res/layout/activity_options.xml
index 13c3aae..a665057 100644
--- a/src/main/res/layout/activity_options.xml
+++ b/src/main/res/layout/activity_options.xml
@@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:padding="48dp"
+ android:padding="32dp"
android:background="#1A1A2E">
+ android:layout_marginBottom="32dp"/>
+
+