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 :

Aide C - Jeu de carte


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Aide C - Jeu de carte
    Bonjour,

    Dans le cadre de nos études, nos professeurs nous ont donné un exercice qui est créer un jeu de carte type Uno ou 8 Américain.

    J'ai donc commencé à me renseigner et à codé mais je bloque.

    J'ai créer mon système de distribution de carte mais je ne sais pas comment codé les tours des joueurs.
    Sachant que dans un tour le joueur joue une carte et le programme vérifie si la carte correspond à la carte du paquet.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI Carte_Paquet = 5 de coeur ALORS
                   SI Carte_Jouer = Carte_Paquet ALORS
                   "Passage en tour 2"
                   SINON
                   "Mauvaise carte"
                   FINSI
    FINSI
    Sachant que la carte du joueur est valide Si: c'est un 5 de n'importe qu'elle famille OU un coeur de n'importe qu'elle chiffre

    Je peux fournir mon code si jamais vous en avez besoin, mais je cherche plus des idées pour résoudre mon problème que la solution direct.

    Merci d'avance pour votre aide

    PS: Désolé pour l'algorithme moisi ci-dessus mais vous m'avez compris

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    à quoi ressemble une carte dans ton code (vu que t'as déjà fait la distrib' ) ?
    Questions plus générales : qu'utilises-tu comme interface graphique ? On joue contre des IA ? Des joueurs sur réseau ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    à quoi ressemble une carte dans ton code (vu que t'as déjà fait la distrib' ) ?
    Questions plus générales : qu'utilises-tu comme interface graphique ? On joue contre des IA ? Des joueurs sur réseau ?
    Pour le moment ni interface graphique, ni IA.
    Pour le moment il y a deux joueur en local.

    En gros voila à quoi ressemble la distribution des cartes, et j'ai utilisé un tableau pour cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *TabValeur[] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Valet", "Dame", "Roi", "As"};
    char *TabCouleur[] = {"Pique", "Carreau", "Coeur", "Trefle"};
    Nom : exemple.png
Affichages : 3251
Taille : 10,0 Ko

    "Première carte" est la première carte du paquet qui va dans la défausse.


    PS: Le problème que le joueur 1 puisse voir les cartes du joueur 2 et inversement je le réglerais plus tard

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Pour commencer tu as intérêt à représenter les couleur et valeur de chaque carte par un type simple (identifiant entier) plutôt qu'une chaîne de caractères, ça simplifiera pas mal de trucs. Rien ne t'empêche de conserver tes tableaux de chaînes pour l'affichage en les indexant avec les valeurs de ces identifiants respectifs.

    Ensuite, programmer les règles du jeu, c'est simplement décomposer le problème - comme on le fait nous-même inconsciemment en jouant aux cartes - pour l'expliquer sans ambiguïté à la machine. Quelles cartes puis-je jouer ? devient pour chacune de ces cartes qu'il me reste en main, ai-je le droit de la jouer ? Lorsque tu identifies comme cela un traitement commun à appliquer un certain nombre de fois sur un jeu de données, aie de suite le réflexe : cela se traduit par une fonction.

    Tu peux aisément écrire une fonction dédiée à déterminer si une carte donnée peut être jouée en considérant divers paramètres. Si je prends l'exemple de la belote (pour ne pas te mâcher le travail ) ces paramètres peuvent être :

    • l'état courant du pli : quelle est la couleur demandée (celle de la première carte jouée dans le pli considéré) ? Qui est maître (on est dispensé de couper lorsque le partenaire l'est) ?
    • la main du joueur : si la carte choisie n'est pas de la couleur demandée, peut-il fournir ?
    • éventuellement quelques informations additionnelles sur la donne en cours : quelle est la couleur d'atout ?

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Pour faire suite à la remarque de Matt_Houston sur les couleurs, tu peux utiliser un énumérateur pour ça

    Code c : 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
    #include <stdio.h>
     
    typedef enum {trefle, carreau, coeur, pique} t_couleur;
     
    char *getCouleur(t_couleur c)
    {
    	static char *couleur[]={"trèfle", "carreau", "coeur", "pique"};
    	return couleur[c];
    }
     
    int main()
    {
    	t_couleur i;
    	for (i=trefle; i <= pique; i++)
    		printf("i=%s\n", getCouleur(i));
    }
    C'est pas vraiment primordial mais je trouve que ça améliorera bien la lisibilité de ton code => if (carte == coeur) sens-=sens; plutôt que if (carte == 3) sens-=sens; ou pire if (strcmp(carte, "coeur") == 0) sens-=sens;...

    Ensuite, ben perso j'essayerais de définir des structures représentant les cartes. Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct {
    	unsigned short valeur;
    	t_couleur couleur;
    } t_carte;
     
    typedef struct {
    	t_carte[54];  // 52 cartes + 2 jockers
    } t_jeu;
    Ca te permettra de créer plus facilement des fonctions de manipulation. Par exemple je trouve plus pratique d'écrire void melangerJeu(t_jeu *jeu) que void melangerJeu(int jeu[54], char **tabValeur, char ** tabCouleur). Surtout que si tu t'aperçois, après 3 jours de codage intensif, que tu as besoin d'un truc en plus dans ton jeu ; comme par exemple le score, c'est facile à rajouter dans le "t_jeu" (une seule modif et toutes les fonctions qui manipulent le jeu y auront automatiquement accès) plutôt que de le rajouter à chaque fonction qui aura besoin de s'en servir.

    En fait, un projet c'est un peu comme une maison. Plus tu prépares tes outils (fondations) de façon complète, plus simple sera ensuite ton code pour décrire ton algorithme. Exemple: pour comparer 2 cartes

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int compareCarte(t_carte *c1, t_carte *c2)
    {
    	if (c1->valeur < c2->valeur) return -1;
    	if (c1->valeur > c2->valeur) return 1;
    	if (c1->couleur < c2->couleur) return -1;
    	if (c1->valeur > c2->couleur) return 1;
    	return 0;
    }

    Ensuite te suffit d'appeler if (compareCarte(&c1, &c2) == -1) chaque fois que tu veux regarder si "c1" est plus petit que "c2". Bon c'est vrai que cet exemple serait encore plus frappant en C++ où on pourrait écrire directement if (c1 < c2) mais c'était pour illustrer.

    Ainsi (pour reprendre ton premier exemple), une carte valide (par rapport à la carte du tas) deviendra un truc de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int carteValide(t_carte *tas, t_carte *joueur)
    {
    	return (tas->couleur == joueur->couleur || tas->valeur == joueur->valeur || joueur->valeur == 0 /* 0=jocker */) ?1 : 0;
    }
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [choix de techno]comment programmer un jeu de carte
    Par roilion dans le forum Général Conception Web
    Réponses: 8
    Dernier message: 16/08/2010, 17h43
  2. [C++] Urgent Développeur pour Jeu de cartes simple
    Par koros21 dans le forum Projets
    Réponses: 6
    Dernier message: 10/09/2006, 14h19
  3. [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, 16h44
  4. [VB] Recrutement pour un Jeu de cartes WHIST
    Par Vesta dans le forum Projets
    Réponses: 5
    Dernier message: 13/09/2005, 20h43
  5. IA avec un jeu de cartes
    Par Captain_JS dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 07/02/2005, 11h07

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