TD 5 - Jeux de cartes

cartes

Introduction

Les jeux de cartes traditionnel comprend les cartes suivantes: L'objectif que nous nous fixons est de définir des classes pour permettre de représenter des jeux de cartes. La class Carte sera définie comme suit:
enum COULEUR {COEUR, CARREAU, PIQUE, TREFLE};

public class Carte{
    // Variables de class

    static public final String[] NOMS_COULEURS = {"Coeur", "Carreau", "Pique", "Trefle"};

    static public final String[] NOMS_RANGS = {"Joker", "As", "2", "3", "4",
                     "5", "6", "7", "8", "9", "10", "Valet", "Dame", "Roi"};

    // Variables d'instance
    private final COULEUR couleur;
    private final int     rang;
    private final int     force;
    
    // Partie méthodes
}

Dans ce code, les variable de classe (attachées à la classe) se distinguent par l'usage du mot réservé static. Elles sont utilisées ici pour définir des constantes utiles dans les jeux de cartes. Les tableaux NOMS_COULEURS et NOMS_RANGS serviront à former des chaînes de caratères destinées à l'affichage de cartes. Contrairement aux variables d'instances (relative à un objet), elles sont utilisables en référant à la classe où elles sont définies.

Les énumérations de Java (type enum) permettent de définir des constantes littérales qui pourront être utilisés dans les programmes. Par exemple, le type enum COULEUR définit les littéraux COEUR, CARREAU, PIQUE, TREFLE qui serviront à coder les couleurs des cartes.

Les variable d'instance (attachées à l'objet this ) permettent de définir une carte par sa couleur, son rang et sa force. Le rang suit l'ordre du tableau NOMS_RANGS.

Le rang des cartes suit l'ordre du tableau NOMS_RANGS. La force représente la valeur relative d'une carte par rapport aux autres. Une carte l'emporte sur une autre si et seulement si elle est plus forte. Les force doivent être définies en fonction des jeux. Elles permettent de définir un ordre particulier pour un jeu (par exemple, l'As peut avoir une force supérieure au Roi dans certains jeux). Par défaut, la force est égale au rang.

Comme toutes les données qui définissent une carte sont supposées constantes au cours du jeu, les variables d'instances sont déclarées final et doivent être initialisées dans les constructeurs.

Les cartes

Nous allons compléter les méthodes dans la classe Carte
  1. Compléter des constructeurs de la classe. Le premier constructeur prend en argument la couleur et le rang de la carte, tant dis que le deuxième prend en argument la couleur, le rang et la force de la carte.
        public Carte (COULEUR couleur, int rang)
        public Carte (COULEUR couleur, int rang, int force)
  2. Compléter des méthodes retournant la couleur, le rang et la force de la carte.
        public COULEUR getCouleur ()
        public int getRang ()
        public int getForce ()
  3. Compléter des méthodes retournant le nom de la couleur (selon le tableau NOMS_COULEURS) et le nom du rang de la carte (selon le tableau NOMS_RANGS). Par exemple, le nom du rang 0 est "Joker", le nom du rang 2 est "2" et celui du rang 13 est "Roi". Ensuite, compléter la méthode retournant le nom complet associé à la carte (ex, "Dame de Coeur", "10 de Trefle").
        public String getNomCouleur ()
        public String getNomRang ()
        public String getNomComplet ()
Vous pouvez tester par le fichier TestCarte.java. Le résultat affiché à l'écran doit être comme suit
9 de Coeur
Dame de Carreau
Joker
10 de Trefle

Construction des jeux de cartes

Pour jouer aux cartes, nous aurons besoin d'une classe qui gère un jeu de cartes. La classe JeuCartes sera définie comme suit:
import java.util.ArrayList;

public class JeuCartes{
    // Variable d'instance: un tableau des cartes
   private ArrayList jeu;

    // Partie méthodes
}
Pour utiliser la classe pré-définie ArrayList avec ses méthodes, nous avons importé le paquetage ArrayList de Java API. Maintenant, nous allons construire cette classe afin de joueur aux jeux de cartes.
  1. Compléter le constructeurs de la classe qui instance un jeu de cartes vide.
        private JeuCartes()
  2. Compléter la méthode ci-dessous qui prend une carte en argument et ajoute au jeu. La méthode retourne toujours un booléen true. Il faut utiliser la méthode add de la classe ArrayList dont la spécification est précisée ici.
        private boolean addCarte (Carte c)
  3. Compléter la méthode ci-dessous qui ajoute toutes les cartes du rang rangDebut au rang rangFin et de couleur couleur. le rang et la force de la carte.
        private void addAllCartes(int rangDebut, int rangFin, COULEUR couleur)
  4. Compléter la méthode ci-dessous qui retourne une représentation textuelle du jeu de cartes, c'est à dire une chaîne de caractères contenant les noms de toutes les cartes du jeu. Pour implémenter cela, la méthode getNomComplet() dans la class Carte serait utilisée.
        public String jeuToStringComplet()
  5. Compléter la méthode ci-dessous qui prend en argument un booléen indiquant si la force de l'As doit être supérieure à toutes les autres cartes (soit une force de 14), sinon sa force est la plus petite (soit 1). La méthode retourne un jeu de 52 cartes.
        static public JeuCartes createJeuCartes(boolean forceAS)
Vous pouvez tester par le fichier TestJeuCartes.java. Le résultat affiché à l'écran doit être comme suit
Jeu de 52 cartes : [As de Pique, 2 de Pique, 3 de Pique, 4 de Pique, 5 de Pique, 6 de Pique, 
7 de Pique, 8 de Pique, 9 de Pique, 10 de Pique, Valet de Pique, Dame de Pique, Roi de Pique, 
As de Coeur, 2 de Coeur, 3 de Coeur, 4 de Coeur, 5 de Coeur, 6 de Coeur, 7 de Coeur, 
8 de Coeur, 9 de Coeur, 10 de Coeur, Valet de Coeur, Dame de Coeur, Roi de Coeur, 
As de Carreau, 2 de Carreau, 3 de Carreau, 4 de Carreau, 5 de Carreau, 6 de Carreau, 7 de Carreau, 
8 de Carreau, 9 de Carreau, 10 de Carreau, Valet de Carreau, Dame de Carreau, Roi de Carreau, 
As de Trefle, 2 de Trefle, 3 de Trefle, 4 de Trefle, 5 de Trefle, 6 de Trefle, 7 de Trefle, 
8 de Trefle, 9 de Trefle, 10 de Trefle, Valet de Trefle, Dame de Trefle, Roi de Trefle]

Pour ce qui veulent aller plus loin: Jouer les jeux de cartes

  1. Pour jouer aux cartes, il nous faut une méthode pour la mélange des cartes. Ecrire une méthode mélangant les cartes de façons aléatoire. L'instruction suivante int n = (int) (Math.random() * MAX); fournit une valeur aléatoire entière comprise entre 0 et (MAX-1).
        public void melangeJeu()
  2. Ensuite, il nous faut une méthode pour insérer une carte au début de talon, qui est la position 0. Compléter cette méthode.
        public void insererCarteTalon (Carte c)
  3. Ecrire une méthode qui retourne la carte du dessus du jeu, c'est à dire la carte à la dernière position du talon. La méthode prend en argument un booléen indiquant s'il faut extraire cette carte du talon ou non.
        public Carte getUneCarteTalon (boolean extrait)
  4. Ecrire une méthode qui prend en argument un entier indiquant le nombre de cartes demandées et un booléen indiquant s'il faut extraire les cartes du talon. La méthode retourne un tableau des cartes du talon dans l'ordre inverse (complétées par des éléments nuls si le talon n'a pas assez de carte) Le tableau a la taille égale au nombre de cartes demandées.
        public Carte[] getCartesTalon (int nbCartesm booleqn extrait)
  5. Finalement, nous terminons par une méthode vérifiant s'il y a encore de carte dans un jeu.
        public boolean estVide()
  6. Ecrire des méthodes pour tester vos implémentations.



Dernière mise à jour : 27/03/2013

Pour tout commentaire : thang [arobase] ibisc [point] fr