Correction du scoring (fichier à push : EtatJeu)
This commit is contained in:
@@ -5,7 +5,8 @@ import java.util.List;
|
|||||||
import java.util.Random;
|
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.
|
* physique de la grille à la classe Plateau.
|
||||||
*/
|
*/
|
||||||
public class EtatJeu {
|
public class EtatJeu {
|
||||||
@@ -102,8 +103,9 @@ public class EtatJeu {
|
|||||||
List<int[]> series = plateau.trouverSeries();
|
List<int[]> series = plateau.trouverSeries();
|
||||||
|
|
||||||
while (!series.isEmpty()) {
|
while (!series.isEmpty()) {
|
||||||
baseTotal += calculerPointsBase(series);
|
int[] result = traiterSeries(series);
|
||||||
nbSeriesTotal += compterEtEnregistrerSeries(series);
|
baseTotal += result[0];
|
||||||
|
nbSeriesTotal += result[1];
|
||||||
|
|
||||||
boolean[][] masque = creerMasque(series);
|
boolean[][] masque = creerMasque(series);
|
||||||
plateau.libererVerrous(masque);
|
plateau.libererVerrous(masque);
|
||||||
@@ -120,10 +122,18 @@ public class EtatJeu {
|
|||||||
|
|
||||||
// --- Aide à la résolution ---
|
// --- 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);
|
boolean[][] masque = creerMasque(series);
|
||||||
int count = 0;
|
|
||||||
int[][] g = plateau.getGrille();
|
int[][] g = plateau.getGrille();
|
||||||
|
int pts = 0;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
// Horizontal
|
// Horizontal
|
||||||
for (int l = 0; l < Plateau.NB_LIGNES; l++) {
|
for (int l = 0; l < Plateau.NB_LIGNES; l++) {
|
||||||
@@ -136,6 +146,7 @@ public class EtatJeu {
|
|||||||
fin++;
|
fin++;
|
||||||
}
|
}
|
||||||
if (fin - c >= 3) {
|
if (fin - c >= 3) {
|
||||||
|
pts += pointsPourLongueur(fin - c);
|
||||||
seriesParCouleurDernierCoup[type]++;
|
seriesParCouleurDernierCoup[type]++;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -156,6 +167,7 @@ public class EtatJeu {
|
|||||||
fin++;
|
fin++;
|
||||||
}
|
}
|
||||||
if (fin - l >= 3) {
|
if (fin - l >= 3) {
|
||||||
|
pts += pointsPourLongueur(fin - l);
|
||||||
seriesParCouleurDernierCoup[type]++;
|
seriesParCouleurDernierCoup[type]++;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -165,51 +177,16 @@ public class EtatJeu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return count;
|
return new int[] { pts, 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int pointsPourLongueur(int n) {
|
private int pointsPourLongueur(int n) {
|
||||||
if (n == 3) return 8;
|
if (n == 3)
|
||||||
if (n == 4) return 16;
|
return 8;
|
||||||
if (n == 5) return 32;
|
if (n == 4)
|
||||||
|
return 16;
|
||||||
|
if (n == 5)
|
||||||
|
return 32;
|
||||||
return 64;
|
return 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
public class MainActivity extends Activity implements View.OnClickListener {
|
public class MainActivity extends Activity implements View.OnClickListener {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Controleur controleur;
|
private Controleur controleur;
|
||||||
private Button btnMenu;
|
private Button btnMenu;
|
||||||
private boolean hardMode;
|
private boolean hardMode;
|
||||||
@@ -40,9 +38,6 @@ public class MainActivity extends Activity implements View.OnClickListener {
|
|||||||
// --- Vue ---
|
// --- Vue ---
|
||||||
VueGrille vueGrille = findViewById(R.id.vueGrille);
|
VueGrille vueGrille = findViewById(R.id.vueGrille);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// --- Controleur ---
|
// --- Controleur ---
|
||||||
|
|
||||||
btnMenu = findViewById(R.id.btnMenu);
|
btnMenu = findViewById(R.id.btnMenu);
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ public class VueGrille extends View {
|
|||||||
// Dessin d'une chaine en bas à droite
|
// Dessin d'une chaine en bas à droite
|
||||||
canvas.drawBitmap(imageChaine, null, new RectF(x2 - chainSize, y2 - chainSize, x2, y2), null);
|
canvas.drawBitmap(imageChaine, null, new RectF(x2 - chainSize, y2 - chainSize, x2, y2), null);
|
||||||
} else if (verrous[ligne][colonne]) {
|
} 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);
|
canvas.drawText("🔒", cx, cy, pinceauSymbole);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user