Paul Jusot

Portfolio développeur

Cahier des charges

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.

Méthode AGILE

C'est une méthode de travail de groupe souvent utilisée dans le développement. Elle est souple: les objectifs donnés à chaque personne sont susceptibles d'être modifiés au milieu de leur réalisation. Un bonne communication est donc de rigueur.

Des "sprints" sont mis en place. Chaque personne se voit attribué, ou choisit elle-même, un objectif à atteindre au terme d'une période d'une ou quelques semaines.

Si une personne atteint son objectif avant la fin du délai, elle peut passer à autre chose ou aider les autres. Si une personne met plus de temps, c'est sans doute que l'objectif fixé était trop lointain. À moins la raison ne soit toute autre (raison technique, bug...), la communication permet des ajustements immédiats évitant les pertes de temps et les frustrations.

Tout le monde est en quelques sorte un manager de l'équipe. Non pas parce que c'est agréable pour les travailleurs, mais parce que c'est efficace.

GIT

Le célèbre logiciel de gestion de versions joue un rôle central dans le travail d'équipe puisqu'il permet à plusieurs personnes de travailler simultanément sur le même code et de gérer les problèmes que cela peut poser.

Lorsque deux personnes modifie les mêmes lignes de codes, GIT empêche la mise en commun de leur travail pour prévenir les risques de casser le code et dispenser les développeurs de devoir perdre du temps à rechercher la raisons d'erreurs qui ne devraient pas exister.

Réalisation

Étapes du développement

J'ai relevé trois périodes dans la réalisation du PPE.

Préparation

J'ai été étonné de la longueur de cette étape qui n'avait rien de facile, je crois qu'elle a duré un mois!

Je ne suis pas joueur de Warhammer, ce qui me permettait de prendre pas mal de recul et de poser des questions pas si inutiles aux connaisseurs du jeu. Le but était de déterminer précisément les contours de l'application, ce qu'elle fera et ce qu'elle ne fera pas.

Par exemple: est-ce qu'il ne faudrait pas séparer la base de données en deux parties? L'une contenant toutes les données du jeu et utilisées uniquement en lecture, et l'autre contenant uniquement les éléments du jeu présents dans les listes d'armée des joueurs?

Nous avons utilisé plusieurs outils lors de cette étape.

  • le site web Trello pour y rédiger les "use case", puis une "to-do-list", puis les "sprints" (n'a t'on pas de mots français pour tout ça?)
  • Looping pour créer le modèle conceptuel de données.
  • le site Wireframe qui propose un outil rapide à maitriser permettant de créer une interface graphique.
  • Umlet pour créer le diagramme de classes UML

Et toujours pas une ligne de code...

Création du client lourd

Étape la plus longue. Nous avons mis en place le pattern MVC et codé "orienté objet".

Nous avons aussi largement utilisé le pattern Composite, sans savoir qu'il avait un nom. En effet, les classes du modèle comportent pour la plupart une liste "children" dont les éléments sont des instances de la classe suivante dans l'arbre. Des méthodes comme "add", "remove", "getChild" y sont reliées.
https://refactoring.guru/fr/design-patterns/composite

Note: les classes de javaFX et le DOM d'une page web utilisent également cette structure.

Création du client web

Cette étape a été très rapide, le date de rendu et les examens approchant de plus en plus.

Les aspects formels ont disparu. Plus de "sprint", plus de Trello et assez peu de communication. Chacun savait ce qu'il avait à faire.

Conception des vues avec Wireframe

Ce travail préparatoire s'est avéré être un gain de temps précieux lors de la création réelle des vues avec javaFX puis en HTML/CSS.

Le wireframe ci-dessous correspond à la vue "simulation" dans laquelle l'utilisateur peut afficher un histogramme montrant les dégats qu'infligera probablement l'unité attaquante sélectionnée à une autre unité appartenant à son adversaire en fonction de différents paramètres.

Déploiement d'une application java

Création d'un exécutable

Export du "stathammer.jar" avec eclipse

  1. Aller dans File => Export => Runnable JAR file
  2. Choisir la bonne classe Main et nommer le fichier de destination.
  3. Choisir Package required libraries into generated JAR
  4. Problème numéro 1: la version de java installée sur le système n'est pas la même que celle embarquée dans l'IDE
  5. Problème numéro 2: L'application ne trouve pas JavaFX

JavaFX est bien embarqué dans le fichier .jar, mais l'application ne semble pas le trouver. J'ai pu démarrer l'application avec cette commande:
java --module-path C:\Users\greta\CODE\eclipse-java\javafx-sdk-21.0.6\lib --add-modules javafx.controls,javafx.fxml -jar stathammer.jar

Création du stathammer.exe avec launch4j

Launch4j ne fonctionne pas avec openjdk22 que j'ai remplacé par le jdk21 trouvable sur le site d'Oracle.

Application web avec Tomcat