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