MAJ - affichage verrous & EtatJeu

This commit is contained in:
2026-03-23 12:03:12 +01:00
parent 800f038cd3
commit fa9e587a7e
3 changed files with 143 additions and 120 deletions
+51 -4
View File
@@ -21,6 +21,9 @@ public class EtatJeu {
private boolean partieTerminee = false;
private boolean hardMode = false;
// Ajout pour les objectifs : comptage des séries par couleur au dernier coup
private final int[] seriesParCouleurDernierCoup = new int[NB_TYPES];
//-
// CONSTRUCTEURS
@@ -52,6 +55,10 @@ public class EtatJeu {
return partieTerminee;
}
public int[] getSeriesParCouleurDernierCoup() {
return seriesParCouleurDernierCoup;
}
// -
// SAUVEGARDE ET RESTAURATION
@@ -214,6 +221,10 @@ public class EtatJeu {
}
nbCoups++;
// Reset des séries du dernier coup
for (int i = 0; i < NB_TYPES; i++) seriesParCouleurDernierCoup[i] = 0;
score += resoudreEtRemplir();
// Verrou après chaque coup ; 2 verrous en hard mode (plus difficile)
@@ -297,7 +308,7 @@ public class EtatJeu {
public int resoudreEtRemplir() {
int baseTotal = 0;
int nbSeries = 0;
int nbSeriesTotal = 0;
List<int[]> series = trouverSeries();
@@ -305,7 +316,11 @@ public class EtatJeu {
// Accumuler les points de base et le nombre de séries sur toutes les vagues
baseTotal += calculerPointsBase(series);
nbSeries += compterNbSeries(series);
// On compte les séries par couleur spécifiquement
compterSeriesParCouleur(series);
nbSeriesTotal += compterNbSeries(series);
boolean[][] aSupprimer = new boolean[NB_LIGNES][NB_COLONNES];
@@ -342,13 +357,45 @@ public class EtatJeu {
series = trouverSeries();
}
if (nbSeries == 0) return 0;
if (nbSeriesTotal == 0) return 0;
// Bonus : +50% par série supplémentaire après la première (spec SAÉ)
double bonus = 1.0 + (nbSeries - 1) * 0.5;
double bonus = 1.0 + (nbSeriesTotal - 1) * 0.5;
return (int) (baseTotal * bonus);
}
private void compterSeriesParCouleur(List<int[]> series) {
boolean[][] masque = new boolean[NB_LIGNES][NB_COLONNES];
for (int[] pos : series) masque[pos[0]][pos[1]] = true;
// Horizontales
for (int l = 0; l < NB_LIGNES; l++) {
int c = 0;
while (c < NB_COLONNES) {
if (masque[l][c]) {
int type = grille[l][c];
int fin = c + 1;
while (fin < NB_COLONNES && masque[l][fin] && grille[l][fin] == type) fin++;
if (fin - c >= 3) seriesParCouleurDernierCoup[type]++;
c = fin;
} else c++;
}
}
// Verticales
for (int col = 0; col < NB_COLONNES; col++) {
int l = 0;
while (l < NB_LIGNES) {
if (masque[l][col]) {
int type = grille[l][col];
int fin = l + 1;
while (fin < NB_LIGNES && masque[fin][col] && grille[fin][col] == type) fin++;
if (fin - l >= 3) seriesParCouleurDernierCoup[type]++;
l = fin;
} else l++;
}
}
}
private int calculerPointsBase(List<int[]> series) {
boolean[][] masque = new boolean[NB_LIGNES][NB_COLONNES];