我寫這篇文章的原因主要是因為我看到現今的抽卡系統不夠「公平」,故此略為研究一下到底如何使抽卡類系統能夠做得更理想。
一般而言,玩家都會覺得抽不抽到想要的卡均是「人品」作祟,經常抽到稀有品稱為「歐洲人」、抽不到的則是「非洲人」,因此下面在描述各系統的同時亦會探討一下如何更能反映「人品」。
以現今一般遊戲的課金抽卡的系統的話,我的立場是奉勸適可而止的,甚至說少抽為妙。問我原因的話其實也不離開概率這概念。
抽卡系統的實作方式很簡單,主要構成部分就只是一個卡池,所謂的卡池就是單純一個陣列,陣列中每一項都會有兩個欄位,其中一個代表那張卡片,另一個則是「權重」或者「概率」,用來控制該卡的出現機率。每當有人要抽卡時,系統需要做的是生成一個 (0 ~ 全部權重的總和) 的隨機數值,然後另外開一個臨時變數從零開始逐個權重相加,直到這變數值小於隨機值為止,而當前指針停在哪張卡片就是玩家「抽」到的卡片。
雖然整件事窄看好像是玩家抽到的,但實際上只是由系統根據機率隨機派發一張卡給玩家而已,不過這一點我並不想在這裡詳述,畢竟這並非重點。相對的重點是卡池的卡並不會因為大家不斷抽卡而有任何數量減少(除非官方人員對卡池上的數值動手腳,包括十抽會必中稀有以上的這種情況就例外),所以你第一次抽到某張卡跟你第 N 次抽到某張卡,機率其實一樣的,並不會因為你太久沒抽到某張卡,其他卡抽了很多而使機率增加。數學上來說這卡池的卡是無限的,即使機率是 0.1% 也不代表每抽 1000 次就會有一次抽到這張卡,更加不用想 0.1% 的分母是多少。再看看若是以投資形式去不斷抽(課金),最佳結果是一次即有想要的,但最壞結果卻的是無限次才抽到想要的,看到這裡的結論很明顯……以最壞結果來計算,最高成本是無限無誤。
為何我身為一個遊戲程式員也會這樣奉勸別人別抽太多呢?這不是在倒業界、倒自己的飯碗嗎?原因其實很簡單,因為這本來就不是遊戲,反而是一種涉及現實金錢的賭博系統,只是大家都在以「普及的電子遊戲形式」做這種壞風氣的系統而已,可以說已經失去原本遊戲開發出來的意義。再者,以消費者角度來看,其實不斷把錢放在一件很大機會得不到的虛擬物品上值不值得?反而我想大家多多支持的是一眾獨立開發的小品遊戲,又或者大公司製作的大型高質遊戲,這些才是真正值得投資的遊戲,也是為何我自己約法三章不去課一些沒任何保證一定得到的虛擬物品。
大約於兩年前,我根據大家所認知的「人品」編寫了一套簡單的程式庫,以下是其規則:概率池中所有的物品都是浮動機率的,不過亦有一個基數作為初始機率。每當玩家抽到稀有品的時候,把所有稀有品的機率降低,其他的則提高;反之亦然。
同時亦有人提出過,「人品」其實還有另外一個參數,稱為「宿命」,而這參數影響機率的事件則被稱為「宿命修正」,簡單來說就是當一個人抽到某件稀有品的同時,物品的存在份額就會被削減,形同物品被拿走一般,不過經過特定時間後又會像放射性物品的半衰期那樣漸漸回復。
總結這兩部分,可以得出以下結論:一件物品的機率是可以由累積以來所抽到的物品的稀有度以及其他人抽到的物品(有沒有重覆)來定奪。所以這套初代「人品系統」構成部分有:玩家個別的機率池、還有控制「宿命」的個別物品公用參數。
參考上述系統的結構,對所有物品的機率造成的效果可以看得出,整體抽到某物品的機率其實會變得平均,因為以上規則的結果就是低機率時會自然提升、高機率時則會減低而已,這與我想做的效果有點偏離。故此我也構思過另一種模式,這模式著重的是「確立機率」,又名「補底」,用意就是保證一件物品在一定次數抽的事件中一定會抽中至少一次。實作方法也不難:先定下隊列的大小,通常是全部物品概率的最小公倍數,然後根據物品概率當作佔有份量把這隊列填滿,再把這隊列洗牌。然後每次玩家來抽物品時則從隊頭拿出物品,直到隊列清空為止,重覆以上洗牌動作。這做法的好處就是「保底」;壞處就是不會有好事發生,只有平平無奇的抽到。為何這麼說呢?試想想如果一件稀有物品的機率為 0.1%,物品隊列有 1000 個存放位置,那豈不是至少抽過 1000 次後再洗牌才會抽到同一件物品?因此這不是一個最好的做法,但也不至於太差。
鑑於上述的弊端,故此「回頭是岸」是一個比較好的選擇,取消隊列的框框,還原成修改機率的設計,不過如果只根據初代系統的規則又會造成過份「公平」的情況,失去概率原本應有的效果。綜合以上的嘗試,我得出使用以下作為所有物品概率的自我調整公式:
這規則會造成這樣的效果:抽 1000 次 0.1% 機率的物品「基本上」至少會中一次,而這是沒有絕對的。因為整套系統中,所有物品概率都會套用以上公式,換句話說,只要抽不中就會根據抽不到的次數倍增原機率。就以上述例子來說,即使第 1000 次抽不到特定物品也好,機率池中還是有其他佔有一席的物品存在,不管機率被放到多大,仍然不能完全抹殺其他物品的機率。
不同於上述的方法,這是一個改良過的抽獎流程,旨意是減少隨機系統對結果的直接影響力,反之是由玩家定奪結果。做法如下:首先是不同於上述修改機率的系統,這裡的全部機率是固定的,但每次抽獎前「莊家」(一般來說是伺服器端)先洗牌,再讓玩家在遊戲中提供一個{0~1}之間的數字(提供方式不限,舉例說可以用一個均速轉動的轉盤然後由玩家按停的方式決定),再由「莊家」根據這數字拿出擲中的物品。
這方法因為是由玩家直接提供一個數字來得出結果,所以可以說是幾乎完全由玩家的「人品」或者「手氣」直接造成的結果,雖然過程上玩家一直都是「矇眼狀態」;而隨機系統在這裡的角色與上述方法完全不同,在這裡就只是把機率池中的物品進行洗牌,後續完全由玩家操作,故此只能說隨機系統只直接影響到過程,而非直接影響結果。
也有人提出過這樣的一個系統套用在遊戲中會非常耗用伺服器資源,我也因此想到一個對策:為免結果過份單一又不會耗用過多資源,洗牌動作只會在玩家抽到稀有物品時觸發,一般情況會繼續沿用上次洗好的機率池。
可能有人說,抽個卡或者抽個獎而已不需要這樣大費周章的研究,不過我認為對於某些人來說公平而且合理的結果會比較重要,所以的確有必要審視一下整體的實作方法。雖然說抽卡類遊戲是遊戲界的毒瘤,不過這已經不是這裡探討的話題了。上述並沒有一個方法是完美的,不過如果真的套用在遊戲使用的話會比較接近大家想看到的結果。