"AMAZING GENERATOR"
LABYRINTHES
Ce projet, a pour idée d'utiliser un dès algorithme connu de génération de labyrinthe (maze
genarator), pour permettre à une application qui sera développée en Java avec les api
JavaFX(http://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm#JFXST784), de
générer des labyrinthes de taille quelconques et de permettre à un petit personnage (Sprite)
(http://webloria.loria.fr/~vthomas/enseignement/Jeuxvideos/2012_boucle_de_jeu.pdf) que vous
piloterez avec les touches du clavier d'en sortir le plus rapidement possible (Timer).
Pour générer des labyrinthes, il y a plusieurs algorithmes existant, qui permettent plus ou moins
efficacement de générer des labyrinthes parfaits ou imparfaits (http://ilay.org/yann/articles/maze/),
les algorithmes que vous rencontrerez portent la plupart du temps le nom de leur concepteur ou de
son mode de fonctionnement :
Recursive BackTracking
Algorithme de Eller
Algorithme de Kruskal
Algorithme de Prim
Division récursive
Algorithme d'Aldous-Broder
Algorithme de Wilson
etc...
Nous allons nous interesser à l'un d'entre eux qui est l'algorithme nommé "Recursive
BackTracking".
Exemple de labyrinthe généré avec BackTracking
1/3
Vous trouverez énormément de site internet bien documentés qui parlent de cet algorithme.
Algorithme du BackTraking
(Postulat) On part d'un labyrinthe constitué de cellules ou toutes les portes sont fermées.
Chaque cellule contient une variable « Etat » qui indique si la cellule est rattachée au labyrinthe
ou non. Toutes les variables sont à non (0).
(Etape 0) On choisi une premiere cellule au hasard et on met son état à COURANTE (1).
Tant que labyrinthe !fini
(Etape 1) Puis on regarde quels sont les cellules voisines disponibles et dont l'état est à 0 et on
stocke la position de la cellule en cours dans la liste de 'backtracking'.
(Etape 2) S'il y a au mois une possibilité, on la sèlectionne, dans le cas de plusieurs possibilités on
en choisi une au hasard, on ouvre le mur et on met son "Etat" à 1 (courante) et l'etat de la précedente
à 2 (visite) et on recommence avec la nouvelle cellule courante(go to 1).
(Etape 3) S'il n'y en a pas, on revient à la case précédente (liste de backtracking) et on recommence
en 1 si la cellule est éligible ou en 3 sinon.
(Arret) Quand on est revenu à la case départ et qu'il n'y a plus de possibilités (toutes les cases sont à
>0), le labyrinthe est terminé (fini=vrai).
Fin tant que
Travail demandé :
(Proposition 1) Réalisez sous Java avec les Api JavaFX une application graphique qui permet de
générer des labyrinthes avec cet algorithme et de permettre à un personnage (sprite) de circuler et
sortir de ce labyrinthe avec le temps le plus court possible, ce qui donnera un certain nombre de
points.
On s'assurera que l'on a bien marqué la sortie du labyrinthe, et on placera le personnage à l'entrée du
labyrinthe.
Régles simples du jeu :
- A chaque niveau on augmentera la taille du labyrinthe, pour augmenter la difficulté.
- A chaque niveau un objectif de point est à atteindre, s'il ne l'est pas le jeu s'arrete.
- Un abandon marque la fin du jeu.
A la fin du jeu, on inscrit les score des joueurs sur un tableau de score à l'écran (score + niveau +
meilleur temps) là aussi vous serez force de propositions.
(Proposition 2) Réalisez une application avec les Api JavaFX une application graphique qui permet
de générer des labyrinthes avec cet algorithme et d'écrire un algorithme basé également sur la
notion de "BackTracking" et de retrouver un chemin de sortie entre le point de départ et d'arrivée et
de tracer celui ci.
2/3
Outils imposés :
Java 8 (http://www.oracle.com/technetwork/java/javase/downloads/index.html) ET l'éditeur
NetBeans 8.1 pour Java (https://netbeans.org/downloads/)
Contact :
M. Tondeur Hervé : [email protected]
Répartition des charges :
Ce projet nécessite un ou deux étudiants maximum.
Motivations :
Découvrir l'informatique sous un angle algorithmique et ludique, comprendre et percevoir la
richesse des algorithmes qui se trouvent masqués dans les jeux "Rogue-Like". De découvrir les
notions sur la boucle de jeu, les notions sur les sprites et leur déplacement, la gestion des colisions
(moteur physique).
Et jouer avec les algorithmes de type backtracking qui sont trés utilisé en informatique, comme la
résolution de jeu de type sudoku, recherche de chemin, et encore bien d'autres.
Approfondir ses notions de Java dans l'utilisation du langage Java et des API JavaFX.
3/3
1 / 3 100%