Correction du scoring (fichier à push : EtatJeu)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user