Le projet personnel encadré, était en fait surtout un projet de groupe à réaliser de a à z à l'aide d'une méthodologie proche du monde professionnel réel.
Stathammer
Le groupe a choisi de créer un calculateur pour le jeu sur table Warhammer qui oppose des armées consistuées de figurines. Le calculateur doit permettre aux joueurs de prédire l'issu probable des batailles et lui permet d'améliorer ses choix stratégiques.
Les calculs réalisés prennent en compte de nombreux paramètres:
- les caractéristiques des figurines, d'où la nécéssité d'une base de données relationnelle. Le mot relationnel prend ici tout son sens puisque notre BDD a été littéralement conçue pour être parcourue comme un arbre: un utilisateur possède des listes d'armées qui possède des unités composées de figurines qui possèdent des armes.
- les résultats de plusieurs jets de dés. Le hasard a une place importante dans le jeu, ainsi le calculateur va simuler des milliers de séries de lancés de dés de manière à lisser les résultats. L'application les affichera sous la forme d'une courbe de Gausse dans un histogramme.
- les choix de l'utilisateur: qui attaque qui, combien de figurines sont impliquées, quelle arme est utilisée. Proposer une expérience utilisateur correcte a donc nécéssité la création d'une interface utilisateur complexe.
Warhammer est aussi un jeu dont l'intérêt se situe dans la composition de son armée. Pour être fidèle à l'esprit du jeu, il nous fallait donner à l'utilisateur de l'application la possibilité de le faire au moyen d'une autre interface graphique et d'utiliser sa propre armée dans le simulateur. Nous avons donc créer un espace utilisateur permettant de conserver et retrouver ses compositions d'armées.
Contraintes imposées par les formateurs
Il nous a été imposé l'utilisation du langage Java et d'une base de données relationnelles MySQL. Mais surtout, nous avons dû créer deux versions de l'application: un client lourd utilisant la bibliothèque javaFX puis un site web avec java EE et le serveur Apache Tomcat.
Toutefois l'organisation du code avec le pattern MVC (modèle-vue-contrôleur) nous a grandement simplifié la tâche. Les classes "modèle" sont les mêmes dans les deux versions (à quelques lignes de code près), mais je peux en dire autant de toute l'algorithmie.
Les échanges entre vues et contrôleurs au clic dans l'UI créée avec javaFX sont les mêmes dans la version web: javascript envoie au serveur une requête AJAX et récupère une vue en HTML permettant de mettre à jour l'affichage.

