Maj du controleur

This commit is contained in:
Sehl Aylane
2026-03-20 10:26:06 +01:00
parent 2bceba152d
commit 0e708527d2
+71 -32
View File
@@ -3,6 +3,7 @@ package sae.chuzzle;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.RadioButton; import android.widget.RadioButton;
@@ -10,8 +11,6 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import java.util.List;
public class Controleur { public class Controleur {
private final Activity activite; private final Activity activite;
@@ -26,12 +25,12 @@ public class Controleur {
private final Spinner spinnerIndex; private final Spinner spinnerIndex;
private final Button btnJouer; private final Button btnJouer;
// Hard Mode // Hard Mode logic
private final boolean hardMode; private final boolean hardMode;
private GestionnaireObjectifs gestionnaireObjectifs;
// - private Objectif objectifActuel;
// CONSTRUCTEUR private TextView tvObjectif;
private TextView tvNbObjectifs;
public Controleur(Activity activite, EtatJeu etatJeu, VueGrille vueGrille, public Controleur(Activity activite, EtatJeu etatJeu, VueGrille vueGrille,
long graine, long graine,
@@ -52,14 +51,19 @@ public class Controleur {
this.btnJouer = btnJouer; this.btnJouer = btnJouer;
this.hardMode = hardMode; this.hardMode = hardMode;
if (hardMode) {
this.gestionnaireObjectifs = new GestionnaireObjectifs(graine);
this.tvObjectif = activite.findViewById(R.id.tvObjectif);
this.tvNbObjectifs = activite.findViewById(R.id.tvNbObjectifs);
if (tvObjectif != null) tvObjectif.setVisibility(View.VISIBLE);
if (tvNbObjectifs != null) tvNbObjectifs.setVisibility(View.VISIBLE);
}
initialiserSpinner(); initialiserSpinner();
rafraichirAffichage(); rafraichirAffichage();
} }
// -
// INITIALISATION
private void initialiserSpinner() { private void initialiserSpinner() {
String[] indices = {"0", "1", "2", "3", "4", "5"}; String[] indices = {"0", "1", "2", "3", "4", "5"};
ArrayAdapter<String> adaptateur = new ArrayAdapter<>( ArrayAdapter<String> adaptateur = new ArrayAdapter<>(
@@ -71,20 +75,54 @@ public class Controleur {
spinnerIndex.setAdapter(adaptateur); spinnerIndex.setAdapter(adaptateur);
} }
// - /**
// GESTION DU COUP * Initialise l'objectif au début de la partie ou lors de la restauration.
*/
public void initialiserObjectif(Bundle savedState) {
if (!hardMode) return;
gestionnaireObjectifs.restaurer(savedState);
objectifActuel = Objectif.restaurer(savedState);
if (objectifActuel == null) {
objectifActuel = gestionnaireObjectifs.genererObjectif();
}
rafraichirAffichage();
}
/**
* Gère la validation d'un coup réussi (mise à jour objectif, score, affichage).
* Centralise la logique pour être appelé par le bouton ET par le tactile.
*/
public void gererFinDeCoup() {
// --- Logique Hard Mode ---
if (hardMode && objectifActuel != null) {
// 1. Décrémenter les coups de l'objectif
objectifActuel.decrementerCoups();
// 2. Compter les séries de la couleur cible
int[] series = etatJeu.getSeriesParCouleurDernierCoup();
objectifActuel.ajouterSeries(series[objectifActuel.getCouleur()]);
// 3. Vérifier réussite ou échec
if (objectifActuel.estReussi()) {
Toast.makeText(activite, "Objectif réussi !", Toast.LENGTH_SHORT).show();
gestionnaireObjectifs.incrementerReussites();
objectifActuel = gestionnaireObjectifs.genererObjectif();
} else if (objectifActuel.estEchoue()) {
Toast.makeText(activite, "Objectif échoué ! Fin de partie.", Toast.LENGTH_LONG).show();
etatJeu.forcerFinDePartie();
}
}
rafraichirAffichage();
verifierFinDePartie();
}
public void gererCoupJoueur() { public void gererCoupJoueur() {
boolean estLigne = rbLigne.isChecked(); boolean estLigne = rbLigne.isChecked();
int index = spinnerIndex.getSelectedItemPosition(); int index = spinnerIndex.getSelectedItemPosition();
int sens = rbDroite.isChecked() ? 1 : -1;
int sens;
if (rbDroite.isChecked()) {
sens = +1;
} else {
sens = -1;
}
boolean accepte = etatJeu.appliquerCoup(estLigne, index, sens); boolean accepte = etatJeu.appliquerCoup(estLigne, index, sens);
@@ -93,41 +131,42 @@ public class Controleur {
return; return;
} }
Toast.makeText(activite, "Coup valide !", Toast.LENGTH_SHORT).show(); gererFinDeCoup();
rafraichirAffichage();
verifierFinDePartie();
} }
// -
// FIN DE PARTIE
public void verifierFinDePartie() { public void verifierFinDePartie() {
if (etatJeu.estTerminee()) { if (etatJeu.estTerminee()) {
Intent intent = new Intent(activite, FinPartieActivity.class); Intent intent = new Intent(activite, FinPartieActivity.class);
intent.putExtra("score", etatJeu.obtenirScore()); intent.putExtra("score", etatJeu.obtenirScore());
intent.putExtra("nbCoups", etatJeu.obtenirNbCoups()); intent.putExtra("nbCoups", etatJeu.obtenirNbCoups());
intent.putExtra("graine", graine); intent.putExtra("graine", graine);
intent.putExtra("objectifsReussis", hardMode ? gestionnaireObjectifs.getNbObjectifsRealises() : 0);
activite.startActivity(intent); activite.startActivity(intent);
} }
} }
// -
// MISE A JOUR DE LA VUE
public void rafraichirAffichage() { public void rafraichirAffichage() {
tvScore.setText("Score : " + etatJeu.obtenirScore()); tvScore.setText("Score : " + etatJeu.obtenirScore());
tvCoups.setText("Coups : " + etatJeu.obtenirNbCoups()); tvCoups.setText("Coups : " + etatJeu.obtenirNbCoups());
vueGrille.definirGrille(etatJeu.obtenirGrille()); vueGrille.definirGrille(etatJeu.obtenirGrille());
vueGrille.definirVerrous(etatJeu.obtenirVerrous()); 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 (etatJeu.estTerminee()) { if (etatJeu.estTerminee()) {
btnJouer.setEnabled(false); btnJouer.setEnabled(false);
} }
} }
public void sauvegarderEtat(Bundle out) { public void sauvegarderEtat(Bundle out) {
// Nettoyé de la logique d'objectifs if (hardMode) {
gestionnaireObjectifs.sauvegarder(out);
if (objectifActuel != null) {
objectifActuel.sauvegarder(out);
}
}
} }
} }