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