Skip to content

Commit

Permalink
Seed
Browse files Browse the repository at this point in the history
  • Loading branch information
Jerem-EstIcI committed Sep 6, 2024
1 parent 5b7482a commit 0881756
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 14 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Tout ça affichait dans une fenêtre Tkinter.
- [x] Faire qu'on puisse générer avec un bouton [Bonus]
- [x] Faire qu'on puisse le résoudre depuis l'app avec des boutons [Bonus]
- [x] Pouvoir gérer la grandeur du labyrinthe à générer sans devoir modifier le code [Bonus]
#### Mur :
#### Mur & Chemins:
- [x] Créer des murs sur toutes les cases du tableau de 25x25.
- [x] Définir une entrée et une sortie.
- [x] Casser certains murs de façons aléatoires.
Expand All @@ -28,6 +28,9 @@ Tout ça affichait dans une fenêtre Tkinter.
- [ ] Toujours un chemin entre l'entrée et la sortie
- [x] Faire plusieurs sorties possibles [Bonus].
- [x] Avoir le temps de création du labyrinthe [Bonus].
#### Seed:
- [x] Créer des labyrinthe suivant une seed
- [x] Afficher la seed

### Recherche du plus court chemin dans le graphe :
- [x] Dire le plus court chemin avec les noms ou valeurs des points traversé.
Expand Down
Binary file modified __pycache__/gen_lab.cpython-311.pyc
Binary file not shown.
31 changes: 27 additions & 4 deletions gen_lab.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,36 @@
from random import randint
from random import randint,seed
import time
import hashlib

class GenLab:
'''
Génération d'un labyrinthe résolvable
'''
def __init__(self, dim):
def __init__(self, dim, seed_value=None):
'''
paramètre:
- dim : dimension du labyrinthe
- seed_value : (facultatif) seed pour la génération aléatoireZ
renvoie:
- zonedess : zone dessinable
- tab : grille crée par creer_lab
- tab : grille créée par creer_lab
'''
self.dim = dim
self.zonedess = self.dim - 1
self.seed_value = seed_value

# Utilisation de la seed pour la génération si donné
if self.seed_value is not None:
seed(self.seed_value)

# Génération du labyrinthe
self.tab = self.creer_lab()

# Si aucune seed on génère une seed à partir du labyrinthe
if self.seed_value is None:
self.generated_seed = self.generate_seed()
else:
self.generated_seed = self.seed_value # Si une seed est donnée, on la garde


# -------------------------------------------------------------------------------------------- #
Expand Down Expand Up @@ -49,6 +64,15 @@ def creer_lab(self):

# -------------------------------------------------------------------------------------------- #

def generate_seed(self):
"""
Crée une seed unique basée sur la configuration du labyrinthe généré
"""
lab_string = ''.join(str(cell) for row in self.tab for cell in row) # Convertir le labyrinthe en une chaîne
seed = int(hashlib.md5(lab_string.encode()).hexdigest(), 16) # Hasher en MD5 puis la convertir en entier
return seed

# -------------------------------------------------------------------------------------------- #

def dessine_lab(self):
"""
Expand Down Expand Up @@ -138,5 +162,4 @@ def dessine_lab(self):
print("labyrinthe généré en",tempsgen, "secondes")
return self.tab,tempsgen


# -------------------------------------------------------------------------------------------- #
33 changes: 24 additions & 9 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,38 @@
dim_global = tk.IntVar(value=25) # Valeur de la dimension de base : 25
longueur_var = tk.StringVar() # Variable longeur du labyrinthe
temps_var = tk.StringVar() # Variable temps du labyrinthe
seed_global = tk.StringVar(value="") # Variable seed du labyrinthe : par défaut vide

def affiche_lab():
global labyrinthe_global
'''
Affiche le labyrinthe sur l'application tkinter
'''
dim = dim_global.get()
seed_value = seed_global.get() # Récupère la seed entrée par l'utilisateur

if seed_value:
seed_value = int(seed_value) # Convertir la seed en entier si écrite
else:
seed_value = None # Pas de seed alors génération aléatoire

dimcanva = 500 / dim
gen = GenLab(dim)
labyrinthe_global,temps_generation = gen.dessine_lab()
temps_generation=round(temps_generation*10000)
temps_generation=temps_generation/10000
gen = GenLab(dim, seed_value=seed_value) # Donner la seed pour générer le labyrinthe

labyrinthe_global, temps_generation = gen.dessine_lab()
temps_generation = round(temps_generation * 10000) / 10000

longueur_var.set(f"Longueur: N/A")
temps_var.set(f"Temps de génération du labyrinthe : {temps_generation} secondes")

# Mettre à jour la taille du canevas
# Afficher la seed générée
if not seed_value:
seed_global.set(str(gen.generated_seed)) # Afficher la seed générée

# Mise à jour de l'affichage du labyrinthe sur le canvas
canvas.config(width=len(labyrinthe_global[0]) * dimcanva, height=len(labyrinthe_global) * dimcanva)
canvas.delete("all") # Effacer tout ce qui est dessiné précédemment sur le canvas

#labyrinthe_global[1][1] = 2
#labyrinthe_global[dim - 2][dim - 2] = 3

# Parcours du labyrinthe pour dessiner les murs et les espaces
for i, ligne in enumerate(labyrinthe_global):
for j, case in enumerate(ligne):
Expand Down Expand Up @@ -89,14 +98,20 @@ def resoudre_lab():
else:
canvas.create_rectangle(j * dimcanva, i * dimcanva, (j + 1) * dimcanva, (i + 1) * dimcanva, fill="white")

# Zone des Boutons et de l'étiquette pour afficher la longueur
# Zone des Boutons et de l'étiquette pour afficher la longueur et la seed
button_frame = tk.Frame(app)
button_frame.pack(side=tk.TOP, pady=10)

dimensions = [15, 25, 35, 45, 55, 65, 75, 85, 95, 105]
dim_menu = tk.OptionMenu(button_frame, dim_global, *dimensions)
dim_menu.pack(side=tk.LEFT, padx=5)

# Champ d'entrée pour la seed
seed_label = tk.Label(button_frame, text="Seed :")
seed_label.pack(side=tk.LEFT, padx=5)
seed_entry = tk.Entry(button_frame, textvariable=seed_global)
seed_entry.pack(side=tk.LEFT, padx=5)

gen_button = tk.Button(button_frame, text="Générer Labyrinthe", command=affiche_lab)
gen_button.pack(side=tk.LEFT, padx=5)

Expand Down

0 comments on commit 0881756

Please sign in to comment.