老鐵,你今天贏錢了嗎?大數據分析博彩遊戲的服務端算法。

背景是某天忽然收到朋友的信息,說最近迷上了某款博彩遊戲,相似於大街小巷的水果機,說我是IT人士,趕忙幫忙寫個外掛你們賺點錢。算法

一開始我嗤之以鼻,我認爲這種看臉的機率問題不必浪費時間,但朋友說和通常的水果機不一樣,死纏爛打非讓我研究下,因而只能勉強答應了。日誌

根據連接下載了遊戲,是客戶端遊戲,雖然也是水果機,但的確有點不一樣,小店裏的水果機是1對1的關係,而這個是多對1,一個房間內有N個玩家同時玩,下面是這個水果機的大概玩法:blog

其中8個選項就是咱們下注的8個項,排序

總額:表示該遊戲房間內例若有100個玩家,這100個玩家全部押注選項1的總額是多少,遊戲

倍率:例如我壓了100分選項3,那麼開獎開的是選項3,我就獲得8000分。下載

 

 

總所周知莊家(遊戲公司)確定是穩賺不虧的,因此咱們只能從別的玩家手中賺錢,下面開始截取封包並記錄數據,冒泡遞減排序:程序

選項後面括號內的數字是倍率,括號後面帶小數的數字是該選項押注總額,單位是萬。im

 

通過幾天24小時不間斷的抓取,咱們有了必定數量的樣本, 寫個簡單的統計算法開始分析:統計

果真不出所料,莊家爲了保障利益,儘可能會選擇總額低的開,實際上其餘的能夠不用看,就看乘以倍率以後的名次關於開獎的機率分佈就好了,數據

因而咱們再自動控制鍵盤鼠標,同時抓數據,由於下注總額是實時的,在開獎前一秒按照咱們統計的機率去下注就好了,

假如此次倍率最低爲4倍 ,那麼咱們能夠押機率最高的4個,中獎率高達73%,

若是最低爲6倍,那麼咱們能夠押機率最高的6個,中獎率高達90%!並且即便開獎的是最低倍,咱們也不會虧。

 

因而我就開着程序一直掛着,不斷的中獎,分數也愈來愈高,抱着明天坐等收錢的心態就去睡覺了,掛一晚上看看到底能賺多少。

。。。然而仍是太天真了,次日起來一看,分數原地踏步,立馬看了下日誌,原來如此,先讓你贏點,而後就會輸,輸多了再讓你贏,幅度控制在20%左右,也就是最多贏120%,就會讓你輸。

按照統計的客觀開獎機率,爲何會出現這種狀況呢,很不科學,我開始從新審視算法,也在思考是否是忽略了什麼,直到無心中看到了日誌中封包數據。

重點就是遊戲房間內好像有幾百人,好像不少人玩不少人贏錢的樣子,說話的就那麼三五我的,其餘人無論輸贏從不說話?一直24小時所有在線?無論任什麼時候間段押注全是秒押?其實全是機器人!

也就是系統生成的玩家,他們的存在一方面是充門面吸引玩家,最重要的目的是幫助系統下注,混淆押注總額,因此截取封包數據保存的樣本全是假的!

你根本沒法獲取真實玩家的押注總額,那麼服務端就能夠根據真實的下注狀況來選擇讓少部分人贏,大部分人輸,甚至能夠根據不一樣的玩家發送不一樣的開獎結果。

核心思路應該是

int UserScore=User.Score;

……

if(UserScore*1.2>User.Score)

{

  必輸!

}

 

老鐵,回頭是岸,懸崖勒馬。

相關文章
相關標籤/搜索