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

C Discussion :

debutant jeu de cartes


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut debutant jeu de cartes
    Bonjour
    je cherche la technique la plus rapide pour tirer les 52 cartes à la suite d'un jeu de cartes;comme je le dis je débute et j'ai trouvé plusieurs techniques mais 1 peu trop lente à mon gout
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par raiden02
    je cherche la technique la plus rapide pour tirer les 52 cartes à la suite d'un jeu de cartes;comme je le dis je débute et j'ai trouvé plusieurs techniques mais 1 peu trop lente à mon gout
    qsort()

  3. #3
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    qsort()
    le monsieur veux tirer les cartes ... pas les trier. ou alors j'ai mal compris

    j'ai eu a le faire ... et la technique que j'ai utilisé etait assez rustique ... mais fonctionne sans trop de problemes.

    tu fait un tableau de 52 elements, chaque element represente une carte, et la valeur de l'element represente un ID de joueur.

    int jcartes[52] = {0};

    tu tire un nombre aleatoire (voir la FAQ) et tu attribue la carte au joueur auquel tu est en train de distribuer si cette carte n'as pas ete deja distribué.

    aleat = getrandnbr(0,51);
    if(jcartes[aleat] == 0)
    {
    jcartes[aleat] = player[0].id;
    player[0].nbcartes++;
    }

    ensuite, tu continue jusqu'a ce que ton joueur ait le nombre necessaire de cartes... ensuite tu passe au joueur suivant.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Dark_Ebola
    le monsieur veux tirer les cartes ... pas les trier.
    Papy se fait vieux, faut parler plus fort !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut
    Oui c'est ce a quoi j'avais pensé mais le probleme c'est que pour les dernières cartes du tas quand je tire un nombre aleatoirement il y a beaucoup de chances pour que cesoit 1 carte deja tiré et la boucle peut durer longtemps surtout avec un truc pas tres puissant(ce que j'ai bien evidemment) et donc je cherche comment passer outre cette attente

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Tu génères une permutation aléatoire (tu pars d'un tableau et tu échanges chaque élément du tableau avec un des suivants tiré au hasard) et ensuite tu distribues le paquet ainsi consitué. C'est plus un problème d'algo d'ailleurs.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Un truc en temps invariable que j'aime bien pour battre les cartes:
    • Un tableau de 52 cartes
    • Un tableau de 52 valeurs

    1. Remplir le tableau de valeurs aléatoires (directement sorties de rand() par exemple)
    2. Trier les deux tableaux selon celui qui est aléatoire
    3. servir chaud.

    Complexité: O(n) puis complexité du tri.

    Enfin, j'avais fait ça sur une API qui proposait directement une fonction de tri simultané de plusieurs listes selon une seule. En C, il serait plus simple de trier des structures { carte, valeur aléatoire } selon la valeur...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par raiden02
    Oui c'est ce a quoi j'avais pensé mais le probleme c'est que pour les dernières cartes du tas ....
    c'est plus la peine de continuer a distribuer pour le dernier joueur
    si t'as 4 joueurs, tu distribue pour 3 joueurs, et les 13 cartes restantes vont au 4ieme.

    en utilisant rand proprement (voir la FAQ), j'avais pas plus d'une 100 aines (en moyenne) de tirages supplementaires pour tout distribuer.

    sinon j'aime bien la solution a Medinoc ... c'est presque elegant.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Pour accélérer le tirage, ne serait-il pas intéressant de travailler avec une liste circulaire contenant les cartes non tirées???

    En maintenant le nombre de carte restantes dans une variable (histoire de l'utiliser comme diviseur pour un modulo, et donc gagner en temps de parcour de la liste), et en supprimant la carte de la liste à chaque fois qu'un carte est distribuée, tu ne dois meme plus t'embeter à vérifier si elle a été ou non distribuée... et tu évites les problèmes liés au fait d'avoir de plus en plus de chances de tomber sur une carte déjà distribuée, au fur et à mesure que le nombre de carte distribuées augmente
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [C++] Urgent Développeur pour Jeu de cartes simple
    Par koros21 dans le forum Projets
    Réponses: 6
    Dernier message: 10/09/2006, 13h19
  2. [structure de donnée] jeu de carte
    Par .:dev:. dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 20/05/2006, 15h44
  3. [debutant] jeu avec creation de processus et partage memoire
    Par cbv38 dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 01/12/2005, 17h39
  4. [VB] Recrutement pour un Jeu de cartes WHIST
    Par Vesta dans le forum Projets
    Réponses: 5
    Dernier message: 13/09/2005, 19h43
  5. IA avec un jeu de cartes
    Par Captain_JS dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 07/02/2005, 10h07

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