MAJ - affichage verrous & EtatJeu
This commit is contained in:
@@ -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];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user