Maj du controleur
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user