diff --git a/test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml b/test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml index 8ca4082..b6896cb 100644 --- a/test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml +++ b/test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ @@ -13,5 +13,7 @@ + + diff --git a/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java index 6ee7a66..ab25e05 100644 --- a/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java +++ b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java @@ -24,6 +24,7 @@ public class FlowFreeView extends View { private final Map colorMap = new HashMap<>();//test pour la couleur private final Set completedColors = new HashSet<>();// liste des chemin fini + private boolean win = false; private static final int[] DISTINCT_COLORS = { @@ -158,8 +159,54 @@ private void printBoardToLog() { ); } } + //dessine quand c'est victoir + if (win) { + paint.setColor(Color.BLACK); + paint.setTextSize(80); + paint.setTextAlign(Paint.Align.CENTER); + canvas.drawText("🎉 Bravo !", getWidth() / 2f, getHeight() / 2f, paint); + } + + } + //test + private void clearPath(int color) { + // Supprime visuellement le chemin + for (int r = 0; r < board.length; r++) { + for (int c = 0; c < board[r].length; c++) { + if (board[r][c] == -color) { + board[r][c] = 0; + } + } + } + + // Supprime le chemin logique + paths.remove(color); + completedColors.remove(color); + invalidate(); // Redessine + } + //test + //verrifie condition victoir + private void checkWin() { + // 1. VĂ©rifie si le tableau est complĂštement rempli + for (int r = 0; r < board.length; r++) { + for (int c = 0; c < board[r].length; c++) { + if (board[r][c] == 0) { + return; // Case vide : pas encore gagnĂ© + } + } + } + + // 2. VĂ©rifie si toutes les paires sont terminĂ©es + if (completedColors.size() == puzzle.getPairs().size()) { + Log.d("DEBUG_FLOW", "🎉 Puzzle rĂ©solu !"); + win = true; + invalidate(); // Redessine pour afficher le message + } + } + + @Override public boolean onTouchEvent(MotionEvent event) { @@ -175,7 +222,15 @@ private void printBoardToLog() { case MotionEvent.ACTION_DOWN: int colorAtCell = board[row][col]; - if (colorAtCell != 0) { + if (colorAtCell > 0) { + + //test + clearPath(colorAtCell); // 👈 mĂȘme fonction de nettoyage + selectedColor = colorAtCell; + paths.put(selectedColor, new ArrayList<>()); + paths.get(selectedColor).add(new int[]{row, col}); + //test + if (completedColors.contains(colorAtCell)) {// regarde si le chemin qu'on veut tracer est fini // 🔒 Ne pas toucher Ă  un chemin terminĂ© Log.d("DEBUG_FLOW", "Chemin dĂ©jĂ  terminĂ©, on ne fait rien."); @@ -236,11 +291,21 @@ private void printBoardToLog() { int dr = Math.abs(last[0] - row); int dc = Math.abs(last[1] - col); + + //permet de ne pas revenir a upoint de depart + int[] start = path.get(0); + if (row == start[0] && col == start[1]) { + Log.d("DEBUG_FLOW", "Tentative de retour au point de dĂ©part — refusĂ©."); + break; + } + // test + if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) { board[row][col] = selectedColor; // ✅ Remplit avec l’id du point de dĂ©part path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id completedColors.add(selectedColor); selectedColor = 0;// permet de ne pas travers la paire + checkWin(); invalidate(); // đŸ–Œïž Redessine la vue Log.d("DEBUG_FLOW", "Paire " + selectedColor + " complĂ©tĂ©e !"); } diff --git a/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/MenuActivity.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/MenuActivity.java new file mode 100644 index 0000000..e68d396 --- /dev/null +++ b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/MenuActivity.java @@ -0,0 +1,26 @@ +package com.example.flow_free; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.MotionEvent; +import android.widget.Button; + +public class MenuActivity extends Activity { + + private Button Bjouer; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_menu); + Bjouer = findViewById(R.id.Bjouer); + Bjouer.setOnClickListener(view -> { + Intent intent = new Intent(MenuActivity.this, MainActivity.class); + startActivity(intent); + }); + } + + + +} + diff --git a/test_sae_contenue_juste_le_main/src/main/res/layout/activity_menu.xml b/test_sae_contenue_juste_le_main/src/main/res/layout/activity_menu.xml new file mode 100644 index 0000000..98c9c54 --- /dev/null +++ b/test_sae_contenue_juste_le_main/src/main/res/layout/activity_menu.xml @@ -0,0 +1,36 @@ + + + + + + +