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.