I’m making a game which uses procedurally generated levels, and when I’m testing I’ll often want to reproduce a level. Right now I haven’t made any way to save the levels, but I thought a simpler solution would be to just reuse the seed used by Python’s random module. However I’ve tried using both random.seed() and random.setstate() and neither seem to reliably reproduce results. Oddly, I’ll sometimes get the same level a few times in a row if I reuse a seed, but it’s never completely 100% reliable. Should I just save the level normally (as a file containing its information)?
Edit:
Thanks for the help everyone. It turns out that my problem came from the fact that I was randomly selecting sprites from groups in Pygame, which are retrieved in unordered dictionary views. I altered my code to avoid using Pygame’s sprite groups for that part and it works perfectly now.
random.seedshould work ok, but remember that it is not thread safe – if random numbers are being used elsewhere at the same time you may get different results between runs.In that case you should use an instance of
random.Random()to get a private random number generatorWill always return the same result for a given seed