Sve@r | 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.
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 :
#define TREFLE 1 #define CARREAU 2 #define COEUR 3 #define PIQUE 4 #define AS 1 #define ROI 2 #define DAME 3 #define VALET 4 #define TEN 5 #define NINE 6 #define EIGHT 7 #define SEVEN 8 typedef struct { int couleur; char *nom; } t_libelle; typedef struct { int couleur; int valeur; } t_carte; t_libelle tabCouleur[]={ {TREFLE, "Trèfles"}, {CARREAU, "Carreaux"}, {COEUR, "Coeur"}, {PIQUE, "Pique"}, {0, NULL}, }; t_libelle tabValeur[]={ {AS, "As"}, {ROI, "Roi"}, {DAME, "Dame"}, {VALET, "Valet"}, {DIX, "Dix"}, {NEUF, "Neuf"}, {HUIT, "Huit"}, {SEPT, "Sept"}, {0, NULL}, }; int ordre_usuel[8] = {AS, ROI, DAME, VALET, DIX, NEUF, HUIT, SEPT}; int ordre_jeu[8] = {AS, DIX, ROI, DAME, VALET, NEUF, HUIT, SEPT}; 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 :
char *nom(int valeur, t_libelle *tab) { t_libelle *pt; for (pt=tab; pt->valeur != valeur && pt->nom != NULL; pt++); return pt->nom; }
|
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.
|