1. 程式人生 > >瀏覽器端轉盤抽獎策略實現

瀏覽器端轉盤抽獎策略實現

由於最近有個網頁端的抽獎推廣活動,抽獎的隨機性是個非自然隨機應該是個公開的祕密了吧,因為公司本著不欺騙,又不能太虧的原則,把幾十臺蘋果或者其他高階獎品全部交給運氣來分配,自己無法控制的,始終是不安心,所以這裡面就需要一些策略來處理。接下來一步步揭祕。
首先丟擲一個無策略的策略,所有的獎品相當於一個數組,再隨機生成一個數字,這時候,獎品已經確定,然後轉盤開始轉動,再停下,恭喜你,中了啥。這就是最簡單的策略,但是這就比較考驗老闆的心臟了,全憑運氣,說不定一天幾十臺就沒了。所以,需要優化。接下來說說怎麼優化。
首先可以為獎品這個陣列加上一個權重,例如
var awardWeights = {
1:{
weight:1,
name:’1等獎’
},
2:{
weight:50,
name:’二等獎’
},
3:{
weight:300,
name:”三等獎”
},
4:{
weight:800,
name:”四等獎”
},
5:{
weight:1500,
name:”5等獎”
},
6:{
weight:10000,
name:’未中獎’
}
};

從調整這個權重,就可以比較好控制中獎概率了,例如這裡的一等獎,概率就只有萬里挑一了,如果老闆再小氣點,可以把權重再調小一點,不過別太刷使用者了哦。
雖然這樣控制力度細化了點,但是還是不好控制,假如你今天只想出去兩臺iPhone,但是概率論的事情誰都說不準,所以,需要進一步優化。
我們可以在資料庫中生成今天所有的抽獎資料,例如10個一等獎,100個二等,1000個三等獎,其他的5000個都是未中獎。資料庫中當天就有6110個數據,接下來使用者抽獎的時候在這6110個記錄中隨機挑一個就可以了,全在掌控之中。
這兩種方式也可以靈活地糅合在一起產生新的更好的策略,這裡只做一個拋磚引玉,就不進一步討論了。到目前為止是抽獎的核心,隨機。瀏覽器端的轉盤也很重要。接下來聊聊瀏覽器端的工作。
轉盤,肯定是要轉,總不能勻速轉吧,所以,顯而易見,轉盤的核心在於轉動的策略。轉盤轉動,一般是在一定的時間內,由快逐漸變慢。這裡可以使用多次貝塞爾曲線來設計旋轉的速度變化(如下圖)。
通過改變P1(x1, y1)和P2(x2, y2)的座標可以改變貝塞爾曲線的變化


那麼,我們得找到x,y這兩個維度,仔細分析,轉盤轉動是在一定時間內,轉動的時候角度會變化,所以,時間和角度就是這兩個維度,所以p1=(開始時間,開始的角度),p2=(停止時間,停止的角度)。停止的時間有我們自己確定,停止的角度自然是根據我們的獎品來定,抽到iPhone了,自然要停在iPhone那個位置了。(具體的貝塞爾實現有興趣可以研究一下,這裡不詳細解釋)
到這裡為止,就是轉盤抽獎的核心實現思路了,謝謝,如果有誤,請隨意指點。