2013-05-11 80 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