當前位置:首頁 » 操作系統 » 游戲概率演算法

游戲概率演算法

發布時間: 2023-01-13 01:35:33

① C語言游戲中獎概率演算法

從思想上來所,隨機變數x有兩個值,0表示不中獎,1表示中獎。如果進行N次實現,如果出現1的次數 / N = p%的話,我們說,x為1的概率為p%

STDLIB 中 rand() 函數的返回值,我們可以認為是服從平均分布的隨機變數的值。通過不等式的變換,我們可以得到任意范圍內,平均分布的隨機變數。

比如說,20%的中獎率,我可以定義, 取[0, 99]的隨機整數,如果該值為[0, 20) 則中獎,否則不中,那麼中獎率就為 20%

② 誅仙概率計算問題

其實我還是喜歡用分數來表示!OK,開始:用對立事件來求結果!
不出現暴擊的概率為82%,4次就是82%*82%*82%*82%=0.45212176,我們記為0.45即45%的概率一次不出暴,所以至少一次出暴擊的概率為:P=1-0.45=0.55!
全部是暴擊的概率P=0.18*0.18*0.18*0.18=0.0098496,是個小概率事件了!那麼三個問題的答案分別是:P(1)=0.55 P(2)=,不說了,小概率事件 P(3)=0.45
順便說下,這個是數學上的結果,天知道WMNC的演算法系統在游戲裡面是如何的精準!

③ 游戲掉寶概率的是怎麼算的

寶物掉落有兩種情況:1。如果並非強制掉落的話,那麼這次掉落到上次掉落平均序列長度是(1+99)/2=50,而這種掉落的可能性是(1-1%)^992。強制掉落的話,那麼這次掉落到上次掉落序列長度是100,而這種掉落的可能性是1-(1-1%)^99那麼平均掉落的概率就是1/[(1-1%)^99*50+(1-(1-1%)^99)*100]=0.012267903816375 可以用蒙特卡洛法驗證。

沒錯,你沒看錯,我說的不是「這個游戲系統內有錢,但是沒有交易系統」,而是這個游戲系統內沒有錢。游戲中不存在銅幣、金幣、銀兩這些東西,沒有游戲幣也沒有人民幣和美元,整個游戲都沒有錢,根本不存在能夠流通的單一通貨!

沒有錢那要怎麼做交易呢?如果你是一個老暗黑2玩家,那你肯定會會心一笑。暗黑2是一個有金幣的游戲,但裡面的金幣由於獲得量太大用途太小幾乎沒有意義。於是,玩家們發現了喬丹戒指(SOJ)、尋寶護符(7% MF Small Charm)這些東西用於交易,用這些體積小掉率低價值高的東西交換其他自己需要的裝備。這是個經典的貨幣形成例子,很多老玩家說起經濟系統的時候都會懷念地談起暗黑戰網上的交易……但不管怎麼說,暗黑2還是有錢的,而這個玩家自製的貨幣系統也是波動巨大而不穩定的。

而在POE中,他們設計了一個很有趣的系統:他們設計了一套由多達23種可消耗貨幣道具組成的、可以一定程度上互相匯兌的貨幣系統。這個系統內,幾乎每一種貨幣道具都有其實際的用途,在游戲的裝備打造體系中占著一個重要的位置,不會像D2裡面的那些物價裝備一樣面臨著價格的巨大波動和貨幣道具的沉積。游戲的道具出售系統則也有類似的設計:只要玩家積攢一定數量、種類和組合的裝備賣到店裡,就能獲得對應的貨幣道具作為穩定供應來源。更有趣的是,這個貨幣道具系統天然內置了課稅系統:任意兩種貨幣道具之間的匯兌其實都有潛在的損失量。

④ 游戲攻擊判定的三種模式

轉自:http://www.gameres.com/677620.html

攻擊判定流程幾乎是所有包含戰斗玩法的游戲都無法繞過的一塊內容,常見的攻擊判定流程有瀑布演算法、圓桌演算法以及混合演算法三種。本文簡述了這三種判定流程的特徵,以實例對比分析了瀑布演算法與圓桌演算法各自的優點,以期為後續其他戰斗數值設計內容的論述提供一定的基礎。

攻擊判定流程概述

自此開始正文內容的敘述——讓我們直接代入一個實例:

在一款游戲中,攻擊方有命中率和暴擊率兩個攻擊屬性,而防守方有閃避率、招架率和格擋率三個防禦屬性。於是相應的,一次攻擊有可能產生6種判定結果:未命中、普通命中、閃避、招架、格擋和暴擊。當採用不同的判定流程進行攻擊結算時,6種判定結果出現的頻率會截然不同。

1.  瀑布演算法

顧名思義,在瀑布演算法中,各事件的判定順序如同瀑布一般自上而下。如果「水流」在某個位置被截斷,則後面的流程都將不再繼續進行。據我所知,瀑布演算法是大多數游戲所採用的攻擊判定演算法。

上述實例若採用瀑布演算法,則會以如下方式進行判定:

先判定攻方是否命中

再判定是否被守方閃避

再判定是否被守方招架

再判斷是否被守方格擋

最後判定該次攻擊是否為暴擊

瀑布演算法流程圖

由此我們可以得出:

瀑布演算法特徵1:多次擲骰,一次擲骰只判定單個事件的發生與否

瀑布演算法特徵2:後置判定依賴於前置判定的通過

註:有的游戲會將命中和閃避合並在一次擲骰中判定,這意味著將攻方命中率與守方閃避率合並計算出實際擊中概率後再進行擲骰判定,仍是瀑布演算法

我們再代入一些具體的數值,設攻守雙方角色的面板屬性如下:

攻方命中率=90%

攻方暴擊率=25%

守方閃避率=20%

守方招架率=15%

守方格擋率=30%

按照上述的流程判定,6種判定結果將會按如下的概率分布:

實際未命中概率=1-命中率=1-90%=10%

實際閃避概率=命中率*閃避率=90%*20%=18%

實際招架概率=命中率*(1-閃避率)*招架率=90%*(1-20%)*15%=10.8%

實際格擋概率=命中率*(1-閃避率)*(1-招架率)*格擋率=90%*(1-20%)*(1-15%)*30%=18.36%

實際暴擊概率=命中率*(1-閃避率)*(1-招架率)*(1-格擋率)*暴擊率=90%*(1-20%)*(1-15%)*(1-30%)*25%=10.71%

實際普通命中概率=命中率*(1-閃避率)*(1-招架率)*(1-格擋率)*(1-暴擊率)=90%*(1-20%)*(1-15%)*(1-30%)*(1-25%)=32.13%

瀑布演算法的判定結果分布

由此我們可以得出:

l 瀑布演算法特徵3:各事件出現的概率符合經典的概率計算方法

l 瀑布演算法特徵4:擲骰輪次越偏後的屬性衰減程度越大,但不會出現無效的屬性

2.圓桌演算法

將所有可能出現的事件集合抽象成一個圓桌桌面,便是圓桌演算法這一稱呼的由來。圓桌演算法的實質,是將所有可能發生的事件狀態按優先順序依次放上桌面,直至所有事件被放完或桌面被填滿。圓桌演算法正是史詩級巨作魔獸世界中所採用的演算法。據筆者了解,使用該演算法的游戲並不多見,但即便僅魔獸世界這一款,已足以使這種演算法成為永恆的經典~

上述實例若採用圓桌演算法,則會用一次擲骰判定該次攻擊的結果。

圓桌演算法流程圖

圓桌演算法的操作步驟可以歸納為:

(1)攻方角色的命中率決定圓桌桌面的大小

(2)將各個事件狀態按優先順序依次放上桌面,直至所有的事件均放置完或桌面被填滿

(3)若桌面還未填滿,則用普通命中填滿空桌面

將先前設定的數值代入,6種判定結果將會按如下的概率分布:

實際未命中概率=10%

實際閃避概率=20%

實際招架概率=15%

實際格擋概率=30%

實際暴擊概率=25%

實際普通命中概率=90%-實際閃避概率-實際招架概率-實際格擋概率-實際暴擊概率=90%-20%-15%-30%-25%=0%

註:在上述計算中,優先順序按如下排序:閃避>招架>格擋>暴擊>普通命中

圓桌演算法的判定結果分布

可以看出,由於普通命中的優先順序最低,所以它被完全擠出了桌面。這意味著,若攻守雙方以此數值模型進行對決,則攻擊方的攻擊結果中將不存在普通命中。

由此我們可以得出:

圓桌演算法特徵1:一次擲骰即得出該次攻擊的判定結果

圓桌演算法特徵2:事件有優先順序,圓桌放滿後優先順序低的事件將被擠出桌面。這意味著那部分溢出的屬性將不再生效

圓桌演算法特徵3:圓桌內的各事件出現概率不會衰減,只要優先順序低的屬性沒有被擠出圓桌,各種事件的實際發生概率就與面板屬性數值吻合

3. 混合演算法

這是一種先判定攻方事件,再判定守方事件的判定流程。筆者曾在一篇帖子中看到過這樣判定流程,不確定是否有實際的游戲應用,故僅在此做一些簡單的理論分析。

混合演算法在單方事件的判定中採用圓桌演算法,即:

攻方判定結果:普通命中OR未命中OR暴擊

守方判定結果:閃避OR招架OR格擋OR被命中

混合演算法流程圖

註:上面這個圖僅作示意之用,從流程圖的角度來看可能不太嚴謹

將先前設定的數值代入,6種判定結果將會按如下的概率分布:

實際未命中概率=10%

實際閃避概率=攻方命中率*閃避率=90%*20%=18%

實際招架概率=攻方命中率*招架率=90%*15%=13.5%

實際格擋概率=攻方命中率*格擋率=90%*30%=27%

實際暴擊概率=攻方暴擊率*敵方被命中概率=25%*(1-20%-15%-30%)=8.75%

實際普通命中概率=攻方普通命中概率*敵方被命中概率=(90%-25%)*(1-20%-15%-30%)=22.75%

混合演算法的判定結果分布

由此我們可以得出:

混合演算法特徵1:先判定攻方事件,再判定守方事件,共進行兩次擲骰

混合演算法特徵2:先在單方事件的判定中採用圓桌演算法,再用瀑布演算法串聯攻守雙方事件

混合演算法特徵3:會產生並發動作,例如暴擊被閃避等

註:這也正是實際暴擊率較低原因所在

瀑布演算法與圓桌演算法的特性對比

在上一塊內容的鋪墊之下,我們不妨繼續以魔獸世界中的攻擊判定流程設計實例作為切入點,對比分析一下圓桌演算法與瀑布演算法各自的特性。

(1)面板屬性傳遞信息的直觀性

瀑布:由於各屬性在判定流程上的生效時間有先後之分,所以各屬性的實際效用與面板顯示的不符。

圓桌:由於屬性的判定沒有先後之分,只要沒有屬性被擠出圓桌,則所有屬性的實際效用與面板顯示的相當。

這里可以看出圓桌演算法的優點:

屬性的實際效用與面板顯示相符顯然更易於普通玩家的理解,便於玩家掌握自身的戰力情況。

(2)屬性的價值

瀑布:擲骰輪次越偏後的屬性衰減程度越大,但所有的屬性均會生效。

圓桌:只要沒有屬性被擠出圓桌,則不存在屬性效用的衰減。

這里可以看出圓桌演算法的優點:

由於不存在判定流程上的先後,所以各屬性的實際價值會比較接近,一般不會出現玩家堆了某個判定流程靠後的屬性結果很廢的情況。

同樣也可以看出其缺點:

一旦有屬性溢出,則該部分屬性的效用為0,完全沒有價值。

(3)相同面板數值下的生存能力

圓桌:在面板數值相同的情況下,魔獸世界用圓桌演算法大大提高了坦克角色的生存能力,使得他們可以應對來自首領怪的超高攻擊,匹配大型團隊副本的玩法設計。

瀑布演算法下,免傷概率=18%+10.8%+18.36%=47.16%

圓桌演算法下,免傷概率=20%+15%+30%=65%

傳統的概率為相乘關系,圓桌為相加關系,後者的概率總和要大的多

並且,當防禦職業將三維堆至一個閾值(70%)後,配合技能可達100%的免傷覆蓋,將命中和暴擊全部擠出桌面,從而衍生出特定的玩法(70級年代伊利丹的剪切技能)。

瀑布:相同的面板數值在瀑布演算法的框架下,免傷概率相較於圓桌演算法要低得多。換言之,角色達到相同的有效生命值,所需的免傷屬性要高得多。

這里可以看出:

在圓桌演算法的框架之下,屬性投放若是脫離了控制超過了閾值,將對平衡性產生較大的沖擊(70級的盜賊單刷格魯爾——當然在暴雪光環的作用下,玩家會認為這是精妙的設計~)。

在國產游戲收入導向的大環境下,設計者是否能頂住收入壓力,嚴守屬性投放的極值不越界,是值得慎思的問題。採用瀑布演算法,能有更大的數值空間用於能力投放,更為適合現階段的市場環境。

(4)運算量

瀑布:多次擲骰

圓桌:單次擲骰

顯而易見:

擲骰次數越多,運算量越大。圓桌相較於瀑布,有著相對較小的運算量。簡單即是美。

註:除魔獸世界外,《冒險與挖礦》的技能施放也採用了圓桌演算法,大大簡化了技能施放的判定流程。可以想像一下,一次攻擊至多發動一個技能。而每一次攻擊,一個隊伍中有幾十個角色的技能施放需要判定,如果採用瀑布演算法,將產生多大的運算量。

思考與總結

對戰斗數值的研究,應該基於理論推導而歸於實踐應用。畢竟游戲數值設計不是做數學研究,其本質應是一種體驗設計。最後希望交流的是筆者個人對於這兩種演算法的一些理解。

(1)不同的攻擊判定流程會向玩家傳達不同的戰斗感受

究其本質,不同的攻擊判定流程,影響著一場戰斗中的各種攻擊判定結果將以何種概率分布出現。

假設在一款游戲中,閃避率的投放上限是30%,暴擊率的投放上限是40%,命中率的投放上限是100%。瀑布演算法下,出現閃避、暴擊和普通命中的概率是30%、28%和42%;圓桌演算法下,則為30%、40%和30%。這兩種不同的概率分布,必然會帶給玩家不同的戰斗體驗,但在缺少其他條件的情況下,並不能判斷孰優孰劣。

使戰斗體驗匹配游戲的核心玩法,使屬性投放的極限值能滿足游戲的商業化需要,是設計攻擊判定流程時首先要考慮的。

註:甚至於部分競技游戲強調公平性,將暴擊做成了偽隨機。

使用瀑布演算法,則不應該設計種類繁多的事件狀態

若是仿照魔獸世界的做法設計一連串的事件狀態(未命中、閃避、招架、格擋、暴擊、普通命中、偏斜、碾壓),非但運算繁雜,而且後置判定的屬性衰減幅度較大,效果極不明顯。這種隱晦的設計將不易傳達,同時還會影響玩家的游戲感受(某個判定流程靠後的屬性堆得很高結果卻沒用)。

使用圓桌演算法,則應該嚴守屬性投放的上限,防止平衡崩壞的情況發生

需要澄清的是,並不是說使用瀑布演算法就可以無限投放數值,而是說,相較於瀑布演算法,圓桌演算法的屬性投放上限會低很多(免傷概率的相加與相乘)

(2)不同的攻擊判定流程將影響有效生命EHP和有效攻擊EDPS的表達式

幾乎每個數值策劃都會將角色的屬性轉化為EHP和EDPS以衡量其的戰斗能力,但曾見過不少人對所有的游戲都用統一的EHP、EDPS表達式進行分析模擬。這種偏差較大的模擬方式必然會影響體驗設計的精準性。在不同的攻擊判定流程之下,EHP與EDPS有著截然不同的表達式,舉例說明如下。

瀑布演算法下:

若命中閃避分兩次判定:

EHP=HP/(1-免傷率)/(1-閃避率)/(1-招架率)

EDPS=DPS*命中率*[1+暴擊率*(暴擊傷害倍率-1)]

若命中閃避合並判定:

EHP=HP/(1-免傷率)/(命中率-閃避率)/(1-招架率)

EDPS=DPS*(1+暴擊率*(暴擊傷害倍率-1))

圓桌演算法下:

EHP=HP/(1-免傷率)/(1-閃避率-招架率)

EDPS=DPS*[命中率-敵方閃避率-敵方招架率+暴擊率*(暴擊傷害倍率-1)]

註:閃避、招架>暴擊>普通命中,且各狀態發生概率之和未超過圓桌大小

混合演算法下:

EHP=HP/(1-免傷率)/(1-閃避率-招架率)

EDPS=DPS*[命中率+暴擊率*(暴擊傷害倍率-1)]

可能有人會覺得:模擬得這么准又有什麼卵用,數值平衡最後還不是靠調?誠然,在數值設計領域,確實有名言曰:數值平衡是調出來的。但在筆者看來,調節應該建立在正確的理論推導的基礎之上。依靠調節來掩蓋數值模型的錯誤設計,是本末倒置的行為。即便達到了所謂的平衡,也不過是扭曲的平衡,會為後續版本的迭代埋下隱患。

寫在最後

市面上的大多數游戲,都不會設計復雜繁多的攻擊事件,且基本採用瀑布演算法。如此看來,攻擊判定流程的設計十分簡單。那麼為什麼要大費周章地將簡單問題復雜化呢?

愛因斯坦曾說過:Everythingmust be made as simple as possible, but not one bit simpler——凡事應該力求簡單,但不能過於簡單。從了解一種數值設計方法到理解如此設計的目的,從模仿成功游戲的數值設計到理解其設計的內在意義,這是每個數值策劃成長的必經之路。

從全盤照搬一種數值體繫到能夠融會貫通並根據實際情況靈活運用,這是一條並不好走的路。知其然,也應知其所以然——這是一個入行一年有餘的新人的一點感悟。

免責申明:

1.筆者無法保證本文所用詞彙的普適性,能力所限,請多包涵~

2.不保證文中魔獸世界實例中的設定均與原作完全相符。但即便不相符,也不會影響圓桌理論的推

⑤ 10人抽獎至少3人中的概率

概率是30%。
演算法是用3/10*100%=30%,所以10人抽獎至少3人中的概率是30%。
概率是指某一事件在相同條件下可能發生也可能不發生,表示發生的可能性大小的量。概率的演算法是:用事件數除以可能結果數。所得結果即為單一事件發生的概率。

⑥ 撲克概率計算

這個題有點難度,因為是6個人的游戲,不知道外面和你拿同花的有幾張。一共13張同花,每人兩張底牌,三張公共牌,一共30張牌。如果其他人25張牌和你拿的底牌同花達到了13張,那麼你第三張是同花的概率為0,如果達到了12張,剩餘的25張牌里,只剩一張,你第一張公共牌得到的概率為1/25,第二張概率為1/24,第三張概率為1/23,得四張同花概率為0。如果其它人手裡沒有和你底牌同花的。剩餘25張牌里還有11張同花,你第三張得到同花的概率為11/25,如果你第三張得到了,第四張得到的概率為10/24,如果第三張沒得到,第四張得到的概率為11/24。這個題有點難度,因為是6個人的游戲,不知道外面和你拿同花的有幾張。一共13張同花,每人兩張底牌,三張公共牌,一共30張牌。如果其他人25張牌和你拿的底牌同花達到了13張,那麼你第三張是同花的概率為0,如果達到了12張,剩餘的25張牌里,只剩一張,你第一張公共牌得到的概率為1/25,第二張概率為1/24,第三張概率為1/23,得四張同花概率為0。如果其它人手裡沒有和你底牌同花的。剩餘25張牌里還有11張同花,你第三張得到同花的概率為11/25,如果你第三張得到了,第四張得到的概率為10/24,如果第三張沒得到,第四張得到的概率為11/24。這個題有點難度,因為是6個人的游戲,不知道外面和你拿同花的有幾張。一共13張同花,每人兩張底牌,三張公共牌,一共30張牌。如果其他人25張牌和你拿的底牌同花達到了13張,那麼你第三張是同花的概率為0,如果達到了12張,剩餘的25張牌里,只剩一張,你第一張公共牌得到的概率為1/25,第二張概率為1/24,第三張概率為1/23,得四張同花概率為0。如果其它人手裡沒有和你底牌同花的。剩餘25張牌里還有11張同花,你第三張得到同花的概率為11/25,如果你第三張得到了,第四張得到的概率為10/24,如果第三張沒得到,第四張得到的概率為11/24。

⑦ 計算22選5的概率,需要詳細公式

22選5玩法中
全排列共26334
22*21*20*19*18/5/4/3/2/1=26334
相信樓主也會算
一等獎中獎概率就是26334分之一
樓主也知道
但是摟住不知道的是22選5中3個的中獎概率有點糊塗了,我解釋一下:
22個號碼中三個一組共有1540組,其實摟住已經混淆了概念,你所算得是相當於22選3玩法(22選3
假如中3個是一等獎)的中獎概率。
具體演算法
我們是從22個中選5個,一注單選5個數,中三個就是5個當中中三個數學表示就是C
5
3
(5*4*3/3/2/1=10),另17個數中有兩個是沒中的,就是17選2
C
17
2
(17*16/2=136),在用10乘136=1360就是這么多中組合了。因為全排列有26334種,即1360/26334,約19.3632............即1/19
中4個的[C(5
4)*C(17
1)]/C(22
5)----
85/26334
約309.8
即310分之一
雖然廢話太多,但是講得清楚

⑧ 我想問一下關於崩壞3保底的概率計算的問題

1000次不會有124次,這個是在無限樣本的前提下。而1000次相對於無限太小了。比如說出貨率是10%無保底,那你能說抽10次必定出貨嗎,並不能,你抽取時有0.9∧10的概率約0.34的概率不出貨,而出貨的概率實際上是1減去它。而引入保底機制後,我們的概率發生了變化。這里需要考慮如何編程的問題,通過編程我們了解到其實就是加入了一個記錄變數,當出現紫色時清空它,重新計數,當記錄變數加到第10次未出現紫色則該次概率變為100%。那麼概率就變為10次為周期分類討論是否出現保底事件的條件概率問題。假設單次設定出貨概率x=0.1,令觸發保底事件為A,出貨為Y,不出貨為N。那麼第一次抽取概率出貨0.1,不出貨0.9。類推過去觸發保底事件A的概率是P(A)=0.9∧9,不觸發保底事件的概率P(1-A)=1-0.9∧9。兩者出貨的概率分別為100%和1-0.9∧9。那麼p(Y)=0.9∧9+(1-0.9∧9)∧2為實際出貨概率。可以得出計算公式。若給出的為實際概率p(Y),設設定概率為x回推即可。

熱點內容
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396
電腦上如何查詢自己的配置 發布:2025-05-16 05:06:36 瀏覽:105
sql中去重 發布:2025-05-16 04:55:06 瀏覽:893
dwr上傳圖片 發布:2025-05-16 04:49:46 瀏覽:122
base64加密的圖片 發布:2025-05-16 04:35:46 瀏覽:356