Wer Wird Millionär?? random Fragen
-
Hey Leute
ich hab ein kleines Problem und hoffe mir kann hier jemand weiterhelfen
ich muss für die schule ein quiz in c++ programmieren und zwar nach dem schema von "wer wird millionär?"ich hab auch schon angefangen und es läuft auch schon so mehr oder weniger, nur kommen bis jetzt immer nur die gleichen fragen
das heißt wenn mein lehrer das programm mehr als 1mal spielt, fällt ihm vllt auf, dass keine zufälligen fragen kommen
deshalb hoffe ich, ihr könnt mir weiterhelfenich hab das schon versucht mit der "random-funktion" und arrays für die einzelnen betragsstufen, aber das klappt irgendwie noch nicht richtig
kann mir hier bitte jemand sagen wie ich das machen muss, damit bei jeder fragestufe eine zufällige frage gezogen wird
ich bin nämlich noch ein anfänger und mit meinem latein am endewähre ehct cool wenn ihr mir helfen könntet
freue mich über jedes bisschen quelltext, das ich bekommen kannvielen dank schonmal im voraus für jede antwort
mfg andy
-
in der form_open machst du randomize(), dann macht rand() immer andere zahlen.
-
Die Funktion std::rand() liefert dir Zufallszahlen, std::random_shuffle() kann dir ein Array oder einen Container zufällig durchmischen.
Schau dir die Links an, dort hat es auch Codebeispiele. Zum Beispiel wird erklärt, wie du den Seed setzen musst, um bei jedem Programmdurchlauf unterschiedliche Werte zu erhalten. Speichere dir am besten www.cplusplus.com unter den Favoriten. Die Seite sollte die erste Wahl sein, wenn du zu einer Funktion oder Klasse etwas nachschlagen willst.
-
Ich habe, obwohl ich Randomize() im Konstruktor habe, bei random_shuffle immer das gleiche Ergebnis. Muss man noch irgendeine Header einfügen, damit man unterschiedliche Ergebnisse bekommt?
-
ruf halt mal
std::srand( static_cast<unsigned int>(time(0)) );
(#include <cstdlib>
und#include <ctime>
) statt randomize auf...bb
-
Ich mach vorher
std::srand(unsigned(time(NULL)));Und dann kann man ganz angenehm std::rand() und andere Konsorten benutzen
-
Ich habe das jetzt mit srand gemacht.
MitShowMessage(IntToStr(time(NULL))); ShowMessage(std::rand());
habe ich getestet, dass der Zufallsgenerator auf jedenfall funktioniert.
Dann schein ich wohl einen Fehler weiter unten im Code gemacht zu haben.
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]; } }
Ziel ist es den Vektor Bib zu mischen und mit BibIndex synchron zu halten.
Das Problem ist, dass ich nach jedem Programmstart immer das gleiche Ergebnis des mischens erhalte.
Seht ihr hier irgendwo einen Fehler?
-
ShowMessage(IntToStr(time(NULL))); ShowMessage(std::rand());
ah ja - und, was machst du dadurch? hast du nicht gemacht und wolltest uns nur ärgern, oder? ^^
ich habs doch oben schon geschrieben, was du schreiben sollst... -.-
doppelpunktunskilled schrieb:
ruf halt mal
std::srand( static_cast<unsigned int>(time(0)) );
(#include <cstdlib>
und#include <ctime>
) statt randomize auf...bb
-
unskilled schrieb:
ShowMessage(IntToStr(time(NULL))); ShowMessage(std::rand());
ah ja - und, was machst du dadurch? hast du nicht gemacht und wolltest uns nur ärgern, oder? ^^
Ich habe damit lediglich getestet, ob der Zufallsgenerator funktioniert. Diese Zeilen sind nicht Teil des Programms.
Im Konstruktor steht
std::srand(static_cast<unsigned int>(time(NULL)));
Und trotzdem kriege ich immer das gleiche Ergebnis und das obwohl der Zufallsgenerator funktioniert.
-
unskilled schrieb:
ah ja - und, was machst du dadurch? hast du nicht gemacht und wolltest uns nur ärgern, oder? ^^
Scheint so, wenn er keinen eigenen Thread aufmachen will, dafür einen älteren ausgräbt...
Tobi3000 schrieb:
Und trotzdem kriege ich immer das gleiche Ergebnis und das obwohl der Zufallsgenerator funktioniert.
Was soll das, "er funktioniert"? Natürlich funktioniert
rand()
, wenn man es richtig anwendet.
Rufesrand()
nur EINMAL auf, und das bei Programmstart. Ich weiss nicht, ob der Konstruktor dafür eine gute Wahl darstellt. Mach es doch zu Beginn dermain()
-Funktion.Und wie gesagt, eröffne nächstes Mal einen eigenen Thread.