Bonjour,

je stocke une jeu de cartes dans un vector, et j'ai écrit une méthode permettant de mélanger les cartes.


Code : 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
17
18
19
20
21
22
23
24
class Croupier
    {
        public :
 
            static std::vector<Carte> Paquet;
            static std::vector<Carte> Defausse;
 
            Croupier() {/*nothing to do */}
 
            ~Croupier() {/*nothing to do*/}
 
            void Melanger()
            {
                int i = 0;
                for (auto c : Paquet)
                {
                    do
                    {
                        i = rand() % Paquet.size();
                    }while (Paquet.at(i) == c);
 
                    std::swap(c, Paquet.at(i));
                }
            }
dans le main :
Code : 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
17
18
19
20
21
22
23
24
25
26
27
 
 
std::vector<Carte> Jeu::Croupier::Paquet;
 
int main()
{
    //initialisation des textures des cartes
    Carte::InitTextureCartes();
    //initialisation de la graine
    srand((unsigned)time(NULL));
 
    //instanciation de la fenetre
    sf::RenderWindow App(sf::VideoMode(width,height,32), "testSFML");
 
    //instanciation des joueurs
    Joueurs::Joueur j1("Kamui"), j2("Alu"), j3("7"), j4("TeK");
 
    //instanciation du croupier
    Jeu::Croupier c;
 
    //le croupier choisit un jeu de 32 cartes
    c.Init_32_cartes();
 
    c.Melanger();
 
    Joueurs::Distribuer(Jeu::Croupier::Paquet);
    //[...]
Apres c.init_32_cartes(); si je vérifie le contenu du vector rien à dire, tout est normal.

Apres c.Melanger();, des doublons sont apparus et (forcément) des cartes ont disparu...

Je cherche depuis un bon moment une explication maintenant, mais je ne trouve rien dans cet algo qui ne pose problème...

(j'ai un petit doute sur ce que fait swap dans mon cas d'utilisation...)

Vous avez une idée?