Feat: Implémentation de la logique pushUp

- Ajout de l'attribut 'score' à Game.java.
- Implémentation de la méthode pushUp dans Game.java pour gérer:
  - Le déplacement des tuiles vers le haut dans les cases vides.
  - La fusion des tuiles de même valeur.
  - La mise à jour du score lors d'une fusion.
- Modification de MainActivity pour tester pushUp.
This commit is contained in:
Augustin ROUX 2025-04-03 18:34:06 +02:00
parent 1c7ae29651
commit 276cf2e579
2 changed files with 46 additions and 10 deletions

View File

@ -8,23 +8,22 @@ public class Game {
private int[][] gameBoard;
private Random random;
private int score = 0;
public Game() {
gameBoard = new int[4][4];
random = new Random();
// Le score est initialisé à 0 par défaut
}
public void printArray() {
for (int[] row : gameBoard) {
// Ajout de %n pour un retour à la ligne après chaque ligne de la grille
String rowString = String.format("%6d%6d%6d%6d%n", row[0], row[1], row[2], row[3]);
Log.d("Game", rowString);
}
// Ajout d'une ligne vide pour séparer les affichages de grille dans le Logcat
Log.d("Game", "\n");
}
// Pas de changement dans la logique de addNewNumbers ici
public void addNewNumbers() {
ArrayList<int[]> emptySpaces = new ArrayList<>();
@ -53,8 +52,42 @@ public class Game {
gameBoard[x][y] = newNumber;
}
}
public void pushUp() {
// La logique pour le mouvement vers le haut sera implémentée ici
// Itération sur chaque colonne
for (int y = 0; y < 4; y++) {
// Itération sur chaque ligne de la colonne en commençant par la deuxième ligne (index 1)
for (int x = 1; x < 4; x++) {
// Si la case actuelle n'est pas vide
if (gameBoard[x][y] != 0) {
int value = gameBoard[x][y]; // Stocke la valeur de la case actuelle
int currentX = x; // Variable pour suivre la position courante lors du déplacement vers le haut
// Déplacement vers le haut tant que la case précédente est vide et qu'on n'est pas en haut du tableau
while (currentX > 0 && gameBoard[currentX - 1][y] == 0) {
currentX--; // Décrémente pour remonter d'une ligne
}
// Traitement des cas après le déplacement
if (currentX == 0) { // Si on est arrivé en haut du tableau
gameBoard[0][y] = value; // Place la valeur en haut
// Vide la case d'origine seulement si la tuile a bougé
if (currentX != x) {
gameBoard[x][y] = 0;
}
} else if (gameBoard[currentX - 1][y] != value) { // Si la case précédente a une valeur différente
gameBoard[currentX][y] = value; // Place la valeur à la position actuelle (juste en dessous de la case différente)
// Vide la case d'origine seulement si la tuile a bougé
if (currentX != x) {
gameBoard[x][y] = 0;
}
} else { // Si la case précédente a la même valeur (Cas de fusion)
gameBoard[currentX - 1][y] *= 2; // Double la valeur de la case précédente (fusion)
score += gameBoard[currentX - 1][y]; // Ajoute le résultat de la fusion au score
gameBoard[x][y] = 0; // Vide la case d'origine (toujours nécessaire en cas de fusion)
}
}
}
}
}
}

View File

@ -11,10 +11,13 @@ public class MainActivity extends AppCompatActivity {
Game game = new Game();
// Test de addNewNumbers() plusieurs fois
for (int i = 0; i < 10; i++) {
game.addNewNumbers();
game.printArray();
}
// Initialisation avec quelques tuiles pour le test
game.addNewNumbers();
game.addNewNumbers();
game.addNewNumbers();
game.printArray(); // Affichage initial
game.pushUp(); // Appel de pushUp()
game.printArray(); // Affichage après pushUp()
}
}