C++ Randomizer

01/29/2013 23:48 Kosic#1
Hallo,

Ich versuche seit einigen Stunden verzweifelt nach einem Weg, Zufallszahlen in C++ zu generieren.( z.b. zwischen 123 - 3667 ) Hab tausende Threads durch gelesen und es auch schon mit dem neuen Header
Code:
#include <random>
probiert. Also entweder setz ich es falsch um oder die Leute in den diversen Foren haben einfach kein Plan.

Mit rand() und dem ganzen Scheiß funktioniert es nicht.

Code daweil:
Code:
//Spawn von Powerup
			std::srand( ( unsigned ) std::time( NULL ) );
			if( SpawnTimerPowerup.getElapsedTime() > sf::seconds( 20 + ( std::rand() % ( 45 - 20 + 1 ) ) ) ) //Will Zufallszahl(en) zwischen 20 - 45
			{
				//Powerupsprite erstellen
				sf::Sprite *PSprite;
				PSprite = new sf::Sprite;
				PSprite->setTexture( TPowerup );
				std::srand( ( unsigned ) std::time( NULL ) );
				PSprite->setPosition( 20 + ( std::rand() % ( 770 - 20 + 1 ) ), -50 ); //Will Zufallszahl(en) zwischen 20 - 770

				//PSprite in Liste hinzugefügt
				PowerupListe.push_back( *PSprite );

				//Timer reseten
				SpawnTimerPowerup.restart();
			}
			//
Sorry für meine Wortwahl oben

Mfg,
Kosic
01/30/2013 03:12 Raz9r#2
Code:
#include <random>

// precondition: min < max
template <typename E = std::default_random_engine>
int random_int(const int min, const int max) {
	std::random_device rd;
	E gen(rd());
	return std::uniform_int_distribution<>(min, max)(gen);
}
Für dein Beispiel also: random_int(123, 3667) für eine Range von [123, 3667].
Das template-Parameter E ist hierbei die RandomEngine, ich selbst bevorzuge mt19937 - das liefert bei nicht zu langsamen Tempo auch für größere Ranges gute zufällige Zahlen.
01/30/2013 14:32 Kosic#3
Danke __underScore !

#closerequest
01/30/2013 20:07 MrSm!th#4
#closed