Équilibrage du hardMode
This commit is contained in:
@@ -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é
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
<TextView
|
||||
@@ -14,7 +14,7 @@
|
||||
android:textStyle="bold"
|
||||
android:textColor="#E94560"
|
||||
android:gravity="center"
|
||||
android:layout_marginBottom="64dp"/>
|
||||
android:layout_marginBottom="32dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -43,6 +43,17 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="En mode difficile, vous devez remplir des objectifs avant la fin d'un nombre indiqué de coups. \n\ \n\2 Objectifs réussis vous rapporte une Clé 🗝️. \n\4 Coups réussis vous rapporte une Clé 🗝️.\n\ \n\Cette clé vous permet de changer votre objectif si vous êtes bloqué. Attention, vous ne pouvez en porter qu'une seule à la fois !"
|
||||
android:textColor="#AAAACC"
|
||||
android:textSize="14sp"
|
||||
android:background="#16213E"
|
||||
android:padding="16dp"
|
||||
android:lineSpacingExtra="4dp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnBack"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
Reference in New Issue
Block a user