:: Enseignements :: Master :: M1 :: 2012-2013 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | RoboMasterMind |
Il existe sur le web un logiciel nommé RoboMind qui permet d'apprendre la programmation
en bougeant un robot à l'aide d'un petit langage informatique.
http://www.robomind.net/en/index.html
Le but de ce projet est de créer votre propre version de ce programme de façon à ce qu'un
enfant de 8 ans puisse jouer avec.
Base de départ
Pour vous aidez, nous vous fournissons une archive zip contenant un parser de code
pour le langage utilisé par RoboMasterMind (donc vous n'avez pas besoin de le ré-écrire)
ainsi qu'un exemple succint d'interface graphique permettant d'afficher
un programme et une zone de dessin dans lequel le robot est censé évoluer.
robomastermind.zip.
Déroulement du programme
Comme indiqué précédemment, le but du programme est de faire évoluer un robot
dans un environnement graphique en exécutant un script.
Une description du langage et de ces possibilités se trouve à l'adresse suivante,
le langage de RoboMind.
Seul les 3 premiers liens sont intéressant, il ne vous ait pas demander de coder
la partie correspondant à l'export de script vers les robots Lego MindStorm.
Votre programme doit être capable d'exécuter l'ensemble des scripts que le
programme
RoboMind est capable d'exécuter.
Pour vous faire une idée, vous pouvez télécharger une version gratuite du
programme
RoboMind Download.
Il ne vous ait pas demander de re-créer l'ensemble des fonctionnalités graphiques
de l'interface de RoboMind, cela vous prendra trop de temps.
Voici l'ensemble des fonctionnalités que vous devez fournir.
-
Charger et sauvegarder un script sur le disque dur en indiquant
le fichier choisi.
-
Editer un script script dans l'interface, les mot-clés et fonction prédéfinies
doivent être coloré (comme sous eclipse) et optionnellement, proposer la completion
avec CTRL + SPACE.
-
Charger un environnement graphique, un plateau, permettant de faire évoluer le robot,
vous devez par défaut founir 3 plateaux (et deux scripts pour chaque plateau).
Il est interdit d'utiliser les ressources graphiques (images, etc.) provenant
du logiciel RoboMind, à vous de les créer vous même.
-
Placer le robot dans l'environnement graphique à la souris ou au clavier.
-
Lancer un script et voir le robot effectuer les mouvements correspondant.
Il devra être possible d'arréter le robot car l'icone 'start' de lancement
doit se transformer en icone 'stop' lorsque le script tourne.
-
Améliorer la signalisation des erreurs qui sont affichés lorsque l'utilisateur
édite le script. Les messages d'erreur doivent être en francais et
les erreurs doivent être signalées dans la partie qui affiche le script
(par exemple en soulignant les erreurs comme Eclipse ou Word).
-
La compilation du script doit se faire en tâche de fond (cf plus bas).
-
Optionnellement, un éditeur visuel de plateaux de jeu.
Tous ajouts d'autre fonctionnalités ne sera pas considéré tant que les fonctionnalités
ci-dessus n'aurount pas été implantées.
En tâche de fond
L'exemple de code qui vous ai proposé à un serieux problème, à chaque fois que l'utilisateur
change une partie du script, le script est re-parser complètement par la thread
qui gère l'interface graphique. Hors c'est la même thread qui gère le raffraichissement
graphique donc si le script est long, le parser risque de mettre beaucoup de temps
et pour l'utilisateur, l'application sera figée.
Il faut donc faire le parsing en tâche de fond, dans une thread séparée en applicant
les principes de la programmation concurrente.
Piste de réflexion, aller voir les classes
SwingWorker,
EventQueue et
le tutoriel
suivant.
Note, cette partie de code est sufffisamment compliqué pour que si deux codes fonctionnent
de la même façon, je trouverai cela louche.
Conditions de rendu
Le projet est à rendre par mail aux chargés de TD et à l'enseignant de cours,
au plus tard le 31 décembre à 23h59. Le format de rendu est une archive au format
zip (tout rar, tar.gz, 7z et autre ne sera pas ouvert) contenant:
- un répertoire src contenant les sources du projet et les
éventuelles ressources (images, sons, etc.) à recopier à
côté des classes;
- un répertoire docs contenant le manuel de l'utilisateur
(user.pdf) et le manuel qui explique votre architecture
(dev.pdf) au format PDF;
- un répertoire classes vide dans l'archive et qui contiendra les classes une fois compilées
- un jar exécutable robot-master-mind.jar qui fonctionne avec java
-jar robot-master-mind.jar et donc qui possède un fichier manifest adequat;
- un build.xml qui permet de
- compiler les sources (target compile)
- créer le jar exécutable (target jar)
- générer la javadoc dans docs/doc (target javadoc)
- nettoyer le projet pour qu'il ne reste plus que les éléments
demandés (target clean)
- un répertoire lib contenant les bibliothèques (imposées) dont a besoin votre projet pour fonctionner.
Cette archive Zip (attention à l'encodage) aura comme nom Nom1Nom2_RoboMasterMind.zip,
où les noms sont ceux des membres du binôme par ordre alphabétique.
L'extraction de cette archive devra créer un répertoire
de nom Nom1Nom2_RoboMasterMind pour contenir tous les éléments demandés ci-dessus.
Elle sera envoyée par mail aux enseignants de la matière,
avec dans le corps du message les noms et prénoms de chacun des membres du binôme.
Notation
- Cas de 0 sans aucune correction (Mort subite):
- projet non effectué en binôme (i.e. 2 personnes !) sans l'accord préalable de l'intervenant de TD
- projet envoyé après la date
- projet non envoyé à TOUS les chargés de TDs et le chargé de cours (AUX BONNES ADRESSES !)
- mail ne contenant pas les noms et prénoms de chacun des membres du binôme
- reception d'une archive qui n'a pas comme nom Nom1Nom2_RoboMasterMind.zip,
où les noms sont ceux des membres du binôme par ordre alphabétique
- fichier d'archives dont l'extraction ne produit pas un répertoire dont le nom est Nom1Nom2_RoboMasterMind
- fichier d'archive foireux (vérifiez le et mettez vous en copie du mail)
- l'absence de javadoc, ou javadoc pas en anglais
- Base de la notation:
- la notation ne dépendra pas que de l'aspect visuel du projet
- la propreté et la lisibilité du code auront un poids très important dans la note
- l'architecture que vous aurez définie (interfaces, classes abstraites, concretes ...) devra être donnée dans les documents
PDF et aura également un poids très important dans la note
- la réutilisabilité et donc la factorisation de votre code (e.g. peut-on facilement créer des nouveaux plateaux,
par exemple, sans tout refaire dans votre code)
- la présence de code inutile
- les différents rapports et, par conséquent, l'orthographe !
- la soutenance qui aura lieu début Janvier 2013
© Université de Marne-la-Vallée