保存/加载顺序随机生成的级别

时间:2015-01-14 03:01:22

标签: java libgdx

我正在开发一个随机生成的游戏。水平是随机生成的2d"地形"看起来是连续的,因为每个人都考虑到最后一个高度"前一个"级别的值。"然后一次加载5个级别,其中第2级是"当前"等级,第一级是刚刚完成的等级,如果用户超过了当前的等级,则第3-5级是存在的。水平。

我正在使用种子随机(Java.Util.Random),以便随机生成的级别始终相同。等级" 1"对每个人来说都是一样的,每个人的随机对象都是相同的。当我希望每个人的500级甚至1000级相同时,我就会出现这个问题。当然,对于我的游戏来说,如果上瘾的人一次只能玩500或1000个级别会很好,但最终用户将不得不停下来,我将不得不保存他们的过程以便以后加载它。

起初我想"哦,为什么不只是存储他们所在的等级号码"当我加载水平时,我只是继续生成它们,直到我达到数字。在我的手机上测试了这个理论并等待了5分钟,同时水平一直在产生,直到达到1000级,我意识到这是一个愚蠢的,准备好了,火,目标"这样做的方法。

所以我的问题是,有没有办法存储"其中"我在一个种子的Random对象中,这样我就可以根据" location"重新创建确切的情况。随机?

2 个答案:

答案 0 :(得分:0)

我认为你不能从Random对象中获取种子。

但是,我认为,出于您的目的,您可以使用以下类来缓存种子,允许您调用getSeed()

public class SeedGettableRandom {
    long seed;
    public SeedGettableRandom(long initialSeed) {
        this.seed = initialSeed;
    }
    public void nextBytes(byte[] bytes) {
        Random rand = new Random(seed);
        rand.nextBytes(bytes);
        seed = rand.nextLong();
    }
    // analogous methods for the rest of Random's methods.
    public long getSeed() {
        return seed;
    }
}

当然,如果性能是一个问题,你可以把你的整个事情放在它自己的方法中。 E.g:

public byte[][] nextGameTerrainData() {
    Random rand = new Random(seed);
    // Do whatever you were doing with you Random object
    seed = rand.nextLong();
}

答案 1 :(得分:0)

为什么不在游戏开始时生成所需的所有级别(随机),然后保存订单?你可以在游戏开始时这样做。然后当玩家退出游戏商店当前级别订单时。当它继续加载所有保存的级别和你保存的位置时。