Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (487)
Games in Android Showcase (112)
games submitted by our members
Games in WIP (553)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Random seed question...  (Read 1617 times)
0 Members and 1 Guest are viewing this topic.
Offline gbeebe

Senior Member


Medals: 5
Projects: 1



« Posted 2011-09-28 03:09:38 »

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.
Offline gbeebe

Senior Member


Medals: 5
Projects: 1



« Reply #1 - Posted 2011-09-28 03:59:21 »

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

1  
2  
3  
4  
5  
6  
7  
8  
9  
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.
Offline oNyx

JGO Coder


Medals: 2


pixels! :x


« Reply #2 - Posted 2011-09-28 09:07:51 »

Replace:

seed = rndm.nextLong();

with:

seed = System.currentTimeMillis();

If you want the default behavior.

弾幕 ☆ @mahonnaiseblog
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline theagentd
« Reply #3 - Posted 2011-09-28 10:30:31 »

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

Myomyomyo.
Offline Cero
« Reply #4 - Posted 2011-09-28 10:40:44 »

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

Offline theagentd
« Reply #5 - Posted 2011-09-28 12:43:17 »

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.

Myomyomyo.
Offline Cero
« Reply #6 - Posted 2011-09-28 13:45:23 »

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.

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

Offline theagentd
« Reply #7 - Posted 2011-09-28 15:26:50 »

1  
2  
3  
4  
5  
6  
7  
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...

Myomyomyo.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

TehJavaDev (14 views)
2014-08-28 18:26:30

CopyableCougar4 (25 views)
2014-08-22 19:31:30

atombrot (38 views)
2014-08-19 09:29:53

Tekkerue (33 views)
2014-08-16 06:45:27

Tekkerue (32 views)
2014-08-16 06:22:17

Tekkerue (19 views)
2014-08-16 06:20:21

Tekkerue (29 views)
2014-08-16 06:12:11

Rayexar (66 views)
2014-08-11 02:49:23

BurntPizza (42 views)
2014-08-09 21:09:32

BurntPizza (34 views)
2014-08-08 02:01:56
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!