MZ: Note 14/20 au groupe. La note de l'exo du DST ne sera prise en compte que si elle est supérieure donc cette note ne peut pas baisser.
Dans ce projet où il fallait réaliser un jeu de Hex, plusieurs problèmes ont été vus (et n'ont pas eu le temps d'être résolus).Nous avons représentés le plateau de jeu par un tableau à double dimension.
Afin de savoir si une partie est finie ou non, nous devons chercher s'il existe un chemin entre le haut et le bas de cette matrice, ou entre la gauche et la droite.
Pour gérer cette fin de partie, avec la structure utilisée, nous n'avons pas trouvé d'autres solutions que de stocker les cases visitées dans un tableau, puis d'effectuer des récursions sur les 6 cases adjacentes. Cette méthode est très couteuse en complexité. L'idéal aurait été d'utiliser une autre structure de données pour représenter le plateau, en occurrence un disjoint-set.
Au niveau de l'IHM, si le premier joueur gagne, le deuxième joueur pourra jouer encore un coup avant l'arrêt de la partie et la victoire du joueur 1 (la vérification de fin de partie se fait à la fin d'un tour, après donc les coups des 2 joueurs).
Les joueurs ne peuvent rentrer qu'un nom d'utilisateur à un seul mot.
![Image](https://cdn.discordapp.com/attachments/1013867187376750663/1057494703249035274/IMG_1575.png)
- PionTest, teste l'attribution des valeurs de l'enum Pion.
- PlateauTest, teste les méthodes pour savoir la taille du plateau, pour jouer une case, ou si une case est vide.
- CheminTest, prends un plateau de jeu déjà rempli, vérifie les méthodes aCheminHB() (de haut en bas) et aCheminGD() (de gauche à droite).
- AleatoireTest, teste si le coup joué au hasard est une case à un emplacement valide.
La règle de début de partie, où le deuxième joueur peut prendre le coup joué par le premier joueur, n'a pas été adaptée.
Si le joueur joue contre une machine, celle-ci jouera une case aléatoirement.
Une autre approche intéressante aurait été d'utiliser la méthode de Monté-Carlo, c'est-à-dire de simuler des milliers de parties de Hex
et d'utiliser des algorithmes probabilistes afin de déterminer le meilleur coup à jouer selon chaque situation.
Ce projet était très formateur, il nous a surtout aidé pour apprendre et maitriser les principes SOLID.
L'utilisation d'un Disjoint-set est sans doute la notion la plus intéressante à approfondir, bien qu'il serait idéal d'implémenter
toutes les fonctions du projet non finies abordées dans la première partie de ce rapport.