0

假设您有四种敌人类型:基本、强、毒和飞行。对于游戏中的每个关卡,它们都有自己的生成频率,这导致比率分别为:0.4、0.3、0.2 和 0.1

有没有办法无限地生成这些不同类型的敌人,使它们以完美的模式出现,不同类型的敌人以尽可能均匀混合的顺序出现?(就像吃喝玩乐一样。)

上述敌人类型的示例比率为:BBBB、SSS、PP、F。所以变成一个模式可能看起来像:BSBPSFBSPB(虽然我什至不确定我是如何得出这个结果的,但这主要是通过猜测它的外观。)

我可以为游戏中的每个关卡手动编码生成模式,但会有数百个关卡。设置它们的出现频率更容易,但我不知道如何将其编码为混合模式。

任何人都可以帮忙吗?

4

2 回答 2

2

我认为这会做到:

function generatePattern(ratios, length) {
    var pattern = new Array(length);
    for (var i=0; i<ratios.length; i++) {
        var ratio = ratios[i];
        var step = 1 / ratio;
        for (j=0; j<length; j+=step) {
            var ind = Math.floor(j);
            while (ind in pattern)
                ind++;
            pattern[ind] = i; // element for which the ratio stands
        }
    }
   pattern.length = length; // chop off overflow
    return pattern;
}

例子:

> generatePattern([.4,.3,.2,.1], 10)
[0, 1, 2, 0, 1, 0, 2, 1, 0, 3] // and then repeat that forever

然而,您将需要“正确”选择长度,以便比率成为可能 - 如果不是,较小的将被抑制。此外,由于浮点数学,它可能会得出不正确的结果。

于 2013-05-11T19:06:32.687 回答
0

如果您在生成例程中使用计时器,您可以使用最低频率 0.1 作为基本比率。假设 0.1 级是每 4 秒一次。您将此生成的计时器设置为 4 秒,然后将生成 0.2 的计时器设置为 2 秒 (4s/2),将生成 0.3 的计时器设置为 1.3333 秒 (4s/3),基本生成 0.4 设置为 1 秒 (4s/4) .

如果您不希望生成重叠,则必须计算生成之间的时间延迟,以便不会同时发生两个生成。

于 2013-05-11T18:01:50.583 回答