From f6a11af157bed3dd63bf0d481641897c66c71a60 Mon Sep 17 00:00:00 2001 From: val Date: Sat, 28 Mar 2026 16:01:01 +0100 Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20plat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/sae/chuzzle/Controleur.java | 9 +++++-- src/main/java/sae/chuzzle/EtatJeu.java | 24 ++++++++----------- .../sae/chuzzle/GestionnaireObjectifs.java | 1 + src/main/java/sae/chuzzle/Objectif.java | 16 ++++++++++--- src/main/java/sae/chuzzle/SeedActivity.java | 4 +--- src/main/java/sae/chuzzle/VueGrille.java | 13 ++++------ 6 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/main/java/sae/chuzzle/Controleur.java b/src/main/java/sae/chuzzle/Controleur.java index 058db53..8715204 100644 --- a/src/main/java/sae/chuzzle/Controleur.java +++ b/src/main/java/sae/chuzzle/Controleur.java @@ -73,7 +73,7 @@ public class Controleur { * Centralise la logique pour être appelé par le bouton ET par le tactile. */ public void gererFinDeCoup() { - // --- Logique Hard Mode --- + // --- Logique Hard Mode if (hardMode && objectifActuel != null) { // 1. Décrémenter les coups de l'objectif objectifActuel.decrementerCoups(); @@ -84,12 +84,17 @@ public class Controleur { // 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()) { // Plus de coups disponibles et objectif non réussi → fin de partie immédiate + Toast.makeText(activite, "Objectif échoué !", + Toast.LENGTH_SHORT + ).show(); + etatJeu.forcerFinDePartie(); + } } diff --git a/src/main/java/sae/chuzzle/EtatJeu.java b/src/main/java/sae/chuzzle/EtatJeu.java index 52cfcda..2f52c75 100644 --- a/src/main/java/sae/chuzzle/EtatJeu.java +++ b/src/main/java/sae/chuzzle/EtatJeu.java @@ -21,10 +21,6 @@ public class EtatJeu { private final int[] seriesParCouleurDernierCoup = new int[Plateau.NB_TYPES]; - public EtatJeu() { - this(System.currentTimeMillis(), false); - } - public EtatJeu(long graine, boolean hardMode) { this.aleatoire = new Random(graine); this.hardMode = hardMode; @@ -120,14 +116,14 @@ public class EtatJeu { return (int) (baseTotal * (1.0 + (nbSeriesTotal - 1) * 0.5)); } - // --- Aide à la résolution --- + // --- Aide à la résolution /** * Parcourt les séries détectées, calcule les points de base et compte le nombre * de séries. * Vérifie la couleur des cellules pour délimiter correctement les séries. * - * @return int[2] : [0] = points de base, [1] = nombre de séries + * int[2] : [0] = points de base, [1] = nombre de séries */ private int[] traiterSeries(List series) { boolean[][] masque = creerMasque(series); @@ -249,10 +245,10 @@ public class EtatJeu { boolean[] v = new boolean[36]; int[][] grid = plateau.getGrille(); boolean[][] lk = plateau.getVerrous(); - for (int i = 0; i < 6; i++) { - for (int j = 0; j < 6; j++) { - g[i * 6 + j] = grid[i][j]; - v[i * 6 + j] = lk[i][j]; + for (int i = 0; i < Plateau.NB_LIGNES; i++) { + for (int j = 0; j < Plateau.NB_COLONNES; j++) { + g[i * Plateau.NB_LIGNES + j] = grid[i][j]; + v[i * Plateau.NB_LIGNES + j] = lk[i][j]; } } b.putIntArray("grille", g); @@ -270,10 +266,10 @@ public class EtatJeu { boolean[] v = b.getBooleanArray("verrous"); int[][] grid = plateau.getGrille(); boolean[][] lk = plateau.getVerrous(); - for (int i = 0; i < 6; i++) { - for (int j = 0; j < 6; j++) { - grid[i][j] = g[i * 6 + j]; - lk[i][j] = v[i * 6 + j]; + for (int i = 0; i < Plateau.NB_LIGNES; i++) { + for (int j = 0; j < Plateau.NB_COLONNES; j++) { + grid[i][j] = g[i * Plateau.NB_LIGNES + j]; + lk[i][j] = v[i * Plateau.NB_LIGNES + j]; } } score = b.getInt("score"); diff --git a/src/main/java/sae/chuzzle/GestionnaireObjectifs.java b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java index 32ffcda..73b4820 100644 --- a/src/main/java/sae/chuzzle/GestionnaireObjectifs.java +++ b/src/main/java/sae/chuzzle/GestionnaireObjectifs.java @@ -13,6 +13,7 @@ public class GestionnaireObjectifs { private int nbObjectifsRealises = 0; public GestionnaireObjectifs(long graine) { + this.random = new Random(graine); } diff --git a/src/main/java/sae/chuzzle/Objectif.java b/src/main/java/sae/chuzzle/Objectif.java index bebfab7..8f6fef2 100644 --- a/src/main/java/sae/chuzzle/Objectif.java +++ b/src/main/java/sae/chuzzle/Objectif.java @@ -23,14 +23,24 @@ public class Objectif { } // Getters - public int getCouleur() { return couleur; } - public int getNbSeriesCible() { return nbSeriesCible; } - public int getNbCoupsMax() { return nbCoupsMax; } + public int getCouleur() { + return couleur; + } + public int getNbSeriesCible() { + + return nbSeriesCible; + } + public int getNbCoupsMax() { + return nbCoupsMax; + } + public int getCoupsRestants() { return coupsRestants; + } public int getPoids() { return poids; + } public void decrementerCoups() { diff --git a/src/main/java/sae/chuzzle/SeedActivity.java b/src/main/java/sae/chuzzle/SeedActivity.java index 50c1639..fd82310 100644 --- a/src/main/java/sae/chuzzle/SeedActivity.java +++ b/src/main/java/sae/chuzzle/SeedActivity.java @@ -44,9 +44,7 @@ public class SeedActivity extends Activity implements View.OnClickListener { String texte = etGraine.getText().toString().trim(); if (texte.isEmpty()) { - Toast.makeText( - this, - "Veuillez entrer une graine.", + Toast.makeText(this, "Veuillez entrer une graine.", Toast.LENGTH_SHORT ).show(); return; diff --git a/src/main/java/sae/chuzzle/VueGrille.java b/src/main/java/sae/chuzzle/VueGrille.java index 0be7504..20f2450 100644 --- a/src/main/java/sae/chuzzle/VueGrille.java +++ b/src/main/java/sae/chuzzle/VueGrille.java @@ -1,5 +1,5 @@ -package sae.chuzzle; - +package sae.chuzzle; // séparer le dessin de la grille et des éléments + // et vérifie les math à la fin beleck c chelou import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -22,17 +22,11 @@ public class VueGrille extends View { /** Symboles pour le mode daltonien, un par type. */ private static final String[] SYMBOLES = {"●", "■", "▲", "✚", "★", "♦", "✿"}; - - // Données métier - private int[][] grille = new int[NB_LIGNES][NB_COLONNES]; private boolean[][] verrous = new boolean[NB_LIGNES][NB_COLONNES]; - - // État du glissement - private Boolean animEstLigne = null; private int animIndex = 0; private float animDecalagePx = 0f; @@ -199,7 +193,7 @@ public class VueGrille extends View { // Dessin case principale dessinerRectCase(canvas, type, ligne, colonne, x1, y1, x2, y2); - // --- Wrap-around (réapparition de l'autre côté) --- + // --- (réapparition de l'autre côté) if (offsetX != 0f) { float bordD = margeGauche + largeurGrille; float bordG = margeGauche; @@ -249,6 +243,7 @@ public class VueGrille extends View { // Adapté au daltonien canvas.drawText(SYMBOLES[type % NB_TYPES], cx, cy, pinceauSymbole); + // Dessin de l'image de la chaine si verrouillée if (verrous[ligne][colonne] && imageChaine != null) { float size = (x2 - x1);