diff --git a/README.md b/README.md index 8da70e8ffae0c57cb7bdf9ba6a3e89f105c79cdc..3642d3f59934f3ddaf29d3c04777e613c3e1c997 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,21 @@ # OOP Project 2023 <!--toc:start--> -- [OOP Project 2023](#oop-project-2023) - - [Compiling](#compiling) - - [Executing](#executing) - - [Part 1 --- 03/11/2023](#part-1-03112023) - - [Indication](#indication) - - [Part 2 --- 10/12/2023](#part-2-10122023) +- [Compiling](#compiling) +- [Executing](#executing) + - [Console App](#console-app) + - [JavaFX](#javafx) +- [Part 1 --- 03/11/2023](#part-1-03112023) + - [Indication](#indication) +- [Part 2 --- 10/12/2023](#part-2-10122023) +- [Part 3 --- 02/02/2024](#part-3-02022024) + - [Remarques importantes](#remarques-importantes) + - [Exécution de l'étape 3](#exécution-de-létape-3) + - [Tests unitaires avec JUnit 5](#tests-unitaires-avec-junit-5) + - [Amélioration de l'IA ainsi que la persistance des données](#amélioration-de-lia-ainsi-que-la-persistance-des-données) + - [Aperçu de JavaFX](#aperçu-de-javafx) <!--toc:end--> - - ## Compiling ```bash @@ -19,10 +24,18 @@ mvn compile ## Executing +### Console App + ```bash mvn exec:java ``` +### JavaFX + +```bash +mvn javafx:run +``` + ## Part 1 --- 03/11/2023 ### Indication @@ -38,13 +51,69 @@ puis son contenu a été mergé dans `master`. ## Part 3 --- 02/02/2024 -### Running JUnit tests +Le développement de la troisième partie a été effectué sur la branche +`2-part-3-ai-javafx-csv-junit` (["issue" associée à la partie 3](https://gitedu.hesge.ch/isc2/oop/project/-/issues/2)) +puis son contenu a été mergé dans `master`. + +### Remarques importantes + +Les points demandés étaient les suivants : +- Implémentation d'une IA plus sophistiquée. + - Modification nécessaire lors de la création d'un jeu (`GameManager`) car nous + devons respecter la quantité maximale de 7 joueurs, cependant il doit être + possible de créer à chaque fois 1 ou 2 IA basique et sophistiquée. +- Tests unitaires avec `JUnit` sur une des classes en particulier. Personnellement +j'ai testé en profondeur la classe `Carte`, mais j'ai aussi rajouté quelques +tests pour les classes `Deck` et `GameManager` ce qui est amplement suffisant +pour la démonstration de la bonne fonctionnalité du jeu. En ce qui concerne la +gestion des exceptions, la grande majorité d'entre elles sont de types `RuntimeException`, +cependant si elles sont atteintes, c'est qu'il y a réellement eu un énorme soucis. +Autrement, lors de la construction du `GameManager`, je traite certaines des +erreurs avec des `IllegalArgumentException` et dans le cas de la sauvegarde du +jeu, j'utilise des `IOException`. +- En ce qui concerne la persistance des données, mon approche fut la suivante : + - Le nombre de parties disponibles dépend du nombre de paquets de cartes + renseignés au tout début du jeu. + - À la fin d'un jeu une sauvegarde automatique est faite. Si par exemple, + en ayant créer 3 paquets de cartes et qu'à la fin du premier jeu, nous répondons + **non** à la question _"Voulez-vous recommencer une partie"_, alors un + répertoire `gameBackups/` se créera à la racine du projet avec un fichier portant + l'extension `.ser` qui contiendra la sauvegarde actuelle du jeu. + - Finalement, pour avoir à nouveau accès à la sauvegarde, il suffit de relancer + le programme et répondre **oui** à la question _"Voulez-vous charger une sauvegarde + de jeu existante"_. Si le nombre de paquets de cartes disponibles dans la sauvegarde + est supérieur à 0 et si le programme arrive à trouver le fichier `.ser`, alors + le jeu reprendra au moment où il a été arrêté. À ce moment-là, les mains précédentes + des joueurs humains seront affichées et il faudra renseigner les nouvelles mises. +- Finalement pour la partie `JavaFX`, je me suis débrouillé à tout installer et +faire fonctionner toutes les dépedances nécessaires, cependant la représentation +"architecturale" du projet à l'état où il se trouve actuellement est en **désaccord +total** avec le principe **MVVM** proné pour le développement de GUI. J'ai créer +quelques fenêtres, notamment le formulaire du début de jeu, cependant le reste +n'est pas réalisable suite au fait qu'il soit nécessaire de _"refactoriser"_ (en +bon français) _**toute l'application**_ afin de se débarasser du couplage inhérent +des applications console orientée-objet qui entremêlent la _"business logic"_ et +la _"vue"_ (`stdout`). + +### Exécution de l'étape 3 + +#### Tests unitaires avec JUnit 5 ```bash mvn test ``` -### Running JavaFX app +#### Amélioration de l'IA ainsi que la persistance des données + +Ces points peuvent être testés à travers la mise à jour du programme sur la +console. Il peut être exécuté comme avant avec la commande suivante : + +```bash +mvn compile +mvn exec:java +``` + +#### Aperçu de JavaFX ```bash mvn compile