背景是某天突然收到朋友的資訊, 說最近迷上了某款博彩遊戲, 類似於大街小巷的水果機, 說我是IT人士, 趕緊幫忙寫個外掛大家賺點錢。
一開始我嗤之以鼻, 我認為這種看臉的概率問題沒必要浪費時間, 但朋友說和一般的水果機不同, 死纏爛打非讓我研究下, 於是只能勉強答應了。
其中8個選項就是我們下注的8個項,
總額:表示該遊戲房間內例如有100個玩家, 這100個玩家所有押注選項1的總額是多少,
倍率:例如我壓了100分選項3, 那麼開獎開的是選項3, 我就得到8000分。
總所周知莊家(遊戲公司)肯定是穩賺不虧的,
選項後面括弧內的數位是倍率, 括弧後面帶小數的數位是該選項押注總額, 單位是萬。
經過幾天24小時不間斷的抓取, 我們有了一定數量的樣本, 寫個簡單的統計演算法開始分析:
果然不出所料, 莊家為了保障利益, 儘量會選擇總額低的開, 實際上其他的可以不用看, 就看乘以倍率之後的名次關於開獎的概率分佈就行了,
於是我們再自動控制鍵盤滑鼠, 同時抓資料, 因為下注總額是即時的, 在開獎前一秒按照我們統計的概率去下注就行了,
假如這次倍率最低為4倍 , 那麼我們可以押概率最高的4個, 中獎率高達73%,
如果最低為6倍, 那麼我們可以押概率最高的6個, 中獎率高達90%!而且即使開獎的是最低倍, 我們也不會虧。
於是我就開著程式一直掛著, 不斷的中獎, 分數也越來越高, 抱著明天坐等收錢的心態就去睡覺了, 掛一夜看看到底能賺多少。
。 。 。 然而還是太天真了, 第二天起來一看, 分數原地踏步, 立馬看了下日誌, 原來如此, 先讓你贏點, 然後就會輸, 輸多了再讓你贏, 幅度控制在20%左右, 也就是最多贏120%, 就會讓你輸。
按照統計的客觀開獎概率, 為什麼會出現這種情況呢, 很不科學, 我開始重新審視演算法, 也在思考是不是忽略了什麼,
重點就是遊戲房間內好像有幾百人, 好像很多人玩很多人贏錢的樣子, 說話的就那麼三五個人, 其他人不管輸贏從不說話?一直24小時全部線上?不管任何時間段押注全是秒押?其實全是機器人!
也就是系統生成的玩家, 他們的存在一方面是充門面吸引玩家, 最重要的目的是説明系統下注, 混淆押注總額, 所以截取封包資料保存的樣本全是假的!
你根本無法獲取真實玩家的押注總額, 那麼服務端就可以根據真實的下注情況來選擇讓少部分人贏, 大部分人輸, 甚至可以根據不同的玩家發送不同的開獎結果。
核心思路應該是
int UserScore=User.Score;
……
if(UserScore*1.2>User.Score)
{
必輸!
}
老鐵, 懸崖勒馬, 回頭是岸。