From 276cf2e5796cafd257b1f7ecd944431aafca7b18 Mon Sep 17 00:00:00 2001 From: Muyue Date: Thu, 3 Apr 2025 18:34:06 +0200 Subject: [PATCH] =?UTF-8?q?Feat:=20Impl=C3=A9mentation=20de=20la=20logique?= =?UTF-8?q?=20pushUp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- .../main/java/legion/muyue/best2048/Game.java | 43 ++++++++++++++++--- .../legion/muyue/best2048/MainActivity.java | 13 +++--- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/legion/muyue/best2048/Game.java b/app/src/main/java/legion/muyue/best2048/Game.java index c673008..351e24d 100644 --- a/app/src/main/java/legion/muyue/best2048/Game.java +++ b/app/src/main/java/legion/muyue/best2048/Game.java @@ -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 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) + } + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/legion/muyue/best2048/MainActivity.java b/app/src/main/java/legion/muyue/best2048/MainActivity.java index 8b1c499..f215097 100644 --- a/app/src/main/java/legion/muyue/best2048/MainActivity.java +++ b/app/src/main/java/legion/muyue/best2048/MainActivity.java @@ -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() } } \ No newline at end of file