2013-05-11 19 views
0

假设您有四种敌人类型:基本,强力,毒药和飞行。对于游戏中的每个级别,他们都有自己的产卵频率,这些比率分别为:0.4,0.3,0.2和0.1如何根据比率在混合模式中产生敌人

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

上述敌对类型的示例比例为:BBBB,SSS,PP,F。所以变成了模式也许可以是这样的:(虽然我什至不知道我是如何得出这样的结果,它主要是通过它如何可能看起来guesstimation)BSBPSFBSPB

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

任何人都可以帮忙吗?

+0

你能展示一个模式的例子吗? – JJJ 2013-05-11 18:00:09

+0

为什么不把它随机? – Bergi 2013-05-11 18:12:03

+0

@Bergi随机不会使它线性。 – dda 2013-05-11 18:24:52

回答

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 

然而,你将需要“正确”选择长度,使得比是可能的 - 如果不是,小一些会被压制。此外,由于浮点数学可能会导致错误的结果。

+0

这是一个伟大的想法 - 我正沿着莫名其妙地产生一种模式的思路思考,但实际上你能弄清楚:) – Essential 2013-05-12 22:56:28

+0

你测试的一记码?这是非常接近工作,但不是很正确的结果。这个例子就是结果:** 3001021001 **。 'while(ind in pattern)'部分似乎没有执行任何操作。 – Essential 2013-05-12 23:11:16

+0

是的,我测试了一些输入,并得到了我上面发布的结果...(从控制台复制)。 'while'循环应该防止重叠,只要它已经被声明,就会推进'ind'。也许这个部分对于所有比例组合都不正确,实际的想法是更实用的:将(无限)对象/无对象值流合并到一个输出,每个比率有一个流。 – Bergi 2013-05-13 10:10:47

0

如果你使用定时器来生成你的spawn子程序,你可以做的就是使用0.1的最低频率作为基本比例。每0.1秒就说一次0.1秒。你将这个产卵的定时器设置为4秒,然后在2秒(4s/2)时为产卵0.2产生计时器,在1.3333秒产生0.3的计时器(4s/3),以及在1s(4s/4) 。

如果你不希望产生重叠,你必须找出产卵之间的时间延迟,这样就不会同时产生两个产卵。

+0

但是在某些蜱中,有4个敌人会同时产卵? – Bergi 2013-05-11 18:13:51

+0

是的。除非你为4个计时器引入延迟。 – dda 2013-05-11 18:14:55

+0

是的。但是我觉得OP想知道如何选择延迟... – Bergi 2013-05-11 18:15:57