Projet Laby ~ Prépa agreg 2013

Ce document fait sobrement office de rapport pour le projet "Labyrinthe-Démineur" demandé pour la préparation à l'agrégation (2013/2014). Le sujet de ce projet est là sujet.pdf.

Auteur:Lilian Besson

Dépendances

Nécessaires

  1. ocamlc (et ocamlopt) pour construire (avec le module Graphics) (v3.12+ suffit),
  2. GNU/Make pour constuire,
  3. zenity (et notify-send) pour l'interface graphique améliorée (normalement le jeu devrait pouvoir marcher sans, pas testé). Disponibles gratuitement sur Debian (via les paquets universe),
  4. ImageMagick pour utiliser les images, et faire des captures d'écran du jeu. Disponible gratuitement sur Debian (via les paquets universe). Plus d'info sur http://imagemagick.org.

Dépendances bonus

  1. mPlayer pour jouer des musiques pendant le jeu (normalement, le jeu devrait pouvoir marcher sans, pas testé). (encore) dispo gratuitement sur Debian et compagnie (voir http://www.mplayerhq.hu/design7/dload.html),
  2. dot (du paquet graphviz, et xdg-open) pour visualiser les graphes d'adjacence pendant la partie (le programme écrit le graphe dans un fichier .dot, et appelle dot pour le convertir en SVG, et tente d'afficher celui-là en choisissant l'application la plus appropriée avec xdg-open). (encore) dispo gratuitement sur Debian et compagnie (voir http://graphviz.org/Download..php).

Construire

Un Makefile est là pour ça (testé uniquement sous GNU/Linux (Ubuntu 12.04)) :

projet:fait tout,
dochtml:fait la doc en html,
rapport:construit cette page,
laby:fait le binaire,
testlaby:constuire le binaire et le test,
laby.opt:fait le binaire en natif (plus rapide),
testlaby.opt:constuire le second binaire et le test,
cleanall:pour nétoyer,
help:pour plus d'aide sur le Makefile.

Autres

toplevel:pour jouer avec le toplevel (avec rlwrap et ledit).

Remarques

À propos du jeux

Pour le tester, il suffit de faire make testlaby qui compile et lance le jeu. Le jeu demande de fixer les paramètres de la partie, puis tente de générer un bon plateau, affiche un récap des données du jeu s'il y parvient, puis lance la partie.

Durant la partie, le personnage commence en bas à gauche et doit atteindre la case en haut à droite. Certaines cases du plateau sont minées, d'autres sont murées, et enfin il y a des murs entre certaines cases. Avancer sur une case minée fait perdre la partie : il faut donc éviter (c'est le but du jeu) !

Vous disposez d'un certain nombre de cailloux (écrit dans le terminal) que vous pouvez jeter devant vous avec la touche ' ' (espace). Vous pouvez avancer avec 'z' (touche z), tourner à droite avec 'd' (touche d) ou à gauche avec 'g'. Le jeu se termine par une victoire, ou une défaite (marcher sur une mine, ou atteindre le nombre max de déplacements, ou avoir utilisé son stock de caillous alors qu'il en faut encore pour atteindre l'objectif).

À propos des bonus

J'ai choisi d'implémenter les bonus suivants :
  • murs sur certaines cases, pris compte dans la question 1 et 2 pour créer un plateau ayant une solution,

  • murs entre certaines cases (ie sur certaines arètes), pris compte dans la question 1 et 2 pour créer un plateau ayant une solution,

  • borne sur le nombre de déplacement, sans chronomètre à ramasser, pris en compte dans la question 1 et 2 pour créer un plateau ayant une solution,

  • expérimental:clic sur une case pour mettre un drapeau (qui permet de garder en tête les cases potentiellement dangereuse). Il suffit de recliquer pour l'enlever.
J'ai aussi voulu ajouter les fonctionnalités suivantes :
  • export de la carte courante dans une image (avec import du paquet ImageMagick) : durant le jeu, appuyer sur 'i',
  • visualisation du graphe d'adjacence (celui utilisé dans le Dijkstra) de la carte courante dans un fichier .dot et .svsg (avec dot du paquet GraphViz) : durant le jeu, appuyer sur 'g',
  • résolution automatique : appuyer sur '$' pour résoudre le plateau automatiquement (le jeu utilise le chemin trouvé par Dijkstra pour résoudre étape par étape et graphiquement). Pas encore terminé !

Documentation

RTFD ici doc/projet.html (ou en ligne http://besson.qc.to/agreg/modelisation/projet/doc/projet.html).

Organisation des sources

Les différents types de données abstraits :

Un diagrame UML montrant les dépendances entre types.

Les différents modules (fichier .ml) :

Un diagrame UML montrant les dépendances entre modules.

Des exemples de captures d'écran

Dans le dossier examples.

Une capture d'écran de l'interface du jeu

À propos des données

Le dossier datas/ contient :

JavaScript?

Avec js_of_ocaml, http://ushiroad.com/jsviz/ et un truc comme http://besson.qc.to/gnuplot.new.html on pourrait (peut-être) faire tourner le jeu dans un navigateur !

Dernière remarque

Pour toute question, signalement de bug, ou autre :
  1. par email, Lilian(.)Besson(@)ens-cachan(.)fr,
  2. ou https://bitbucket.org/lbesson/agreg/issues/new en ligne via Bitbucket !