x

Reproduction du jeu Splendor en Java

image présentation splendor

Ce projet était à la base un projet tutoré de fin de première année de DUT Informatique. Ce projet n'avait malheuresement pas abouti, et c'est donc plus tard, sur mon temps libre, que j'ai décidé de refaire entièrement le projet, en repartant de zéro.

Règles

Splendor est un jeu qui se joue à tour de rôle. À chaque tour, le joueur peut soit prendre des jetons (3 d'une couleur différente ou 2 de la même couleur), soit acheter une carte grâce à ses jetons.
Une fois une carte achetée, celle-ci donne au joueur un jeton permanent de la couleur de la carte, ce qui lui permettra d'acheter des cartes de plus en plus chères (mais qui donnent davantage de points). Le joueur qui gagne est le premier à atteindre 15 points.

Organisation du projet

Tout d'abord, comme le projet est tout de même assez important, il était essentiel de s'organiser, avec une arborescence de fichier claire.

arborescence du projet

J'ai pour cela séparé l'ensemble des fichiers avec des extensions .java de tout le reste (les fichiers de données, les images, et les fichiers compilés).

Diagramme UML du projet

J'ai choisi de créer mon projet en me basant sur un modèle MVC, pour bien séparer les différentes parties de mon application.

diagramme uml du projet

Initialisation d'une partie

Lorsque l'on exécute Splendor.exe, celui-ci va recompiler l'ensemble du projet, et lancer le fichier Controleur. Ce dernier va créer le plateau et les deux joueurs.
Après cela, le plateau va générer l'ensemble des cartes qui seront présentent sur le plateau grâce au fichier cartes.txt (qui contient sur chaque ligne l'ensemble des données nécessaires à la création d'un objet Carte).

class CreerCartes methodes class CreerCartes

Le contrôleur va également initier la création des cartes nobles, à l'aide d'une classe qui fonctionne approximativement comme la classe creerCartes (voir extrait de code ci-dessus).

Une fois tout cela terminé, les cartes et les nobles seront mélangés, et placés sur le plateau, pour arriver au résultat ci-dessous.

plateau du jeu

Fonctionnement d'un tour

À chaque tour, le joueur dont c'est le tour (fenêtre non bloquée), aura le choix entre plusieurs actions :

 - Prendre trois jetons, en cliquant sur trois jetons différents du plateau
 - Prendre deux jetons d'une même couleur (possible que s'il reste au moins 4 jetons de cette couleur sur le plateau)
 - Dépenser ses jetons pour acheter une carte
 - Réserver une carte, et piocher un jeton or

Fin d'un tour

Dès que le joueur "actif" termine son tour, la classe Plateau va appeler la méthode finirTour.
Celle-ci va tout d'abord regarder si le joueur a les cartes suffisantes pour pouvoir obtenir un noble. Cette méthode marche grâce à la récursivité. Cela me permet de ne gérer qu'une méthode (sans cela, j'aurais dû utiliser un tableau pour stocker des variables booléennes vérifiant si le joueur avait bien le nombre de cartes nécessaire, et de vérifier par la suite que toutes les valeurs du tableau était à true).
Puis, elle va regarder si le joueur possède le nombre de points suffisants pour gagner. Si ce n'est pas le cas, la partie met fin au tour du joueur, et donne la main au joueur suivant.

methode canGetNoble

Le dossier téléchargeable contient une ancienne version du jeu, où certaines fonctionnalités ne sont pas présentes et où certains bugs peuvent être présents.
Je travaille sur une version finale, qu'il sera possible de télécharger lorsqu'elle sera terminée.

Télécharger le projet