創作內容

5 GP

最近著手開發的「人品系統」第三代以及課金抽的反思

作者:JL‧真‧維斯坦茲│2016-01-20 23:37:18│贊助:10│人氣:661
都好一陣子完全沒有發過文,這次來說說最近心血來潮開發的「人品系統」吧。

前言


話說我會著手研發「人品系統」的原因很簡單,就是我看到現在的手遊課金抽的手法、機率等愈來愈過火,結果就驅使我的中二病好奇心,想實作一個萬用的系統來把不管現實的還是都市傳說描述的課金系統一一實現,而且藉此機會從技術層面探討一下裡面所帶出的問題和原理,另外做出來的成品也預留會用在非課金抽抽樂的地方(例如遊戲中隨機事件的發生)。

雖然說這系統已經重寫過兩次,但其實還是有發展下去的空間,畢竟之前兩代的版本程式上有點亂,要繼續研究和實作的確有點困難。有見及此最近我編寫了第三代「人品系統」,英文名改稱為「Lucky Player」,意為「幸運的玩家」。顧名思義,這系統一開始的設計對象是用在遊戲的,方針上還是結構上也是以遊戲流暢度為前提設計的。好了,廢話少說,下面逐一部分拆解解說。

結構


機率池和機率控制器


說到「人品系統」裡面最基礎最核心的部分,就是一個會受概率影響的池,每次從「池」裡面抽取到特定物品的機率是可操控的。最簡單的結構就是利用一個以鍵和值組成的字典結構來進行隨機抽取。在字典中,鍵是不可重覆的(但值反而可以),而每個鍵只可以對應一個值。這樣整件事就好辦了:首先把鍵定義成池中每件物品的本身,值則是每件物品所對應的權重,權重愈大,其佔的比例就愈大。每次隨機抽取前先計算全部物品權重的總和,隨機前把隨機值限制在0和總和之間,得到一個隨機值後就逐一「拜訪」每個鍵和對應值,再把權重加到另外的暫存值,當發現暫存值大於隨機值的時候,表示「就是你了」──選中其中一個鍵,再把這健傳回去就已經大功告成了。

不過當然,「人品系統」需要做的可不是那麼簡單。現在這部分要說明的就是另一個重要組成部分──機率調整。要達成能夠每個物品都會自己調整機率,我們要把上段所說的值從純數字改為「機率控制器」,然後每一次準備進行隨機抽取前,先個別問每個控制器現在每件物品應該有多少權重。而且為了方便處理,我把「機率控制器」設計成一個介面,只要在自製的控制器套上這介面,機率池就能夠使用它。以上就是「人品系統」最核心的組成部分了。

人品機率控制器


「人品機率控制器」其實就是一個預先定義好的「機率控制器」然後附帶一個共用的「玩家幸運值處理器」 。每次在隨機前被問到某物品的權重,它會額外先做一個動作:檢查玩家現在的「幸運值」,再把這幸運值除預先定義好的「稀有度」,得出的結果就當作該物品當時的權重傳回。每當隨機完成後,「玩家幸運值處理器」就有事要做了:檢查剛才抽到的物品的「稀有度」,再調整一下「幸運值」──如是稀有物,減少其幸運,反之亦然。當玩家反覆進行抽抽樂的時候,就會做到愈久沒抽到好東西就愈容易抽到好東西,相反抽到好東西後就會變得很難抽到,需要抽大量的一般物來累積幸運。

「宿命修正」控制器


嚴格來說,「宿命修正」並非一個獨立的控制器,反而是依附在「人品機率控制器」的一小段程式。這個設計(或者叫作都市傳說吧)也是挺有趣的:玩家群以一整體來看,當某玩家抽到某稀有品,其他玩家就會很難抽到相同的。就這樣看其實也和上面人品機率控制器差不多,只不過把這「幸運值」影響範圍變成全玩家然後只對應一件稀有品。實現起來也是不難的──只要在「人品機率控制器」裡面加一個「修正值」:起始值是 1,然後每次抽到它的時候就按比例減少,最盡也只會減少到接近 0 但永遠不會是 0,每次「人品機率控制器」被查詢權重的時候則把結果乘以這個修正值才傳回。

可能大家會有疑問,一直抽下去的話,「修正值」豈不是會變得超小?答案是的,但也因為系統會自己不斷調整的關係,每個物品的「修正值」的比例會不相伯仲,得出的結果影響不大,試想想 一 和 二分之一 以及 二分之一 和 四分之一 之間的比例就會明白了,數值大小不一樣但比例一樣的道理。然後相信大家也會有另一個問題,就是系統會自動調整比例,抽過很多次後到不是最後會造成大家權重接近嗎?我能夠回答你是的,但只限無視玩家幸運值的情況下才會發生,為甚麼這樣說呢?因為權重在修正前還是會經過玩家幸運值的調整啊,而每個玩家的幸運值理論上是很難接近甚至一樣的,所以這部分不用操心──不過,如果是在無視幸運值的情況下,上述問題的確是會發生的,所以折衷的做法就是定期重設修正值來避免機率自我被平衡的問題。

試驗


前言也已經說明過我製作這系統的用途之一就是做課金抽抽樂系統的實驗,不過其實也沒甚麼好做的,我只是隨便定義了很多張從容易獲得的到高稀有度的卡片丟進池中。當然所謂實驗結果就是高稀有度難得(平均要數百至數千抽才抽到最高稀有度的),反而其他的就很大量的抽到。你可以說機率甚麼的是自己定的,但我也想說,人家外面的手遊廠就是把機率弄得像這樣,所以值得重課金的去抽嗎?可能課金會使「人品」(幸運值)稍稍提高(事實上我在測試程式裡面有加這樣的邏輯),但公平嗎?玩這種機率遊戲從來沒有說公不公平的,只能看看定義機率的人仁不仁慈了……


後記


儘管這程式庫我在編寫時已經儘量做得跟大家口中的課金抽系統接近(還要私心寫得儘量使結果公平),但實際廠商是如何實現這些系統呢?除非你進去工作過否則也不會知道。

連結


如果大家對上述的系統有興趣的話,可到這裡瀏覽程式和下載。這程式庫是以 C# 寫成的,所以理論上只要把源檔丟進去 Unity 已經能夠直接調用(當然還要另外寫程式它才會運行啦)。另一方面,暫時來說我不會進行其他語言或者平台版本的移植,不過理論上大家可以依照上文描述的結構自行實作。



(與上文無關) 最後想分享一下最近做的音樂 Remix (?

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3078529
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity|程式|C#|課金|抽蛋|抽卡|人品

留言共 1 篇留言

貓貓風 ฅ●ω●ฅ
感覺蠻有趣的OWO

06-22 21:35

我要留言提醒:您尚未登入,請先登入再留言

5喜歡★jlchntoz 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:[2015 開源計劃] ... 後一篇:不專業的介紹一個最近自製...

追蹤私訊

作品資料夾

BHHB南草分戴帽a
https://m.facebook.com/permalink.php?story_fbid=837050470378440&id=100022204830112看更多我要大聲說21小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】