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=".GameActivity"/>
<activity android:name=".SettingsActivity"/> <activity android:name=".SettingsActivity"/>
<activity android:name=".MainActivity"/> <activity android:name=".MainActivity"/>
<activity android:name=".RulesActivity"/>
</application> </application>
</manifest> </manifest>

View File

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

View File

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

View File

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

View File

@@ -161,10 +161,37 @@ private void printBoardToLog() {
} }
//dessine quand c'est victoir //dessine quand c'est victoir
if (win) { if (win) {
paint.setColor(Color.BLACK); String message = "🎉 Bravo !";
paint.setTextSize(80); paint.setTextSize(80);
paint.setTextAlign(Paint.Align.CENTER); 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,55 +295,57 @@ private void printBoardToLog() {
//version chat //version chat
case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE:
if (selectedColor != 0) { 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); List<int[]> path = paths.get(selectedColor);
if (path == null || path.isEmpty()) break;
int[] last = path.get(path.size() - 1); int[] last = path.get(path.size() - 1);
int dr = Math.abs(last[0] - row); int dr = Math.abs(last[0] - row);
int dc = Math.abs(last[1] - col); int dc = Math.abs(last[1] - col);
if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) { if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) {
board[row][col] = -selectedColor; // ✅ Remplit avec lid du point de départ int current = board[row][col];
path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id
invalidate(); // 🖌️ Redessine la vue
// 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 // 2⃣ Atteindre lautre point de la paire
// Vérifie que la case est adjacente à la dernière else if (current == selectedColor) {
List<int[]> path = paths.get(selectedColor); // ⚠️ Ne pas revenir au point de départ
int[] last = path.get(path.size() - 1);
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); int[] start = path.get(0);
if (row == start[0] && col == start[1]) { if (row == start[0] && col == start[1]) {
Log.d("DEBUG_FLOW", "Tentative de retour au point de départ — refusé."); Log.d("DEBUG_FLOW", "Tentative de retour au point de départ — refusé.");
break; break;
} }
// test
if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) { path.add(new int[]{row, col});
board[row][col] = selectedColor; // ✅ Remplit avec lid du point de départ board[row][col] = selectedColor;
path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id
completedColors.add(selectedColor); completedColors.add(selectedColor);
selectedColor = 0;// permet de ne pas travers la paire selectedColor = 0;
checkWin(); checkWin();
invalidate(); // 🖌️ Redessine la vue invalidate();
Log.d("DEBUG_FLOW", "Paire " + selectedColor + " complétée !"); 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; break;
//version chat //version chat

View File

@@ -1,5 +1,6 @@
package com.example.flow_free; package com.example.flow_free;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@@ -9,13 +10,17 @@ import android.widget.Button;
public class MenuActivity extends Activity { public class MenuActivity extends Activity {
private Button Bjouer; private Button Bjouer;
private Button Bregles;
private listener view; private listener view;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu); setContentView(R.layout.activity_menu);
Bjouer = findViewById(R.id.Bjouer); Bjouer = findViewById(R.id.Bjouer);
Bregles = findViewById(R.id.Bregles);
Bjouer.setOnClickListener(new listener(this,MainActivity.class)); 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; 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" /> android:text="Jouer" />
<Button <Button
android:id="@+id/button2" android:id="@+id/Bregles"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/Bjouer" 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>