plus que l'acro

This commit is contained in:
Maxime
2025-03-30 19:23:38 +02:00
parent 79fdef5722
commit 2db1665e92
9 changed files with 283 additions and 164 deletions

View File

@@ -14,6 +14,7 @@
<activity android:name=".GameActivity"/>
<activity android:name=".SettingsActivity"/>
<activity android:name=".MainActivity"/>
<activity android:name=".RulesActivity"/>
</application>
</manifest>

View File

@@ -1,58 +1,52 @@
<puzzle size="10" nom="Puzzle Taille 10 - Parfait">
<paire> <!-- rouge -->
<puzzle size="10" nom="Puzzle Taille 10">
<!-- jaune-->
<paire>
<point colonne="0" ligne="9" />
<point colonne="9" ligne="1" />
<point colonne="4" ligne="9" />
</paire>
<paire> <!-- orange -->
<!-- rouge-->
<paire>
<point colonne="1" ligne="5" />
<point colonne="1" ligne="7" />
</paire>
<!-- bleu-->
<paire>
<point colonne="1" ligne="4" />
<point colonne="2" ligne="8" />
</paire>
<!-- vert-->
<paire>
<point colonne="1" ligne="8" />
<point colonne="5" ligne="7" />
<point colonne="5" ligne="3" />
</paire>
<paire> <!-- cyan -->
<point colonne="6" ligne="9" />
<point colonne="9" ligne="9" />
<!-- bordeau-->
<paire>
<point colonne="2" ligne="3" />
<point colonne="4" ligne="5" />
</paire>
<paire> <!-- jaune -->
<point colonne="6" ligne="8" />
<point colonne="9" ligne="8" />
<!-- rose-->
<paire>
<point colonne="2" ligne="2" />
<point colonne="7" ligne="2" />
</paire>
<paire> <!-- bleu -->
<point colonne="3" ligne="3" />
<point colonne="7" ligne="7" />
</paire>
<paire> <!-- rose -->
<point colonne="7" ligne="6" />
<point colonne="6" ligne="5" />
</paire>
<paire> <!-- vert clair -->
<point colonne="6" ligne="7" />
<point colonne="8" ligne="1" />
</paire>
<paire> <!-- violet -->
<point colonne="2" ligne="6" />
<point colonne="4" ligne="7" />
</paire>
<paire> <!-- vert -->
<point colonne="4" ligne="8" />
<point colonne="5" ligne="6" />
</paire>
<paire> <!-- vert foncé -->
<point colonne="6" ligne="4" />
<!-- violet-->
<paire>
<point colonne="5" ligne="5" />
<point colonne="7" ligne="5" />
</paire>
<paire> <!-- rose pastel -->
<point colonne="2" ligne="1" />
<point colonne="1" ligne="4" />
<!-- blanc-->
<paire>
<point colonne="4" ligne="6" />
<point colonne="7" ligne="4" />
</paire>
<paire> <!-- turquoise -->
<point colonne="0" ligne="0" />
<point colonne="9" ligne="0" />
<!-- orange-->
<paire>
<point colonne="4" ligne="8" />
<point colonne="8" ligne="7" />
</paire>
<paire> <!-- indigo -->
<point colonne="0" ligne="1" />
<point colonne="0" ligne="9" />
</paire>
<paire> <!-- marron -->
<point colonne="9" ligne="2" />
<point colonne="0" ligne="2" />
<!-- cyan-->
<paire>
<point colonne="5" ligne="8" />
<point colonne="8" ligne="8" />
</paire>
</puzzle>

View File

@@ -1,46 +1,57 @@
<puzzle size="11" nom="Puzzle Taille 11">
<paire> <!-- rose pastel -->
<!-- blanc-->
<paire>
<point colonne="0" ligne="0" />
<point colonne="0" ligne="3" />
<point colonne="3" ligne="1" />
</paire>
<paire> <!-- rose -->
<point colonne="0" ligne="5" />
<point colonne="1" ligne="1" />
</paire>
<paire> <!-- rouge -->
<point colonne="0" ligne="10" />
<point colonne="7" ligne="7" />
</paire>
<paire> <!-- bleu -->
<!-- bordeau-->
<paire>
<point colonne="1" ligne="0" />
<point colonne="4" ligne="2" />
</paire>
<!-- rouge-->
<paire>
<point colonne="4" ligne="3" />
<point colonne="10" ligne="1" />
</paire>
<!-- bleu-->
<paire>
<point colonne="3" ligne="8" />
<point colonne="10" ligne="7" />
</paire>
<paire> <!-- vert clair -->
<point colonne="2" ligne="2" />
<point colonne="9" ligne="7" />
</paire>
<paire> <!-- vert foncé -->
<point colonne="3" ligne="2" />
<point colonne="3" ligne="5" />
</paire>
<paire> <!-- vert -->
<point colonne="2" ligne="6" />
<point colonne="2" ligne="9" />
</paire>
<paire> <!-- orange -->
<point colonne="1" ligne="9" />
<point colonne="2" ligne="7" />
</paire>
<paire> <!-- cyan -->
<point colonne="1" ligne="10" />
<point colonne="10" ligne="8" />
</paire>
<paire> <!-- jaune -->
<!-- orange-->
<paire>
<point colonne="1" ligne="3" />
<point colonne="3" ligne="9" />
<point colonne="4" ligne="5" />
</paire>
<paire> <!-- violet -->
<point colonne="5" ligne="5" />
<!-- rose-->
<paire>
<point colonne="3" ligne="2" />
<point colonne="4" ligne="4" />
</paire>
<!-- jaune-->
<paire>
<point colonne="3" ligne="7" />
<point colonne="8" ligne="4" />
</paire>
<!-- cyan-->
<paire>
<point colonne="7" ligne="2" />
<point colonne="9" ligne="4" />
</paire>
<!-- gris-->
<paire>
<point colonne="4" ligne="9" />
<point colonne="9" ligne="5" />
</paire>
<!-- vert-->
<paire>
<point colonne="8" ligne="6" />
<point colonne="9" ligne="8" />
</paire>
<!-- violet-->
<paire>
<point colonne="7" ligne="3" />
<point colonne="6" ligne="8" />
</paire>
</puzzle>

View File

@@ -1,54 +1,72 @@
<puzzle size="14" nom="Puzzle Taille 14">
<paire> <!-- rose pastel -->
<point colonne="0" ligne="0" />
<point colonne="0" ligne="6" />
<!-- rose-->
<paire>
<point colonne="4" ligne="9" />
<point colonne="11" ligne="12" />
</paire>
<paire> <!-- rose -->
<point colonne="3" ligne="1" />
<point colonne="1" ligne="7" />
<!-- vert claire-->
<paire>
<point colonne="1" ligne="8" />
<point colonne="3" ligne="10" />
</paire>
<paire> <!-- rouge -->
<point colonne="0" ligne="13" />
<point colonne="9" ligne="10" />
<!-- bleu-->
<paire>
<point colonne="2" ligne="2" />
<point colonne="4" ligne="10" />
</paire>
<paire> <!-- bleu -->
<point colonne="4" ligne="0" />
<point colonne="13" ligne="9" />
<!-- vert foncé-->
<paire>
<point colonne="1" ligne="9" />
<point colonne="9" ligne="11" />
</paire>
<paire> <!-- vert clair -->
<point colonne="5" ligne="5" />
<!-- orange-->
<paire>
<point colonne="4" ligne="8" />
<point colonne="5" ligne="7" />
</paire>
<!-- jaune-->
<paire>
<point colonne="6" ligne="11" />
<point colonne="8" ligne="11" />
</paire>
<!-- violet-->
<paire>
<point colonne="6" ligne="12" />
<point colonne="13" ligne="13" />
</paire>
<!-- dorée-->
<paire>
<point colonne="6" ligne="9" />
<point colonne="12" ligne="10" />
</paire>
<paire> <!-- vert foncé -->
<point colonne="6" ligne="5" />
<point colonne="6" ligne="8" />
<!-- bleu canard-->
<paire>
<point colonne="8" ligne="6" />
<point colonne="13" ligne="12" />
</paire>
<paire> <!-- vert -->
<point colonne="5" ligne="9" />
<point colonne="5" ligne="12" />
<!-- cyan-->
<paire>
<point colonne="5" ligne="0" />
<point colonne="7" ligne="0" />
</paire>
<paire> <!-- orange -->
<point colonne="4" ligne="12" />
<point colonne="5" ligne="10" />
<!-- bordeau-->
<paire>
<point colonne="6" ligne="0" />
<point colonne="10" ligne="5" />
</paire>
<paire> <!-- cyan -->
<point colonne="3" ligne="13" />
<point colonne="13" ligne="11" />
<!-- blanc-->
<paire>
<point colonne="8" ligne="1" />
<point colonne="13" ligne="0" />
</paire>
<paire> <!-- jaune -->
<point colonne="7" ligne="12" />
<point colonne="8" ligne="8" />
<!-- rouge-->
<paire>
<point colonne="8" ligne="2" />
<point colonne="12" ligne="8" />
</paire>
<paire> <!-- violet -->
<point colonne="9" ligne="7" />
<point colonne="12" ligne="11" />
</paire>
<paire> <!-- turquoise -->
<point colonne="6" ligne="3" />
<point colonne="11" ligne="8" />
</paire>
<paire> <!-- marron -->
<point colonne="8" ligne="5" />
<point colonne="10" ligne="6" />
<!-- gris-->
<paire>
<point colonne="8" ligne="7" />
<point colonne="10" ligne="2" />
</paire>
</puzzle>

View File

@@ -161,10 +161,37 @@ private void printBoardToLog() {
}
//dessine quand c'est victoir
if (win) {
paint.setColor(Color.BLACK);
String message = "🎉 Bravo !";
paint.setTextSize(80);
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText("🎉 Bravo !", getWidth() / 2f, getHeight() / 2f, paint);
// Mesure le texte
Paint.FontMetrics fm = paint.getFontMetrics();
float textWidth = paint.measureText(message);
float textHeight = fm.bottom - fm.top;
float centerX = getWidth() / 2f;
float centerY = getHeight() / 2f;
// 🎨 Dessine un fond blanc arrondi
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
float padding = 30;
RectF background = new RectF(
centerX - textWidth / 2 - padding,
centerY + fm.top - padding / 2,
centerX + textWidth / 2 + padding,
centerY + fm.bottom + padding / 2
);
canvas.drawRoundRect(background, 30, 30, paint);
// 🖤 Ombre
paint.setColor(Color.BLACK);
canvas.drawText(message, centerX + 3, centerY + 3, paint);
// 🔴 Texte principal
paint.setColor(Color.RED);
canvas.drawText(message, centerX, centerY, paint);
}
@@ -268,56 +295,58 @@ private void printBoardToLog() {
//version chat
case MotionEvent.ACTION_MOVE:
if (selectedColor != 0) {
if (board[row][col] == 0) { // la case est vide
// Vérifie que la case est adjacente à la dernière
List<int[]> path = paths.get(selectedColor);
int[] last = path.get(path.size() - 1);
int dr = Math.abs(last[0] - row);
int dc = Math.abs(last[1] - col);
if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) {
board[row][col] = -selectedColor; // ✅ Remplit avec lid du point de départ
path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id
invalidate(); // 🖌️ Redessine la vue
List<int[]> path = paths.get(selectedColor);
if (path == null || path.isEmpty()) break;
int[] last = path.get(path.size() - 1);
int dr = Math.abs(last[0] - row);
int dc = Math.abs(last[1] - col);
if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) {
int current = board[row][col];
// 1⃣ Avancer sur une case vide
if (current == 0) {
board[row][col] = -selectedColor;
path.add(new int[]{row, col});
invalidate();
}
}
if (board[row][col] == selectedColor) { // la case est la meme que le depart
// Vérifie que la case est adjacente à la dernière
List<int[]> path = paths.get(selectedColor);
int[] last = path.get(path.size() - 1);
// 2⃣ Atteindre lautre point de la paire
else if (current == selectedColor) {
// ⚠️ Ne pas revenir au point de départ
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;
}
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 lid du point de départ
path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id
path.add(new int[]{row, col});
board[row][col] = selectedColor;
completedColors.add(selectedColor);
selectedColor = 0;// permet de ne pas travers la paire
selectedColor = 0;
checkWin();
invalidate(); // 🖌️ Redessine la vue
Log.d("DEBUG_FLOW", "Paire " + selectedColor + " complétée !");
invalidate();
Log.d("DEBUG_FLOW", "Paire complétée !");
}
// 3⃣ Reculer sur une case du chemin
else if (current == -selectedColor && path.size() >= 2) {
int[] beforeLast = path.get(path.size() - 2);
if (beforeLast[0] == row && beforeLast[1] == col) {
// 🔙 On recule dune case
int[] removed = path.remove(path.size() - 1);
board[removed[0]][removed[1]] = 0;
invalidate();
Log.d("DEBUG_FLOW", "Recul dune case sur le chemin.");
}
}
}
}
break;
//version chat
//version chat

View File

@@ -1,5 +1,6 @@
package com.example.flow_free;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
@@ -9,13 +10,17 @@ import android.widget.Button;
public class MenuActivity extends Activity {
private Button Bjouer;
private Button Bregles;
private listener view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Bjouer = findViewById(R.id.Bjouer);
Bregles = findViewById(R.id.Bregles);
Bjouer.setOnClickListener(new listener(this,MainActivity.class));
Bregles.setOnClickListener(new listener(this,RulesActivity.class));

View File

@@ -1,4 +1,13 @@
// RulesActivity.java
package com.example.flow_free;
public class RulesActivity {
}
import android.app.Activity;
import android.os.Bundle;
public class RulesActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rules);
}
}

View File

@@ -23,7 +23,7 @@
android:text="Jouer" />
<Button
android:id="@+id/button2"
android:id="@+id/Bregles"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/Bjouer"

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rules_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:background="#FFFFFF">
<TextView
android:id="@+id/title_rules"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Règles du jeu"
android:textSize="24sp"
android:textStyle="bold"
android:gravity="center"
android:textColor="#000000" />
<TextView
android:id="@+id/rules_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title_rules"
android:layout_marginTop="20dp"
android:text="Pour jouer à Flow-Free, le but est de remplir entièrement la grille en traçant un chemin entre chaque paire de cercles de même couleur. Lorsque tous les chemins sont correctement tracés et que la grille est pleine, le puzzle est complété."
android:textSize="16sp"
android:textColor="#333333"
android:lineSpacingExtra="6dp" />
<TextView
android:id="@+id/commands_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/rules_description"
android:layout_marginTop="24dp"
android:text="Commandes :"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#000000" />
<TextView
android:id="@+id/commands_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/commands_title"
android:layout_marginTop="8dp"
android:text="• Touchez un cercle coloré pour commencer un tracé, puis glissez votre doigt vers l'autre cercle de la même couleur.\n\n• Si vous souhaitez corriger ou recommencer un chemin, touchez à nouveau lun des deux cercles de la couleur correspondante : cela effacera le chemin et vous pourrez le redessiner."
android:textSize="16sp"
android:textColor="#333333"
android:lineSpacingExtra="6dp" />
</RelativeLayout>