Un marcheur est prisonnier d'un labyrinthe. On souhaite l'amener à la sortie. On préférerait donner une méthode qui fonctionne quelque soit le labyrinthe.
Dans cet exercice, on se concentre sur la partie algorithmique.
Pour rendre l'exercice plus agréable, on fournit une interface graphique qui permet de voir le personnage parcourir le labyrinthe.
À la fin vous devrez donc avoir un programme qui affiche le parcours du marcheur à travers le labyrinthe, jusqu'à la sortie.
Le module exploite Tkinter. Vous pouvez le télécharger : labyrinthe.py
Ce module permet de créer facilement un labyrinthe, de l'afficher à l'écran, d'afficher le marcheur qui parcours le labyrinthe et enfin de manipuler le marcheur.
Vous allez un créer un fichier python, par exemple sortir_laby.py.
Il devra être placer dans le même dossier que labyrinthe.py et commencer par :
from labyrinthe import * speed(50) # réglage de la vitesse
Vous pouvez créer un exemple de labyrinthe avec un fichier texte.
* sont les murs,A sont les arrivées (au moins une),D est le départ (exactement un)Par exemple :
******************** D * * * * * *** * *** * ** * * A * * * * * * * * * * *** * * * ** * * * * * * * * * ********* * * **** * * * ********************
Vous pouvez enregistrer ce texte dans par exemple dans un fichier mon_laby.txt, puis vous pourrez charger ce labyrinthe dans python avec :
load("mon_laby.txt")
Faire un gros labyrinthe est un peu long. Je vous en ai fait un : laby_exemple.txt
Vous pouvez l'utiliser pour vérifier le bon fonctionnement de votre programme.
Votre programme contiendra forcément :
from labyrinthe import *
speed(50) # vitesse ajustée entre 1 et 100
load("mon_laby.txt") # ou un autre fichier...
# vos commandes
# et à la fin
fin()
avancer() # avance d'un pas tourner_gauche() # tourne d'un quart de tour à gauche tourner_droite() # tourne d'un quart de tour à droite
Attention : si vous avancez contre un mur, vous aurez un message d'erreur.
Vous pouvez aussi tester les cases voisines du marcheur pour savoir ce qu'il peut faire :
mur_devant() # renvoie True s'il y a un mur devant le marcheur mur_a_gauche() # renvoie True s'il y a un mur à gauche mur_a_droite() # renvoie True s'il y a un mur à droite est_A() # renvoie True si le marcheur est sur l'arrivée