random_shuffle immer mit dem gleichen Ergebnis.



  • __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
      Top = 0;
      Left = 0;
      Width = 1082;
      Height = 864;
    
      std::srand(static_cast<unsigned int>(time(NULL)));
    }
    
    void __fastcall TDeck::Startgame(void)
    {
      std::vector<TCard*>::iterator p;
      Bib.reserve(Deck.size()); //Deck.size() im Konstruktor ermittelt
      BibIndex.reserve(Deck.size()); //BibIndex ist wichtig fürs Netzwerk
      for(unsigned int i = 0; i < Deck.size(); i++)
      {
        BibIndex.push_back(Bibcount);
        Bib.push_back(Deck[i]);
        Bibcount += 1;
      }
      Shuffle();
    
    //...
    }
    
    void __fastcall TDeck::Shuffle(void)
    {
      random_shuffle(BibIndex.begin(), BibIndex.end());
      std::vector<TCard*> OldBib(Bib);
    
      for(unsigned int i = 0; i < OldBib.size(); i++)
      {
        Bib[BibIndex[i]] = OldBib[i];
      }
    }
    

    Und trotzdem gibt random_shuffle nach jedem Programmstart das gleiche Ergebnis. Gibt es bei dieser Funktion irgendwelche Sachen, die man extra beachten muss?



  • So ich lass ejtzt ganz die Finger von random_shuffle und hab jetzt das geschrieben.

    for(unsigned int i = 0; i < BibIndex.size(); i++)
    {
      swap(BibIndex[i], BibIndex[rand()%BibIndex.size()]);
    }
    

    Das funktioniert perfekt.



  • random_shuffle benutzt den PRNG, um "zufällige" Ergebnisse zu erzielen musst du per srand() den seed setzen.


Anmelden zum Antworten