Correction du scoring (fichier à push : EtatJeu)

This commit is contained in:
sehl
2026-03-27 19:30:06 +01:00
parent 2e628185e4
commit ed520566a8
3 changed files with 25 additions and 53 deletions
+24 -47
View File
@@ -5,7 +5,8 @@ import java.util.List;
import java.util.Random;
/**
* Gère la session de jeu (score, coups, état de la partie) et délègue la manipulation
* Gère la session de jeu (score, coups, état de la partie) et délègue la
* manipulation
* physique de la grille à la classe Plateau.
*/
public class EtatJeu {
@@ -102,8 +103,9 @@ public class EtatJeu {
List<int[]> series = plateau.trouverSeries();
while (!series.isEmpty()) {
baseTotal += calculerPointsBase(series);
nbSeriesTotal += compterEtEnregistrerSeries(series);
int[] result = traiterSeries(series);
baseTotal += result[0];
nbSeriesTotal += result[1];
boolean[][] masque = creerMasque(series);
plateau.libererVerrous(masque);
@@ -120,10 +122,18 @@ public class EtatJeu {
// --- Aide à la résolution ---
private int compterEtEnregistrerSeries(List<int[]> series) {
/**
* 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
*/
private int[] traiterSeries(List<int[]> series) {
boolean[][] masque = creerMasque(series);
int count = 0;
int[][] g = plateau.getGrille();
int pts = 0;
int count = 0;
// Horizontal
for (int l = 0; l < Plateau.NB_LIGNES; l++) {
@@ -136,6 +146,7 @@ public class EtatJeu {
fin++;
}
if (fin - c >= 3) {
pts += pointsPourLongueur(fin - c);
seriesParCouleurDernierCoup[type]++;
count++;
}
@@ -156,6 +167,7 @@ public class EtatJeu {
fin++;
}
if (fin - l >= 3) {
pts += pointsPourLongueur(fin - l);
seriesParCouleurDernierCoup[type]++;
count++;
}
@@ -165,51 +177,16 @@ public class EtatJeu {
}
}
}
return count;
}
private int calculerPointsBase(List<int[]> series) {
boolean[][] masque = creerMasque(series);
int pts = 0;
// Horizontal
for (int l = 0; l < Plateau.NB_LIGNES; l++) {
int c = 0;
while (c < Plateau.NB_COLONNES) {
if (masque[l][c]) {
int fin = c + 1;
while (fin < Plateau.NB_COLONNES && masque[l][fin]) {
fin++;
}
pts += pointsPourLongueur(fin - c);
c = fin;
} else {
c++;
}
}
}
// Vertical
for (int c = 0; c < Plateau.NB_COLONNES; c++) {
int l = 0;
while (l < Plateau.NB_LIGNES) {
if (masque[l][c]) {
int fin = l + 1;
while (fin < Plateau.NB_LIGNES && masque[fin][c]) {
fin++;
}
pts += pointsPourLongueur(fin - l);
l = fin;
} else {
l++;
}
}
}
return pts;
return new int[] { pts, count };
}
private int pointsPourLongueur(int n) {
if (n == 3) return 8;
if (n == 4) return 16;
if (n == 5) return 32;
if (n == 3)
return 8;
if (n == 4)
return 16;
if (n == 5)
return 32;
return 64;
}
@@ -11,8 +11,6 @@ import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private Controleur controleur;
private Button btnMenu;
private boolean hardMode;
@@ -40,9 +38,6 @@ public class MainActivity extends Activity implements View.OnClickListener {
// --- Vue ---
VueGrille vueGrille = findViewById(R.id.vueGrille);
// --- Controleur ---
btnMenu = findViewById(R.id.btnMenu);
+1 -1
View File
@@ -260,7 +260,7 @@ public class VueGrille extends View {
// Dessin d'une chaine en bas à droite
canvas.drawBitmap(imageChaine, null, new RectF(x2 - chainSize, y2 - chainSize, x2, y2), null);
} else if (verrous[ligne][colonne]) {
// Fallback si l'image n'est pas trouvée
// si l'image n'est pas trouvée
canvas.drawText("🔒", cx, cy, pinceauSymbole);
}
}