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"/> + +