• Advertisement
Sign in to follow this  

random generators

This topic is 1408 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello.

 

I've just switched from int rand(void) to c++11's random library, with all the engines and the distributions.

 

So It's pretty convenient to be able to have the distribution objects to generate uniform floats or integers, but I wonder if there is the need to have multiple engine objects in one program.

 

Let's say I use randomness in three different ways, in the same game, in no particular order:

1. generate a uniform x position from 0.0 to 100.0 (enemy spawn location)

2. generate a uniform fraction [0.0, 1.0) (enemy spawn chance)

3. generate a uniform integer from 1 to 3 (randomly choose a power-up)

 

Is it "more correct" to use one generator with its own seed for each purpose, or it is fine to just use the same generator with different distributions?

Share this post


Link to post
Share on other sites
Advertisement

Interesting, I've never deterministic can be used for replay. That certainly means you can save a lot less data for the replay.

 

What I did was I tried to make it even more non-deterministic by factoring in the player's and the computer's randomness (discard one random number every time player kills an enemy, and discard delta time number of random numbers every frame).

 

I suppose being completely random every time does allow the player to roll until something desirable happens. But then again, my game is not meant to be hard at all, so I don't know, I guess one generator is enough for my purposes for now.

 

Thanks for the answer.

Share this post


Link to post
Share on other sites

Is it "more correct" to use one generator with its own seed for each purpose, or it is fine to just use the same generator with different distributions?

It depends a little. The advantage of using the same random generator to all subsystems is that you'd only need one instance of it, store one single seed and et cetera. The headache comes when your cute deterministic random generator starts to get out of sync due to the several subsystems using it at the same time.

 

If, let's say, one computer handle floats slightly differently from another one, it could break the determinism due to a random call being done with one frame of difference in a subsystem, messing with the previous order. And I'm not even going to start talking about multi threading or cooperative multithreading.

It is very easy to lose your determinism when you're using the same generator throughout all subsystems. This determinism won't matter on most cases, but you'll love the predictability when trying to track a nasty bug.

 

I try to use an independent random stream source for each independent subsystem, it is usually more stable this way. I should say though that I started to do this for precaution, I never really had any problems caused by using a single generator.

Edited by dejaime

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement