IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Question sur un rappel d’intitulé d'un jeu de carte.


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Question sur un rappel d’intitulé d'un jeu de carte.
    Bonsoir,

    Excusez moi de vous dérangez mais je suis en première année d'informatique et nous avons un projet à réaliser : une réalisation en java d'un jeu de whisy (jeu de carte dérivé du whist).
    En fait mon problème est le suivant, je dois générer un jeu de carte dans un tableau, jusque la tout va bien par contre on dois mélanger les cartes en effection un nombre prédéfini de permutation entre des cartes aléatoires mais j'ai peur de perdre l'information sur le contenu après la permutation. Alors si vous pouviez m'expliquer comment je pourrais faire pour stocker les informations (7 coeur, As pique , ....) ça me serait très utile.

    Cordialement

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Tu peux utiliser tout simplement un nombre unique qui correspond à une carte. Par exemple 1 => As coeur, 2 => 2 de coeur ... 13 => Roi de coeur, 14 => As de carreau, 15 => 2 de carreau...

    Sinon, tu peux aussi utiliser une classe avec valeur/famille.

    Je ne connais pas le whist mais ce sont les regles qui definiront quelle methode est la plus adaptée (cad les combinaisons gagnantes, ce qu'il faut faire à chaque tour...).

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Créez un classe "Carte" qui regroupe ces information (famille et valeur). Utiliser une valeur entière pour représenter une Carte, c'est contraire aux principes d'encapsulation objets, donc ne le faite pas.

    Pour le mélange, pour informations, si c'est permis dans l'exercice, il existe la méthode Arrays.shuffle() qui mélange correctement un tableau.

  4. #4
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Utiliser une valeur entière pour représenter une Carte, c'est contraire aux principes d'encapsulation objets, donc ne le faite pas.
    Ca m'avait bien arrangé pour trouver les combinaisons gagnantes d'un petit jeu en C que j'avais fait il y a quelques années Ca peut servir, meme si c'est pas le plus objet

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    À la limite si on est prêt à faire ça, on peut faire un enum à la place.

    Et si comme moi on a pas envie d'énumérer toutes les cartes, on peut faire une classe qui ressemble à un enum et qui sera super efficace dans un HashMap, un HashSet, et garde ses propriétés d'objets.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    la enum c'est un peu exagéré, j'ai pas trop voir des enum de 52 éléments de long. A ce rythme là, on aurait pu faire de la classe Byte un enum aussi . Maintenant je préfère l'enum de loin au int, il est propre, il est juste chiant à écrire

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le int aussi il faut les énumérer tous de toute façon, alors la différence, hein.

    Mais bon, c'était l'exemple extrême. Rien n'empêche de faire un truc semblable à Byte justement : tous les instancier, mais pas se faire chier à les énumérer. On énumère seulement les 4 couleurs et 13 valeurs, et on instancie chaque combinaison.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Merci
    Merci à vous trois, c'est vrai que mon idée première était d'attribuer un nombre à chaque carte mais pour gérer les cartes par la suite il est effectivement plus simple de crée une class.



    Bonne continuation
    Cordialement

    PS : Pour info, en première année on ne peut pas utiliser les bibliothèques java, déja quand j'utilise la méthode clone() je suis déja à la limite de la légalité

  9. #9
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par marc027 Voir le message
    Pour info, en première année on ne peut pas utiliser les bibliothèques java, déja quand j'utilise la méthode clone() je suis déja à la limite de la légalité
    Euh clone ca ne vient pas d'une librairie, c'est un membre herité de Object (comme equals ou toString). Si tu n'as pas le droit d'utiliser ca...

  10. #10
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Pourquoi ne pas faire le plus logique et le plus simple : utiliser une variable temporaire et permuter les cartes 2 à 2 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    pour chaque permutation faire
      indice1 <- nombre aléatoire
      indice2 <- nomber aléatoire /* vérifier qu'il soit différent du premier */
      temp <- liste[indice1]
      liste[indice1] = liste[indice2]
      liste[indice2] = temp
    fin pour

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Oui c'est ce que je vais faire après pour mélanger mes cartes mais il faut quand même que je génère les cartes avant de les placer dans un tableau et faire une structure c'est effectivement ce qui semble le plus adéquat.

  12. #12
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Ah pardon j'avais cru que le problème était par rapport aux permutations.
    Alors sinon oui, le plus simple est de faire une classe "carte" et d'utiliser une ArrayList (la plus "simple" des listes donc la plus optimale en complexité) pour stocker les éléments.
    L'avantage d'utiliser une liste et non un simple tableau de Carte[] est qu'il est possible d'utiliser des méthodes de recherches toutes faites (contains() par exemple). Bien entendu il faudra au préalable avoir correctement défini la méthode equals() de ta classe Carte.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Je vous tient au courant
    Bonjour,

    La moindre des choses était quand même de vous tenir au courant.

    J'ai réussi à faire la permutation selon le procéder très simple de permutation de deux cartes par deux cartes prises au hasard. Au début j'ai rencontré un problème de réservation mémoire qui me posait pas mal de soucis. La mémoire était écrasée à chaque tour ce qui empêchais de jouer une partie. Mais en modifiant l'algorithme j'ai pu m'en sortir.

    Au final, il n'est resté que quelques problèmes du genre, le joueur peut jouer deux fois la même carte (il n'y avait pas de contrôle sur le fait qu'il possédait encore la carte ou non) mais j'ai eu 19 donc aucune raison de me plaindre

    Merci à vous tous pour votre aide

    Bonne continuation

  14. #14
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Moi, ce que j'aurais fais déjà, c'est bien 32 enums correspondant à 32 cartes.

    Mais disons que tu pars sur un objet Carte finalement, qui devrait ressembler à ça :

    D'abord une enum pour les couleurs, y en a que 4...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public enum CouleurDeCarteEnum {
     
    	COEUR("Coeur"), PIQUE("Pique"), CARREAU("Carreau"), TREFLE("Trefle");
     
    	private final String label;
     
    	CouleurDeCarteEnum(String label) {
    		this.label = label;
    	}
     
    	public String getLabel() {
    		return label;
    	}
    }
    Ensuite une enum pour les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public enum ValeurDeCarteEnum {
     
    	SEPT("Sept", 7), HUIT("Huit", 8), NEUF("Neuf", 9), DIX("Dix", 10), VALET("Valet", 11), DAME("Dame", 12), ROI("Roi", 13), As("As", 14);
     
    	private final int valeur;
    	private final String label;
     
    	ValeurDeCarteEnum(String label, int valeur) {
    		this.label = label;
    		this.valeur = valeur;
    	}
     
    	public String getLabel() {
    		return label;
    	}
     
    	public int getValeur() {
    		return valeur;
    	}
     
    }
    Ensuite pour tes objets, on commence par une interface, c'est la moindre des choses...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public interface Carte {
     
    	CouleurDeCarteEnum getCouleur();
     
    	ValeurDeCarteEnum getValeur();
    }
    Et puis une implémentation de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class DefaultCarte implements Carte {
     
    	private CouleurDeCarteEnum couleur;
     
    	private ValeurDeCarteEnum valeur;
     
    	public DefaultCarte(CouleurDeCarteEnum couleur, ValeurDeCarteEnum valeur) {
    		this.couleur = couleur;
    		this.valeur = valeur;
    	}
     
    	public CouleurDeCarteEnum getCouleur() {
    		return couleur;
    	}
     
    	public ValeurDeCarteEnum getValeur() {
    		return valeur;
    	}
     
    	@Override
    	public String toString() {
    		return "Carte (" + valeur.getLabel() + " de " + couleur.getLabel() + ")";
    	}
    }
    Ensuite, je pense que le plus simple est d'abord de générer un jeu trié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public class Jeu {
     
    	public static void main(String[] args) {
    		final List<Carte> jeuTrie = new ArrayList<Carte>(32);
    		for (CouleurDeCarteEnum couleur : CouleurDeCarteEnum.values()) {
    			for (ValeurDeCarteEnum valeur : ValeurDeCarteEnum.values()) {
    				Carte carte = new DefaultCarte(couleur, valeur);
    				jeuTrie.add(carte);
    			}
    		}
     
    		for (Carte carte : jeuTrie) {
    			System.out.println(carte);
    		}
     
    	}
     
    }
    Ensuite, pour constituer ton jeu mélangé, tu peux piocher au hasard dans le jeu trié...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	public static void main(String[] args) {
    		...
     
    		System.out.println("*******************");
     
    		final List<Carte> jeuMelange = new ArrayList<Carte>(32);
     
    		final Random rand = new Random();
    		for(int i = 32; 0 < i; i--) {
    			final int position = rand.nextInt(i);
    			final Carte carte = jeuTrie.remove(position);
    			jeuMelange.add(carte);
    		}
     
    		for (Carte carte : jeuMelange) {
    			System.out.println(carte);
    		}
     
    	}
    Ca devrait te donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Carte (Sept de Coeur)
    Carte (Huit de Coeur)
    Carte (Neuf de Coeur)
    Carte (Dix de Coeur)
    Carte (Valet de Coeur)
    Carte (Dame de Coeur)
    Carte (Roi de Coeur)
    Carte (As de Coeur)
    Carte (Sept de Pique)
    Carte (Huit de Pique)
    Carte (Neuf de Pique)
    Carte (Dix de Pique)
    Carte (Valet de Pique)
    Carte (Dame de Pique)
    Carte (Roi de Pique)
    Carte (As de Pique)
    Carte (Sept de Carreau)
    Carte (Huit de Carreau)
    Carte (Neuf de Carreau)
    Carte (Dix de Carreau)
    Carte (Valet de Carreau)
    Carte (Dame de Carreau)
    Carte (Roi de Carreau)
    Carte (As de Carreau)
    Carte (Sept de Trefle)
    Carte (Huit de Trefle)
    Carte (Neuf de Trefle)
    Carte (Dix de Trefle)
    Carte (Valet de Trefle)
    Carte (Dame de Trefle)
    Carte (Roi de Trefle)
    Carte (As de Trefle)
    *******************
    Carte (Sept de Trefle)
    Carte (Dame de Trefle)
    Carte (Dame de Carreau)
    Carte (Sept de Carreau)
    Carte (Dix de Pique)
    Carte (Neuf de Carreau)
    Carte (Dix de Coeur)
    Carte (Huit de Coeur)
    Carte (Neuf de Trefle)
    Carte (Huit de Pique)
    Carte (Dix de Trefle)
    Carte (As de Coeur)
    Carte (Sept de Coeur)
    Carte (Roi de Pique)
    Carte (As de Pique)
    Carte (Dame de Coeur)
    Carte (Neuf de Coeur)
    Carte (Sept de Pique)
    Carte (Roi de Trefle)
    Carte (Valet de Pique)
    Carte (Dix de Carreau)
    Carte (Neuf de Pique)
    Carte (Huit de Carreau)
    Carte (As de Trefle)
    Carte (As de Carreau)
    Carte (Roi de Carreau)
    Carte (Valet de Trefle)
    Carte (Valet de Coeur)
    Carte (Huit de Trefle)
    Carte (Dame de Pique)
    Carte (Valet de Carreau)
    Carte (Roi de Coeur)
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Questions sur l'aspect réseau d'un jeu en ligne
    Par geteo dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 25/01/2014, 11h04
  2. Question sur le jeu du Taquin
    Par DevloNewb' dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 23/02/2010, 10h55
  3. Jeu d'instructions et petites questions sur l'asm
    Par SimpleMe dans le forum Assembleur
    Réponses: 6
    Dernier message: 16/03/2007, 18h42
  4. [2D] Questions sur le jeu Slayers Online
    Par Extra-Nitro dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 04/02/2006, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo