你是否認為自己轉蛋運氣很差,身邊都是10抽20抽泳裝出貨,自己卻200抽0三星,或連續出現三隻真步來亂的慘況?
對於這種現象,通常會有「命注定」、「挖礦理論」、「系統是不是有問題or工程師的陰謀」,「我的是非洲號」等各種幻覺,不信邪的會繼續課好幾單拚出貨,結果下場是19N
於是,非洲人的同伴如我寫了這篇,歐洲人就不用往下看了,看完說不定蛋運會下降(?)
先說結論:非洲人不要瘋狂般的連按10連抽,自覺運氣差請關掉遊戲,隔些時間再上去抽!
當然玄學信不信看個人,而接下來的內容就是我要向各位解釋,為何我會有這種結論。
這裡探討的不是你的業障問題,而是伺服器端程式是如何計算機率的?首先各位可能聽過所謂的「亂數」,但是你懂電腦程式中的亂數是什麼意思嗎?你知道「亂數」是如何產生的嗎?
電腦中的亂數是透過演算法計算出來的,只要將seed代入就會得到亂數。前面這段話包含一些專有名詞,講白話一點:亂數是透過數學式計算出來的,只要隨機代入變數就會產生亂數。
所謂的數學式就像:
5a + 6
a代入1得11
a代入2得16
OK,由於計算式是固定的,代入相同變數(seed)會算出相同結果,故程式不該重複使用相同seed來產生亂數。實務上伺服器程式會接收各種硬體輸入充當seed,例如鍵盤、滑鼠,因為我們認為鍵盤鍵位的觸發是隨機的,是不可預測的,因此拿這個隨機值當成seed計算亂數。
如果重複使用seed,或是演算法不夠好,會發生什麼事情呢?
這就好像把糖扔進麵粉後沒有充分拌勻,烤出來的餅乾有些很甜,有些卻沒味道。看到這裡,有沒有一種似曾相識的感覺
TMD周圍同事轉蛋都好香,怎麼自己扒出來的都是渣渣
實務上seed的採樣與亂數演算過程複雜得多,不在本文討論範圍內。但是請認清:電腦的亂數未必真的亂,它只是代入一個不可預測的因子,獲得不可預測的結果。
OK,接下來,為什麼說要關掉遊戲,等待一段時間再連上去抽呢?
通常伺服器計算亂數時是很消耗資源的,而且也沒那麼多seed可以滿足所有玩家使用。因此實務上伺服器會預先準備一張「亂數表」,大量計算亂數後填充至表內,等待玩家轉蛋時再從這張表依序取出亂數。
換句話說,這張表產生時就已經決定了許多事情,例如玩家會不會當歐洲人百發百中,或是連續各種歪。
作法一:同一亂數表不停重複使用(最糟糕的作法!)
為了節省伺服器資源,或者工程師蓄意這樣設計,只在伺服器開機時算出唯一一張亂數表,然後重複使用該表直到關機。更誇張一點是永遠固定死一張亂數表。
這種設計唯一好處是伺服器幾乎沒有開銷,再多人同時轉蛋也不會出現卡頓現象。但,假設這張亂數表沒弄好,亂數不夠亂,會發生某些玩家好幾百抽都零3星的現象,同時又有人單抽把老婆帶出場。
假設這唯一一張亂數表3星出貨率換算出來是1%,那麼所有人都會感受到老婆特別難抽,懷疑機率是不是被偷改過,其實不是。不過這種作法現在應該很少見了。
作法二:在系統產生新亂數表之前,重複使用舊表
seed採樣與亂數計算是需要花時間的,填充一張亂數表按照表的容量大小,可能會花費幾秒到幾十秒的時間。
這麼長的時間當然不能讓成千上萬的玩家排隊等待!因此舊表耗盡時,在新表還沒填充完畢之前,繼續從頭利用舊表的內容,這麼做大量玩家轉蛋時也不會感受卡頓,同時改進機率的分佈,是目前主流作法。
聰明的你馬上能懂,假設同時轉蛋的人太多,同一張舊表重複使用率就會增加。為何我建議非洲人不要瘋狂連抽?因為TNND你就是在重複使用那張出貨率1%的舊表!
那麼,為何要特地登出遊戲一段時間呢?
有些伺服器程式在玩家登入時,會將亂數表直接綁到你的連線上,讓你進入非洲人的世界線。這種如果不重登,你就等著抽到棄坑。
作法三:永遠保證使用新的亂數表
開銷很高,是牽涉到密碼學才比較需要用到的技巧,不太可能用在遊戲中。
我不知道這遊戲在伺服器端用的是哪種作法,在無法確定哪種作法的情況下,建議重登來避開不幸的狀況。
以上
祝福各位轉蛋順利
我要去打撈我的黑騎了(哭)