struct Carte { std::string couleur; std::string face; int nFace; // ajouté ICI }; // Les faces int nFaces[8] = {7,8,9,10,11,12,13,14}; // La main int maQuinte[5] = {-1,-1,-1,-1,-1}; // La fonction de tri static int compareINT_ASC(const void* v1, const void* v2) { return( *(int*)v1 - *(int*)v2 ); } // Dans l'init on rajoute la face numérique en plus de celle en chaine void jeu_de_carte(Jeu& jeu) { int x = 0; for (int i=0;i<4;i++) { for(int j=0;j<8;j++) { jeu[x].couleur = couleurs[i]; jeu[x].face = faces[j]; jeu[x].nFace = j; // ajouté ICI x++; } } } // on ajoute l'affectation de la main et le tri void distribuer(Jeu& jeu) { int i=0; std::cout << "votre main"<< std::endl; std::cout << std::endl; for (int i=0;i<5;i++) { maQuinte[i] = jeu[i].nFace; // ajouté ICI std::cout << jeu[i].face << " de " << jeu[i].couleur << std::endl; } std::cout << std::endl; // tri pour recherche quinte qsort(maQuinte, 5, sizeof(maQuinte[0]), compareINT_ASC); // Affiche le tri std::cout << "apres trie : "<< std::endl << std::endl; for (int i=0;i<5;i++) std::cout << "\t\tnFace = " << nFaces[maQuinte[i]] << std::endl; } // Recherche quinte + quinte couleur void quinte(Jeu& jeu) { bool bSuiteCouleur = true; for (int i=0; i<5-1; i++) { if( maQuinte[i] != maQuinte[i+1]-1 ) { std::cout << "\tpas de quinte !" << std::endl; return; } else if( jeu[i].couleur != jeu[i+1].couleur ) bSuiteCouleur = false; } std::cout << std::endl << "\tQUINTE !!" << (bSuiteCouleur ? " DE LA MEME COULEUR !!!" : "") << std::endl; }
void melangerJDC(Jeu& jeu) { // code random... // (...) for (i=0;i<5;i++) // FORCE QUINTE MEME COULEUR { jeu[i].face = faces[i]; jeu[i].nFace = i; jeu[i].couleur = couleurs[0]; // change une seule couleur //if(i==4) jeu[i].couleur = couleurs[1]; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionLa fonction qsort du standard C
std::sort(maQuinte, maQuinte + 5); // du début (maQuinte + 0) à la fin du tableau (maQuinte + 5)
Du fait que les paramètres ne sont pas fortement typés, il faut caster puis déréférencer le pointeur pour atteindre la variable pointée de type int.
*(int*)v1
le static spécifie ici que la fonction est globale et appartient au seul module dans lequel elle est déclarée, (un peu l'inverse de extern). On ne pourra pas appeler cette fonction depuis l'exterieur de ce fichier.
static void func1() { } static void func2() { }
namespace { void func1() { } void func2() { } } // namespace
le fait est que le code d'otigine ne ressemble en rien à du c++ :
struct et typedef
variables globales
fonctions en dehors de toutes classes
aucun objet ect...
[...]
il est vrai que ce melange de concept C et C++ non "objet" est assez terrible.