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.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioButton;
@@ -10,8 +11,6 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class Controleur {
private final Activity activite;
@@ -26,12 +25,12 @@ public class Controleur {
private final Spinner spinnerIndex;
private final Button btnJouer;
// Hard Mode
// Hard Mode logic
private final boolean hardMode;
// -
// CONSTRUCTEUR
private GestionnaireObjectifs gestionnaireObjectifs;
private Objectif objectifActuel;
private TextView tvObjectif;
private TextView tvNbObjectifs;
public Controleur(Activity activite, EtatJeu etatJeu, VueGrille vueGrille,
long graine,
@@ -52,14 +51,19 @@ public class Controleur {
this.btnJouer = btnJouer;
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();
rafraichirAffichage();
}
// -
// INITIALISATION
private void initialiserSpinner() {
String[] indices = {"0", "1", "2", "3", "4", "5"};
ArrayAdapter<String> adaptateur = new ArrayAdapter<>(
@@ -71,20 +75,54 @@ public class Controleur {
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() {
boolean estLigne = rbLigne.isChecked();
int index = spinnerIndex.getSelectedItemPosition();
int sens;
if (rbDroite.isChecked()) {
sens = +1;
} else {
sens = -1;
}
int sens = rbDroite.isChecked() ? 1 : -1;
boolean accepte = etatJeu.appliquerCoup(estLigne, index, sens);
@@ -93,41 +131,42 @@ public class Controleur {
return;
}
Toast.makeText(activite, "Coup valide !", Toast.LENGTH_SHORT).show();
rafraichirAffichage();
verifierFinDePartie();
gererFinDeCoup();
}
// -
// FIN DE PARTIE
public void verifierFinDePartie() {
if (etatJeu.estTerminee()) {
Intent intent = new Intent(activite, FinPartieActivity.class);
intent.putExtra("score", etatJeu.obtenirScore());
intent.putExtra("nbCoups", etatJeu.obtenirNbCoups());
intent.putExtra("graine", graine);
intent.putExtra("objectifsReussis", hardMode ? gestionnaireObjectifs.getNbObjectifsRealises() : 0);
activite.startActivity(intent);
}
}
// -
// MISE A JOUR DE LA VUE
public void rafraichirAffichage() {
tvScore.setText("Score : " + etatJeu.obtenirScore());
tvCoups.setText("Coups : " + etatJeu.obtenirNbCoups());
vueGrille.definirGrille(etatJeu.obtenirGrille());
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()) {
btnJouer.setEnabled(false);
}
}
public void sauvegarderEtat(Bundle out) {
// Nettoyé de la logique d'objectifs
if (hardMode) {
gestionnaireObjectifs.sauvegarder(out);
if (objectifActuel != null) {
objectifActuel.sauvegarder(out);
}
}
}
}