Random seed question...

The game I’m working on has a random 2d level generator. The subrutine, that creates the level, accepts a (long) argument that if not zero, uses that value as the random seed. I have some numbers (seeds) that create some interesting levels. So when I use the number zero, it doesn’t set the seed, and just leaves the “default” seed alone. I have seen some pretty interesting levels generated this way as well. My question is: Is there a way to get the current seed that the random generator is using (when I have not specifically set one)? I believe if I could get this number then I could virtually use this as the level ID number and allow players to use the same “random” level over and over.

Solution:
After giving it some thought, I came up with a work-around.

Random rndm = new Random();
    	
    	if (seed != 0)
    	{
    		rndm.setSeed(seed);
    	} else {
    		seed = rndm.nextLong();
    		rndm.setSeed(seed);
    	}

If no seed (not zero) is provided, I just randomly randomize the seed. :wink:
The subrutine is now a function that returns the seed, so I can store it in a value, so the players can request the “ID” of the level.

Replace:

seed = rndm.nextLong();

with:

seed = System.currentTimeMillis();

If you want the default behavior.

oNyx’s one is the “default” one used by Random, but Gbeebe’s one is “better”. With the default one, you’re losing 40 years worth of maps! xD

lol =D

btw if you just don’t set a seed, isn’t it default behavior that it uses none/random
not sure about the Random class, might confuse it with some C++ class

Minecraft requires a seed for the world generator. It uses System.currentTimeMillis() if I’m not mistaken.
From http://www.minecraftwiki.net/wiki/Seed_(Level_Generation):

[quote]If you leave the seed field blank, the game will use the time (computer clock) as a seed. Leaving the seed field blank will not produce the same map every time. Using seed 0 in singleplayer will also be ignored, as though it were left blank.
[/quote]

[/quote]
I just thought that if you dont even call .setSeed(seed);, using System.currentTimeMillis() or something similar is the default behavior.

public Random() {
    this(seedUniquifier() ^ System.nanoTime());
}

public Random(long seed) {
    this.seed = new AtomicLong(initialScramble(seed));
}

It also uses some fancy functions to make the seed “more random”. Doesn’t work that well IMHO. Try feeding it the values 0-100 and generating a random value, and you’ll see what I mean…