From 2bceba152d317b8e40debd49ea4feb69f3bd2efb Mon Sep 17 00:00:00 2001 From: Sehl Aylane Date: Fri, 20 Mar 2026 10:25:19 +0100 Subject: [PATCH] ajout de la gestion des objectifs --- .../sae/chuzzle/GestionnaireObjectifs.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/main/java/sae/chuzzle/GestionnaireObjectifs.java diff --git a/src/main/java/sae/chuzzle/GestionnaireObjectifs.java b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java new file mode 100644 index 0000000..b850795 --- /dev/null +++ b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java @@ -0,0 +1,77 @@ +package sae.chuzzle; + +import android.os.Bundle; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * Gère la génération aléatoire et le comptage des objectifs. + */ +public class GestionnaireObjectifs { + private final Random random; + private int nbObjectifsRealises = 0; + + public GestionnaireObjectifs(long graine) { + this.random = new Random(graine); + } + + /** + * Génère un nouvel objectif en respectant les probabilités de difficulté. + */ + public Objectif genererObjectif() { + List pool = new ArrayList<>(); + int totalPoids = 0; + + // M (nbCoupsMax) entre 2 et 5. + // N (nbSeriesCible) tel que M - N >= 1, donc N <= M - 1. + for (int m = 2; m <= 5; m++) { + for (int n = 1; n <= m - 1; n++) { + // Probabilité inversement proportionnelle à la facilité (M-N). + // Plus (M-N) est petit, plus c'est dur. + // Exemple : M=5, N=4 -> diff=1 (Dur). M=5, N=1 -> diff=4 (Facile). + int diff = m - n; + int poids = diff * diff; // On utilise le carré pour accentuer la différence de probabilité + + for (int color = 0; color < 7; color++) { + pool.add(new Objectif(color, n, m, poids)); + totalPoids += poids; + } + } + } + + int tirage = random.nextInt(totalPoids); + int cumul = 0; + for (Objectif obj : pool) { + cumul += obj.getPoids(); + if (tirage < cumul) { + return new Objectif(obj.getCouleur(), obj.getNbSeriesCible(), obj.getNbCoupsMax(), obj.getPoids()); + } + } + return pool.get(0); + } + + public void incrementerReussites() { + + nbObjectifsRealises++; + } + + public int getNbObjectifsRealises() { + + return nbObjectifsRealises; + } + + public void sauvegarder(Bundle out) { + out.putInt("nb_objectifs_total", nbObjectifsRealises); + } + + public void restaurer(Bundle in) { + if (in != null) { + nbObjectifsRealises = in.getInt("nb_objectifs_total", 0); + } + } +} + +/** + * Note: La classe Objectif a été mise à jour pour inclure getNbSeriesCible et getNbCoupsMax. + */