Un jeu de cartes stratégique développé numériquement dans le cadre du projet LO02
Caractéristiques • Installation • Utilisation • Architecture • Règles du Jeu
- À Propos
- Caractéristiques
- Prérequis
- Installation
- Utilisation
- Règles du Jeu
- Architecture
- Patterns de Conception
- Contributeurs
Jest est un jeu de cartes stratégique développé en Java dans le cadre du projet LO02. Le jeu oppose 3 ou 4 joueurs (humains ou virtuels) dans une bataille tactique où chaque carte a une valeur qui dépend de règles complexes et interdépendantes.
Le projet met en œuvre plusieurs concepts avancés de programmation orientée objet :
- Héritage et polymorphisme
- Patterns de conception (Visitor, Strategy)
- Sérialisation et persistance
- Architecture modulaire et extensible
- Interface graphique (Swing)
- 3-4 joueurs : Parties multijoueurs avec joueurs humains et virtuels
- Système de points dynamique : 5 règles qui modifient la valeur des cartes
- Cartes trophées : Objectifs variés à accomplir pour gagner
- Stratégies joueurs virtuels : Deux niveaux de difficulté (Random et Intelligent)
- Sauvegarde/Chargement : Reprenez vos parties à tout moment
- Interface console : Interaction claire et intuitive
- Interface graphique : Swing avec pattern MVC
- Architecture modulaire : Ajout facile de nouvelles règles et stratégies
- Jeux personnalisables : Mode "MINI" (9 cartes) et "Classique" (17 cartes), ainsi que 4 autres différents jeux possibles!
- 17 cartes : 4 couleurs (
♠️ Pique,♣️ Trèfle,♦️ Carreau,♥️ Cœur) × 4 valeurs (1-4) + 1 Jocker - 5 règles de score : Cœur, Carreau, As, Double Noir, Jocker
- Conditions de victoire variées : Score maximum, plus de cartes d'une valeur, min/max d'une couleur
| Composant | Version minimale |
|---|---|
| Java JDK | 11+ |
| Maven | 3.6+ |
| OS | Windows/Linux/macOS |
git clone https://github.com/Bleumms/Game-Jest-in-Java-LO02-Project-.git
cd Game-Jest-in-Java-LO02-Project-mvn clean installmvn javadoc:javadoc
# La documentation sera dans target/site/apidocs/mvn exec:java -Dexec.mainClass="Jest.Vue.MenuPrincipal"Ou avec Java directement :
java -cp target/classes Jest.Vue.MenuPrincipal- Choix du mode : Nouvelle partie ou reprendre une sauvegarde
- Configuration :
- Sélection du jeu (variantes disponibles)
- Ajout ou non d'extention au jeu
- Nombre de joueurs (3 ou 4)
- Type de joueurs (Réel ou Virtuel + stratégie)
- Phase de jeu :
- Distribution de 2 cartes par joueur
- Chaque joueur choisit une carte visible et une cachée
- Tour par tour, les joueurs volent des cartes aux autres
- Le joueur avec la carte visible la plus haute joue en premier
- La carte récupéré est ajouté à la collection du joueur
- Les cartes non prises retournent à la pioche
- Un nouveau tour commence jusqu'à épuisement de la pioche
- Fin de partie :
- Attribution des trophées selon leurs conditions
- Calcul des scores finaux
- Annonce du vainqueur
Chaque carte a une valeur égale à son numéro.
- Sans Jocker : Les Cœurs valent 0 point
- Avec Jocker (pas tous les Cœurs) : Les Cœurs valent leur valeur négative
- Avec Jocker + tous les Cœurs : Les Cœurs valent leur valeur positive
- Tous les Carreaux valent leur valeur négative
- As seul de sa couleur : Vaut 5× sa valeur (soit 5 points)
- As avec d'autres cartes de sa couleur : Vaut 1 point
- Si vous avez un Pique ET un Trèfle du même numéro : +1 bonus pour chaque carte
- Sans Cœur : Le Jocker vaut 4 points
- Avec au moins un Cœur : Le Jocker vaut 0 point
Exemples de conditions :
- Joueur avec le score maximum (avec/sans Jocker)
- Joueur avec le plus de cartes d'une valeur donnée
- Joueur avec la carte la plus haute/basse d'une couleur
- Joueur possédant le Jocker
src/Jest/
├── 📁 Model/
│ ├── Carte.java
│ ├── CarteClassique.java
│ ├── Jocker.java
│ │
│ ├── Joueur.java
│ ├── JoueurPhysique.java
│ ├── JoueurVirtuel.java
│ │
│ ├── Strategie.java
│ ├── StrategieRandom.java
│ ├── StrategieIntelligent.java
│ │
│ ├── Regle.java
│ ├── RegleCoeur.java
│ ├── RegleCarreau.java
│ ├── RegleAs.java
│ ├── RegleDoubleNoir.java
│ ├── RegleJocker.java
│ │
│ ├── ConditionVictoire.java
│ ├── ConditionMaxScore.java
│ ├── ConditionMaxMinSymbole.java
│ ├── ConditonPlusCarteValeur.java
│ ├── ConditionJocker.java
│ │
│ ├── Jeu.java
│ ├── Partie.java
│ ├── Reference.java
│ ├── CalculateurScore.java
│ ├── ValeurParCarte.java
│ ├── Menu.java
│ │
│ ├── Visitor.java
│ ├── Visitable.java
│ │
│ ├── Symbole.java
│ ├── EtatJoueur.java
│ ├── EtatPartie.java
│ └── EtatMenu.java
│
├── 📁 Vue/
│ ├── MenuPrincipal.java
│ ├── MenuCreerPartie.java
│ ├── MenuAjoutJoueurs.java
│ ├── TestPartie.java
│ ├── FaireUneOffre.java
│ └── AffichageTour.java
│
└── 📁 Controler/
├── MenuDebutControler.java
├── MenuCreerControler.java
├── MenuJoueursControler.java
├── PartieControler.java
├── JoueurControler.java
└── ChoisiCarteControler.java
┌─────────────┐
│ Partie │
├─────────────┤
│ - joueurs │◇────────┐
│ - jeu │ │
│ - trophe │ │
└─────────────┘ │
│
┌───────────────┴───────────┐
│ │
┌───▼────┐ ┌──────▼──────┐
│ Jeu │ │ Joueur │
├────────┤ ├─────────────┤
│-cartes │ │-collection │
│-ref │───────┐ │-score │
└────────┘ │ └──────┬──────┘
│ │
┌──────▼──────┐ │
│ Reference │ ┌───▼────────────┐
├─────────────┤ │ │
│ -regles[] │ │ ┌──────────┐ │
└─────────────┘ │ │Physique │ │
│ └──────────┘ │
│ ┌──────────┐ │
│ │ Virtuel │ │
│ │+strategie│ │
│ └──────────┘ │
└────────────────┘
┌─────────────────────────────────────────────┐ │ VUE │ │ (MenuPrincipal, TestPartie, FaireUneOffre) │ │ Observer Pattern │ └──────────────────┬──────────────────────────┘ │ update() │ ┌────────────▼───────────────┐ │ CONTRÔLEUR │ │ (ActionListener) │ │ MenuControler │ │ PartieControler │ │ JoueurControler │ └────────────┬───────────────┘ │ commandes │ ┌────────────▼───────────────┐ │ MODÈLE │ │ (Observable) │ │ Partie, Menu, Joueur │ │ Jeu, Carte, Regle │ └────────────────────────────┘
Pour le calcul des scores
// CalculateurScore visite chaque joueur
public class CalculateurScore implements Visitor {
public void visit(Joueur player) {
int score = calculScore(player.getCollection());
player.setScore(score);
}
}Avantages :
- ✅ Séparation des responsabilités
- ✅ Facile d'ajouter de nouveaux visiteurs
- ✅ Pas de modification des classes Joueur
Pour les Joueurs Virtuels
public interface Strategie {
int executeFaireUneOffre(...);
List<Integer> executeChoisirUneCarte(...);
}Implémentations :
StrategieRandom: Choix aléatoiresStrategieIntelligent: Analyse des cartes et priorités
Avantages :
- ✅ Changement de stratégie à la volée
- ✅ Ajout facile de nouvelles Stratégies
- ✅ Code des joueurs simplifié
Communication Vue-Modèle
public class Partie extends Observable {
public void distribuer() {
// ... logique ...
this.setChanged();
this.notifyObservers();
}
}
public class TestPartie implements Observer {
public void update(Observable o, Object arg) {
if (o instanceof Partie) {
// Mettre à jour l'affichage
}
}
}
Architecture de l'application
- Modèle : Classes métier (Partie, Joueur, Carte...)
- Vue : Interfaces Swing (TestPartie, MenuPrincipal...)
- Contrôleur : Gestionnaires d'événements (PartieControler...)
Avantages :
- ✅ Séparation des responsabilités
- ✅ Vue interchangeable (Swing → JavaFX)
- ✅ Testabilité du modèle
# Exécuter les tests unitaires
mvn test
# Générer un rapport de couverture
mvn jacoco:reportLa Javadoc complète est disponible après génération :
mvn javadoc:javadoc
open target/site/apidocs/index.html|
Nina & Emeline Développeuses principales |
- Mode en ligne multijoueur
- Statistiques et historique des parties
- Système de classement
- Mode tournoi
⭐ N'oubliez pas de mettre une étoile si vous avez aimé le projet ! ⭐