javascript - 如何根据比率以混合模式生成敌人

标签 javascript algorithm unityscript

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

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

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

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

有人能帮忙吗?

最佳答案

我想这样就可以了:

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

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

关于javascript - 如何根据比率以混合模式生成敌人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500145/

相关文章:

javascript - jQuery ui 对话框拖动问题

javascript - 如何在 .js 文件中使用 Vue i18n 翻译?

java - 计算荣格图中的 SimRank?

c++ - 生成三次贝塞尔椭圆弧的通用公式?

unity-game-engine - Unity 2017.10f3 .Net 4.6 目标问题

math - javascript-标准化数字,使其介于0到1之间

javascript - 用于 Firebase 规则的 JsonPath

javascript - 替换 Javascript 不起作用

algorithm - 估算 Google App Engine 查询中的结果数

unity-game-engine - 更新是串行的还是并行的?