如何設計捕魚達人遊戲中的死亡概率?

最近在研究捕魚達人(或者一類捕魚賭博機器)的設計演算法,但對裡面的概率設計很難理解,想請教一下大家,下面是對問題的抽象描述:

捕魚遊戲中一共有X種魚,每種魚的基本分為S(x),玩家每次可以用倍數為y的炮彈去攻擊魚,每一發炮彈必然擊中一條魚(會在屏幕中反彈一直到擊中魚為止),魚被擊中後會以D(X, Y)的概率死去,其中Y為擊中該魚的炮彈的倍數,當魚死亡後,玩家將得到S(x)*y的分數,否則將扣去y分,若要控制遊戲的收益率為1%(即平均玩家每次消耗100分,其將損失1分,也可以理解為遊戲抽水1%),應該如何設計每條魚的死亡概率以及其基本分?

可以進一步假設玩家每一發炮彈擊中魚x的概率為 Q(x), 玩家使用倍數為y的炮彈去射擊的概率為P(y) 目前我得出一玩家平均每一發炮彈的得分公式 R:

R = Sigma(y) [ Sigma(x) [Q(x) P(y) * y * D(x, y) * S(x)] - y ]

其中x取值為所有魚的種類數(例如 1,2, 3, 4 ..... 20),y的取值為玩家可能使用的炮彈的倍數 (例如 10, 20, 30, 50, 100, 200, .... 10000)

思考:在實際遊戲中,Q(x), P(y) 的取值可以實時的通過對玩家的行為進行分析從而進行計算,不知道有沒有好方法可以通過反饋的方式來調節參數從而維護較為穩定的遊戲抽水率。

PS: MadYangYi 提到 「每一發炮彈必然擊中一條魚(會在屏幕中反彈一直到擊中魚為止)」 與

「假設玩家每一發炮彈擊中魚x的概率為 Q(x)」 有矛盾,實際上並不衝突,因為每一發炮彈都會擊中一條魚,至於擊中哪一條魚還是有一個概率的,這個概率其實可以等價為魚x出現的概率。


/*更新內容*/

可執行文件我分享到了微雲中,有興趣的朋友可以下載來玩.

嗯,建議遊戲策劃要用我下面內容的時候和我討論一下。。 這已經是很早之前的設計了。

http://share.weiyun.com/a7e5264a20f840267f76a4e5be0aaa91

之前連接失效了,這是新的.2015年8月7日 13:47:15

環境:win8.0以上 , 支持DX11的設備.

操作:右鍵更換炮彈 F1-F7觸發魚潮 PS:沒有加錢快捷鍵

//原文

在幾年前我在街機上面玩過捕魚達人這樣的遊戲,後來自己畢業設計的引擎需要一個Demo。

我就山寨了一個捕魚達人,先放些截圖。

下面是我設計的主要思路,與原版的遊戲應該會有出入。

我來談一下我設計的主要思路

設計之初,我想過要給魚一些生命值。所謂生命值就是打中一下扣N點的血。

後來我認為,這樣的處理方式不靠譜也不符合預期。

原因有三:

一:玩家有可能一炮就中大鯊魚,大鯊魚的血量必定是最高的,血量的設計不科學。

二:如果加入了血量,那麼只要玩家有耐心,肯投入,必定會中魚。

三:如果扣完血還不中,說所謂系統的控制。那麼這樣和沒有血量的魚沒有區別(因為血量扣到0了還看系統臉色等於沒血量)

於是我移除了血量的設計,這樣的設計就純看臉 23333333

捕魚達人的魚被不被打中在設計中應該要注意如下幾點:

一:有沒有必中的概率;

二:碰撞檢測的難度;

三:遊戲的平衡;

一般遊戲設計是純隨機,但是一款商業遊戲或者遊戲機室的遊戲不應該純隨機(原因你懂的)

那麼既然沒有純隨機,就會有一個收支比(付出與收益的比值)

我採用了兩個變數保存收支比,m_nTotalPay與m_nTotalGain;

每一炮打出去的時候,我會計算一個權值:

fPayGainPower = m_nTotalPay / (float)m_nTotalGain;

得出收支比;這樣的收支比設計者可以定期清空(因為遊戲機室不一定一直都是同一個玩家,我個人沒有清空)

之後我們可以針對收支比進行一個計算,當收支比小於0.5的時候,也就是說玩家收入是支出的一倍,那麼我會把倍率調整到0;

if (fPayGainPower &<= 0.5)

m_SystemPower = 0.0;

其餘的值可以從0.0-1.5不等,具體邏輯遊戲設計師可以自己定義。

數值的話你具體可以自己設置一下,如果聯網遊戲,那麼伺服器也可以主動設置這個值。

當用戶賺得多,系統權值低,用戶賺得少,權值高。如果用戶賠到底褲都沒有了,權值最高。

PS:當用戶的錢快花完了也可以相應調高權值,激勵玩家充值(逃

這個值會賦值到炮彈,炮彈打出去之後會對魚進行一個碰撞檢測。具體的碰撞檢測會根據遊戲設計師的設計邏輯會有所改變。

例如下面矩形就是一條鯊魚的碰撞盒。

只要網碰中了紅色的區域,就會進行捕獲的一個隨機。

捕獲的隨機是,不同的魚類有不同的權值,炮彈有不同的權值,1級炮彈和7級炮彈也不一樣。

下面是魚的權值(隨機後結果超出這個值即可抓獲)

下面是炮彈的權值

一級 0.1

二級 0.2

三級 0.3

四級 0.4

五級 0.5

六級 0.6

七級 0.7

捕獲的權值nCatchPower 是

100的一個隨機數 * 大炮的權值 * 系統給定的權值

nCatchPower = (rand() % 100 + 1) * fCanonPower * m_SystemPower;

最後判斷CatchPower和魚的權值,當Catch數值高,魚就被捕獲,進入結算流程。

這樣遊戲可以一直進(keng)行(qian)下去讓玩家快(ku)樂(bi)地玩耍拉。

這是我的設計方法,希望拋磚引玉:)

有興趣的童鞋都可以一起討論。


最基本的思路是:

收益 = 消耗 - 抽水 = 消耗 * (1- 抽水比率)。

從這個思路出發,歸類現有的因素:

消耗向:炮彈消耗為cost,抽水比率為chou。

收益向:打漁金幣為gold

全局係數:倍率為ratio,作用於整體,放大收益和消耗。

額外引入2個變數,用於遊戲中控制魚死亡概率:

health:魚的生命值,大魚多小魚少。health與gold綁定。x health = 1 gold。

damage:炮彈傷害,大炮多小炮少。damage與cost綁定。y damage = 1 cost。

則公式變化為:

x * health = y * damage * (1 - chou)

health = y * damage * (1 - chou) / x

先定x,y,然後炮的cost和魚的gold,根據chou可以得到魚的health。

炮彈擊中魚時,打死概率為 damage / health(具體肯定有額外控制公式處理特殊情況)。

倍率控制總收益與總消耗,不參與具體概率計算。

--------------------------

我對捕魚遊戲的理解和題主有不同,具體在:

1.倍率與概率計算無關。

2.無論是否打死魚,都會扣分。

--------------------------

題主有些混亂:

每一發炮彈必然擊中一條魚(會在屏幕中反彈一直到擊中魚為止)

假設玩家每一發炮彈擊中魚x的概率為 Q(x)

-----------------------------

其他的再說。


說下我的思路,不一定對。

捕魚遊戲的實質是賭博遊戲,通過抽水來賺錢。舉個例子,玩家手裡有10金幣,玩了一段時間的捕魚遊戲後,他手裡只剩下8金幣,而另外的2金幣被商家拿走了,拿走的這一部分就是抽水,這裡的抽水率就為20%(= 2 / 10),抽水為2 。

我們從最簡單的情況開始分析。假設遊戲中有A炮塔(每次攻擊消耗10金幣);A魚(擊中固定掉落20金幣)。在不考慮抽水的情況下,為了達到收支平衡(玩家剛開始有多少錢,遊戲結束後依然有多少錢),A炮塔擊中A魚的概率就是50% (= 10 / 20)。接下來我們考慮抽水的因素(假設抽水率為5% ),因為有5%的抽水,所以實際用於捕魚的金幣就為 9.5 (= 10 - 10*5%);這樣實際擊中的概率就為: 47.5% (= 9.5 / 20)。

根據這個思路(每次攻擊都是獨立事件,相互之間不會有任何影響),可以計算出各種炮塔對不同種類魚的擊中概率。

實際遊戲中玩家需要較為明顯的贏錢與輸錢的過程。而目前這個思路在玩的過程中,玩家較難有這種體驗,但在賭博遊戲中這應該是必須的,玩家需要這樣的刺激。因此我們將遊戲劃分為不同的周期,劃分周期的依據可以是時間、攻擊次數也可以是當前金幣等。

假設按照攻擊次數將遊戲劃分為四個周期(第一階段:0 ~ 300、第二階段:300 ~ 500、第三階段:500 ~ 650、第四階段:650 ~ 800),前三個周期都讓玩家明顯的感到贏,在最後讓玩家一次性輸掉,但總體的抽水依然滿足5%抽水率這個設定。我們可以手動設定前三個周期的抽水(第一階段:-0.5、第二階段:-1、第三階段:-2),因為要讓玩家感覺到贏,也就是商家送錢給玩家,此時的抽水就為負值,然後計算出第四個階段的抽水為7。

簡單解釋一下這個7是怎麼來的。這裡用了加權平均值的概念,設第四階段的抽水為x,根據加權平均值的概念就有 (-0.5*300 + -1*200 + -2*150 + x*150)/ (300 + 200 + 150 + 150) = 10 * 5% ,可以計算出x為7。如果你對加權平均值不是很理解,可以百度一下相關的概念。

這裡需要注意的是,第四階段的抽水最大值不能超過10(這一點我不是很確定,但如果大於10的話,就沒法計算概率了)。根據計算出的抽水,按照之前的思路算出相應的概率就可以了。在實際項目中不可能設計的這麼死,肯定是會有變化的,至於項目要如何實現,可以多設計幾組這樣的周期來隨機,或者還有其他什麼方式來實現?

捕魚遊戲中還有一個重要的問題是魚群的問題。我們假設兩種最極端的情況,一種是全是小魚(掉落金幣最小),在這種情況下玩家會覺得沒意思,因為擊中的概率會比較高,但是又掉落不了多少金幣;一種是大魚(掉落的金幣最大),此時玩家會非常受挫,因為擊中的概率太低了。所以比較理想的狀態就是什麼魚都有,但還是應該有一個比例的,這裡也可以採用周期的概念來配置。這些都是細活,需要慢慢來調,就不說了。

由於我沒有參與過捕魚類遊戲的設計,所以這個思路在實際中是否可行,還有待驗證。希望你們在讀過之後,可以指出其中存在的問題,非常感謝。


因為開設一款曾經最火的捕魚遊戲,日收入200萬,最後鋃鐺入獄現在緩刑在外給你碼字。

想學捕魚的演算法,就和我討論吧,目前國內網路捕魚,講究平衡率,盈利等等我說第二沒人敢說第一。話說的太大匿了吧,但是我說的都是實話


炮彈*(1-抽水)/魚分,就這樣


我覺得很簡單,莊家拿走一部分,剩下的靠隨機,保證庫存不為負就好


我有個問題呢,因為一炮不只是擊中一隻魚。這種情況怎麼去平衡它的收支呢。


我也在做策劃,魚的生命周期是怎麼設定的


感覺沒那麼複雜。如果我設計,假設大炮以1倍為基準到8倍

抽水率設為X,取值分別為0.4/0.35/0.3/0.25/0.25/0.3/0.35/0.4(百分比)

根據抽成和魚的倍數計算死亡率。倍數為y即100倍的魚死亡率為1/100*X,即如果是1級炮死亡率為0.996%,這是100倍魚單只的概率。由於各種魚可能會出現重疊的情況,單只概率可能還需要調整,至於具體系數只有開發商知道。不一定每一隻魚的死亡概率是獨立計算可能有重疊係數或者區域、時間段的概率變動,周期性回收積分。


一、【電玩城捕魚機吃分出分】 捕魚遊戲分為吃分周期和出分周期。吃分周期就是機器要吃你幣的時候,這時候魚很難打。也是普遍玩家最鬱悶的時候而出分期反之,魚很好打,也是很多玩家認為這是人品爆發的時候。如果一個捕魚遊戲全是吃分周期,那估計這個遊戲就沒有人玩了。同樣如果一個捕魚遊戲全是出分周期,那老闆要虧本了。所以說吃分周期和出分周期必須是一個循環。 我們玩捕魚遊戲時,只要會捕魚技巧,基本上都會贏分,現在由我來分享百變鯊王遊戲機的技巧吧! 遇到魔鬼魚時,魔鬼魚兩個很大的魚鰭一張一合,合上時發多少炮彈也沒用,就要等它張開時,打它魚鰭下兩側,通常兩發就可撈下。

遇到燈籠魚時,打燈籠魚的頭、尾都不管用,一定要打它魚鰓部分,就像人的肋骨附近。 遇到烏龜時,它的頭和烏龜殼都是無法攻破,但四肢和尾部是它的軟肋,它的從背後和側面攻擊上佳 遇到百變鯊王時,它的頭、身體、尾巴都是無法攻破,主要打魚鰓,前後魚鰭,只能盡量升級為四級炮彈。 無論遇到什麼魚時,我們在捕魚的時候,一定記住炮彈盡量與魚平行發射,盡量避免迎射和追射,如果需要迎射和追射的話,盡量打魚的兩側,2-3次的連射為最佳。 最重要的是了解魚的遊行動向,大家在捕魚的時候仔細觀察,有一些場景和魚的遊行方向都是反反覆復重複的,我們有時候捕到的魚都是同一個位置或者同一個遊行方向和速度的,這是我以前說的,炮彈都浪費在一些沒用的魚身上,一定要記住炮彈在打出去到達長度極限打開的一瞬間威力是最大的,盡量避免炮彈在一個方向連續發射,要多移動搖桿,輕微的一個變向,只有前後炮彈的軌道不一樣,就有雙倍的威力。 如果在同一個位置上連續發射多發炮彈,其實威力才有一個,因為你後面的炮彈基本都打到前面炮彈開的網上了,效果打了折扣,特別是對付向你直衝而下的魔鬼魚和鯊魚的時候,效果尤為顯著,打魔鬼魚一定要左右翅膀連續開攻


誰告訴你每打一炮都會擊中一條魚的!你玩過捕魚遊戲嗎!


推薦閱讀:

東方中既然依規定了角色應使用「符卡」進行戰鬥,為何官方沒有卡牌遊戲的形式?
eve的好玩之處在哪?缺陷又是什麼?有哪些改進的可能?
用一句話介紹爐石傳說和昆特牌的差別?
激戰2中跳跳樂系統有什麼意義?
多益網路的老闆徐宥箴(徐波)是個怎樣的人?

TAG:互聯網 | 數學 | 遊戲策劃 | 概率 | 捕魚達人 |