2017-05-24 60 views
4

我正在寫一個相當基本的(現在)數字搗戰模擬器在JavaScript中。其目的是測試即將到來的比賽的公式,所以我們可以平衡球員的統計數據。雙玩家號碼作戰模擬器青睞第二玩家

目前,SIM降低基於以下公式

player1.hp -= (Math.floor(Math.random() * 5) + 1) * player2[Math.floor(Math.random() * player2.length)].str; 

HP上100開始選手的健康,和STR爲2

player2[Math.floor(Math.random() * player2.length)].str 

上面的代碼挑選的3「份1- 「的球員(頭部,身體,腿),因爲每一塊都有自己的統計數據。

因此,對於任何特定的回合,從玩家1開始,他們頭部的HP會根據第一個公式減少一定數量(玩家2挑選的隨機部分,這是str stat乘以1和5之間的隨機數)

然後玩家2的部分受到攻擊,玩家1的隨機部分被挑選出來用於str狀態。

(是的,玩家2次的攻擊總是首先目前,然後播放器1 - 這可能是問題?)

當我運行一個單一的「戰鬥」,結果好壞不一。但是當我進行100場或1000場戰鬥時,玩家2通常排在首位,平均贏率爲60%。

JS文件here(下載,並通過節點運行)

+0

如果玩家1第一次受到攻擊,它會在60%的時間裏排在前面嗎?誰先攻擊誰可能有某種優勢,這可能反映了現實。也許你可以隨便誰開始,因此晚上在戰鬥開始時佔上風。 –

+0

對不起,在我的代碼中,玩家2實際上是先消耗玩家1的健康(首先是頭部,然後是身體,最後是腿部)。是的,我的目標是隨機排列順序:)奇怪的是,一次運行模擬(rounds = 1),很多次,大致爲50/50分割。運行很多次,幾次(rounds = 1000)顯示了差異。 –

回答

1

球員誰開始總是有優勢,因爲他是第一個能夠,如果你認爲的每個球員都有100馬力和1的情況下做的最後一擊命中= 10點傷害,那麼開始的玩家將進行第10次擊球並完成戰鬥,而玩家2將只完成9次命中。隨機化傷害依然具有優勢,因爲第一個玩家有1點擊優勢

+0

這是我目前的結論。我現在要添加順序的隨機化,然後看看。但看到我上面的評論關於有1場比賽和上千場比賽。奇怪的結果! –

+0

所以我只是切換順序,所以現在玩家1先攻擊玩家2,我得到相同的結果,玩家2贏得更多:/但只是在一個大樣本集中。多次運行一個樣本大概是50/50 ...很困惑! –

1

這是基於回合制的軍事作戰模擬模型中的一個衆所周知的問題。有幾個常用的解決方案。一種是隨機分配先走的人。第二種是在應用那些三角洲前計算這兩個玩家的增量。第二種方法具有有趣的(和現實的)結果,在某些情況下,兩個玩家都可能被殺死。

-1

有趣的解決方案可能會增加諸如「激怒」變量之類的東西 - 基本上他的健康越低,他就會越強壯,並試圖通過不同的縮放來平衡它。