Variable dans un nom

Variable dans un nom - C - Programmation

Marsh Posté le 30-05-2010 à 11:23:41    

Bonjour !
 
Voila mon probleme, j'ai un jeu de carte a initialiser (52 carte)
et n'ayant pas le courage de tout faire à la main, j'ai pensé a une boucle.
 
Mais un nouveau probleme se pose, comment ajouter une variable a un nom ?
 
Je m'explique, les cartes seront du type :
 
1_x  // avec 1 qui definit la couleur de la carte ( Coeur, Pique, ... (donc ne change pas) ) et x qui definit la valeur ( AS, DEUX, ... ( x prendra des valeurs de 1 à 13))
 
Exemple: Valet de COEUR = 1_11
 
J'utilise ceci pour aller piocher dans mon repertoire image, l'image associée au nom .
 
Merci d'avance !

Reply

Marsh Posté le 30-05-2010 à 11:23:41   

Reply

Marsh Posté le 30-05-2010 à 11:56:20    

L'informatique demande du courage.
 
Pour mon jeu de belote, j'ai commencé par faire une liste de libellés dont j'aurais besoin :

char *cards_color_name[4] = {"trefle", "carreau", "coeur", "pique"};
 
char *cards_height_name[8] = {"as", "sept", "huit", "neuf", "dix", "valet", "dame", "roi"};


J'ai défini des noms pour référencer mes libellés de manière lisible dans mon programme :

#define CLUBS    0
#define DIAMONDS 1
#define HEARTS   2
#define SPADES   3
#define ACE   0
#define KING  7
#define QUEEN 6
#define JACK  5
#define TEN   4
#define NINE  3
#define EIGHT 2
#define SEVEN 1


J'utilise ces références

int cards_color[4] = {CLUBS, DIAMONDS, SPADES, HEARTS};
int usual_order[8] = {ACE, KING, QUEEN, JACK, TEN, NINE, EIGHT, SEVEN};
int notrump_order[8] = {ACE, TEN, KING, QUEEN, JACK, NINE, EIGHT, SEVEN};
int trump_order[8] = {JACK, NINE, ACE, TEN, KING, QUEEN, EIGHT, SEVEN};

Reply

Marsh Posté le 30-05-2010 à 12:06:41    

thevinou a écrit :

Bonjour !

 

Voila mon probleme, j'ai un jeu de carte a initialiser (52 carte)
et n'ayant pas le courage de tout faire à la main, j'ai pensé a une boucle.

 

Mais un nouveau probleme se pose, comment ajouter une variable a un nom ?

 

Je m'explique, les cartes seront du type :

 

1_x  // avec 1 qui definit la couleur de la carte ( Coeur, Pique, ... (donc ne change pas) ) et x qui definit la valeur ( AS, DEUX, ... ( x prendra des valeurs de 1 à 13))

 

Exemple: Valet de COEUR = 1_11

 

J'utilise ceci pour aller piocher dans mon repertoire image, l'image associée au nom .

 

Merci d'avance !


Salut

 

Pourquoi utiliser le nom? Moi je ferais une structure qui contient une valeur et une couleur. Ensuite un tableau de 52 éléments. Enfin je dis tableau mais la structure de données dépendra de ce que tu veux faire de tes cartes.

 

Exemple:

Code :
  1. enum COULEUR
  2. {
  3.     COEUR, CARREAU, PIQUE, TREFLE
  4. };
  5. typedef struct
  6. {
  7.      unsigned valeur;
  8.      COULEUR couleur;
  9. } Carte;
  10. int main()
  11. {
  12.      Carte jeu[52];
  13.  
  14.      indice = 0;
  15.      for (i=0;i<4;i++)
  16.           for (j=1;j<14;j++)
  17.           {
  18.                jeu[indice].couleur = i;
  19.                jeu[indice].valeur = j;
  20.                indice++;
  21.            }
  22. }
 


Message édité par ptitchep le 30-05-2010 à 12:10:35

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 30-05-2010 à 12:10:16    

Le probleme, c'est que mes cartes sont deja toutes initialisées, j'ai juste besoin, pour mon interface graphique, de tirer la carte dans le dossier image selon son nom :S

Reply

Marsh Posté le 30-05-2010 à 13:20:36    

thevinou a écrit :

1_x  // avec 1 qui definit la couleur de la carte ( Coeur, Pique, ... (donc ne change pas) )


ben si ça change !!! 1 pour coeur, 2 pour pique, ça change bien non ??? En plus à quoi servirait une valeur qui ne change pas ???
 

thevinou a écrit :

et x qui definit la valeur ( AS, DEUX, ... ( x prendra des valeurs de 1 à 13))
Exemple: Valet de COEUR = 1_11
Mais un nouveau probleme se pose, comment ajouter une variable a un nom ?


Ca signifie quoi la phrase "ajouter une variable à un nom"' ??? C'est quoi un nom pour toi ?
 

thevinou a écrit :

Le probleme, c'est que mes cartes sont deja toutes initialisées, j'ai juste besoin, pour mon interface graphique, de tirer la carte dans le dossier image selon son nom :S


Ben si t'as le nom du fichier tu peux l'ouvrir via fopen !!!
 

billgatesanonym a écrit :


J'ai défini des noms pour référencer mes libellés de manière lisible dans mon programme :

char *cards_color_name[4] = {"trefle", "carreau", "coeur", "pique"};
 char *cards_height_name[8] = {"as", "sept", "huit", "neuf", "dix", "valet", "dame", "roi"};
#define CLUBS    0
#define DIAMONDS 1
#define HEARTS   2
#define SPADES   3
#define ACE   0
#define KING  7
#define QUEEN 6
#define JACK  5
#define TEN   4
#define NINE  3
#define EIGHT 2
#define SEVEN 1


J'utilise ces références

int cards_color[4] = {CLUBS, DIAMONDS, SPADES, HEARTS};
int usual_order[8] = {ACE, KING, QUEEN, JACK, TEN, NINE, EIGHT, SEVEN};
int notrump_order[8] = {ACE, TEN, KING, QUEEN, JACK, NINE, EIGHT, SEVEN};
int trump_order[8] = {JACK, NINE, ACE, TEN, KING, QUEEN, EIGHT, SEVEN};



 
T'es obligé de tout mettre en anglais ? Tu trouves que ça fait plus pro ?
En plus tu associes dans ta tête différents éléments alors qu'ils ne sont pas associés dans le code. Exemple: t'as défini "SEVEN" à 1 parce que le libellé "sept" est le rang n° 1 de ton tableau "cards_height_name". Pis le jour où tu reprends ton code tu décides de changer la valeur du #define...
 
Or le but d'un define c'est d'être absolument modifiable sans que la compilation ou l'exécution en soit altérée.
 

billgatesanonym a écrit :

L'informatique demande du courage.


Hé oui. Ca demande aussi d'avoir le courage de commencer par bien concevoir avant de se lancer dans le code. Parce que plus tu réfléchis tôt, plus ton code sera facilement maintenable/modifiable. Les structures sont là pour faire des associations. Autant s'en servir...
 

Code :
  1. #define TREFLE   1
  2. #define CARREAU 2
  3. #define COEUR   3
  4. #define PIQUE   4
  5. #define AS   1
  6. #define ROI  2
  7. #define DAME 3
  8. #define VALET  4
  9. #define TEN   5
  10. #define NINE  6
  11. #define EIGHT 7
  12. #define SEVEN 8
  13.  
  14. typedef struct {
  15.    int couleur;
  16.    char *nom;
  17. } t_libelle;
  18.  
  19. typedef struct {
  20.    int couleur;
  21.    int valeur;
  22. } t_carte;
  23.  
  24. t_libelle tabCouleur[]={
  25.     {TREFLE, "Trèfles"},
  26.     {CARREAU, "Carreaux"},
  27.     {COEUR, "Coeur"},
  28.     {PIQUE, "Pique"},
  29.     {0, NULL},
  30. };
  31.  
  32. t_libelle tabValeur[]={
  33.     {AS, "As"},
  34.     {ROI, "Roi"},
  35.     {DAME, "Dame"},
  36.     {VALET, "Valet"},
  37.     {DIX, "Dix"},
  38.     {NEUF, "Neuf"},
  39.     {HUIT, "Huit"},
  40.     {SEPT, "Sept"},
  41.     {0, NULL},
  42. };
  43.  
  44. int ordre_usuel[8] = {AS, ROI, DAME, VALET, DIX, NEUF, HUIT, SEPT};
  45. int ordre_jeu[8] = {AS, DIX, ROI, DAME, VALET, NEUF, HUIT, SEPT};
  46. int ordre_atout[8] = {VALET, NEUF, AS, DIX, ROI, DAME, HUIT, SEPT};


 
Ah évidemment il faut aussi une fonction qui renvoie le nom quand on y passe la valeur. Pas de pb

Code :
  1. char *nom(int valeur, t_libelle *tab)
  2. {
  3.     t_libelle *pt;
  4.  
  5.     for (pt=tab; pt->valeur != valeur && pt->nom != NULL; pt++);
  6.     return pt->nom;
  7. }


 
Et là, je peux définir VALET à 155 si j'en ai envie, ça fonctionnera toujours sauf si j'utilise la valeur 0 que j'ai défini comme valeur sentinelle. Si on veut éviter ce danger, alors faut passer à la fonction "nom" la taille du tableau mais c'est un détail...


Message édité par Sve@r le 30-05-2010 à 14:00:05

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-05-2010 à 19:56:06    

thevinou a écrit :

Le probleme, c'est que mes cartes sont deja toutes initialisées, j'ai juste besoin, pour mon interface graphique, de tirer la carte dans le dossier image selon son nom :S


Désolé, mal compris. Je ne comprends pas non plus "ajouter une variable à un nom". Avec quoi fais-tu ton interface graphique?


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed