顯示廣告
隱藏 ✕
※ 本文為 diabloex.bbs. 轉寄自 ptt.cc 更新時間: 2020-06-02 16:48:29
看板 C_Chat
作者 Satoman (沙陀曼)
標題 Re: [閒聊] 賭徒謬誤:關於抽卡的機率
時間 Mon Jun  1 21:38:56 2020



meowyih: 說真的, 程式攤開來九成九就一行 if rand()%100 > 9906/01 20:53
meowyih: { 喔耶出運啦! } 玩家看了也不會覺得公平的 :>


其實大部分都不是,因為rand()出來的東西是偽隨機,理論上直接這樣寫會出問題。


至少我知道的專案都是用亂數表加上種子來處理,盡量讓結果接近真隨機。

(我文組也不是寫程式的,這方面的東西有老大要解釋的麻煩幫個忙www)


然後這個種子通常是用時間來抓,
簡單來講就是某些手遊有同時間抽卡會有相同結果的都市傳說,這是有可能的。


這樣看起來好像就是所謂的歐洲時間?
但其實時間的種子通常會以秒以下來抓,真的有歐洲時間那也可能只是毫秒等級的時間。



當然,亂數是有可能被破解的。

比較有名的例子就以前的PM。
用破解亂數運作、調整時間的方式抓自己理想體質的PM曾盛極一時。

但是前陣子GF調整之後破解PM亂數變成幾乎不可能的任務,所以亂數世代也隨之終結。



這部分我也問過程式,他們幾乎都是說要破解刻意加強設計的亂數是幾乎不可能的事。
所以還是多做好事,扶老婆婆過馬路最實在,起碼有幫助到別人 ==






然後卡池的內容也不會寫在程式碼裡,因為那是我們這些雜工企劃要處理的東西。


基本上大部分的遊戲資料都是用表格在管理,卡池內容也一樣。

卡池其實不是讓你直接抽到商品。
而是先抽塞滿相同機率的商品的箱子,再從箱子中抽取商品這樣。
(避免一張搞到又臭又長,debug的時候看到san值歸零)




只是我高中的時候就把數學課本完全丟掉了,
不太確定這樣設計會不會影響到抽取的期望值計算www

--

(と・てノ)  翼龍欸

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.247.120 (臺灣)
※ 文章代碼(AID): #1UrGJopY (C_Chat)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1591018738.A.CE2.html
guogu: 以ms當單位加上網路延遲基本不太可能破啦1F 06/01 21:41
battlecat: 翼龍怎麼什麼都懂= =2F 06/01 21:41
marchcharlie: 到頭來都是抽下去才知道3F 06/01 21:42
ZMTL: #1Qdwpmar (C_Chat)  以前討論過一串還在就是4F 06/01 21:44
Re: [問題] 單機遊戲用seed生成的假亂數表好處是? - 看板 C_Chat - 批踢踢實業坊
[圖]
[圖]

首先要有一個觀念 目前沒有所謂的真亂數 程式裡用隨機函式(後面用rand()代稱)產生的亂數全都是假亂數 rand()有很多種,但不論哪種都是人寫出來的 有自己寫過的就會知道流程大概都如下
 
s11924: 你說的時間是time(NULL)那個嗎?5F 06/01 22:14

理論上是吧,但是不一定每個專案都只用時間

Jotarun: 真的是文組 笑死6F 06/01 22:50
Jotarun: 種子用時間跟所謂運氣的「歐洲時間」根本沒關係 = =

我現在深刻的理解讓理組閱讀文章有多困難 ==
※ 編輯: Satoman (1.161.247.120 臺灣), 06/01/2020 23:26:36
school4303: 上面假設的歐洲時間是沒有錯的啊因為亂數種子是一樣的8F 06/01 23:48
Jotarun: 講錯就說人家看不懂耶www9F 06/01 23:49
school4303: 前文的假設是seed只用時間 一樣的seed跑出來的結果會10F 06/01 23:50
school4303: 是一樣的
Jotarun: seed一樣只是用同一個表 同一個表你跑好幾次rand結果12F 06/01 23:54
Jotarun: 也不會一樣
Vulpix: 咦?你認真的嗎?14F 06/01 23:57
school4303: 這就要看你怎麼實作rng了啊 假如你用的是傳統的(7^5*s15F 06/01 23:58
school4303: eed)mod(2^31-1)就會一樣了
Jotarun: 不是 你實作不太可能是跑一次rand就換一個seed吧17F 06/02 00:05
school4303: 一般是X_i+1=rng(X_i)吧18F 06/02 00:07
Jotarun: 對啊 所以你就算同一個時間 每個user都跑一次rand也不會19F 06/02 00:07
Jotarun: 一樣啊
school4303: 上一次的rng的output作為下一次的seed21F 06/02 00:08
school4303: 可是上面的假設是rng(time())啊
school4303: 當然 他沒有講的那麼清楚 但是我看下來是這個意思
Jotarun: 問題是實作沒有人會這樣啊24F 06/02 00:12
Jotarun: 你每次都換seed就變成一個跟時間1-1的函數完全不隨機了
school4303: 實作不會這樣跟上文這樣討論是兩回事啊26F 06/02 00:22
school4303: 我看著手機上的圖片喊我婆 現實中我還是一個人睡覺R
school4303: QQ
qwe19272375: crypto 用的 generator 通常也不會讓你自己刻29F 06/02 00:25
qwe19272375: 重點是觀念要對 call function 不要出錯 RTFM
Jotarun: 重點是這個人每次講錯就先嗆別人 先嗆不會讓你變成對的31F 06/02 00:27
school4303: ......32F 06/02 00:33
hollowland: 我個人身為寫程式的(沒有寫亂數相關就是) 看不太出來33F 06/02 00:35
hollowland: 原po講的架構有什麼錯啊?
hollowland: rand我印象沒錯的話 輸入同樣參數給出的結果是相同(C
Jotarun: 就實際上有點規模的遊戲都不可能會有所謂歐洲時間36F 06/02 00:37
hollowland: 不同的程式語言或不同function倒是不一定37F 06/02 00:37
Jotarun: 上面已經講過了 我再講一次 你不會每次跑rand都重設seed38F 06/02 00:37
hollowland: 但是如果以原po的講法實作的話應該是這樣的沒錯39F 06/02 00:38
Jotarun: 那樣會變得更不隨機40F 06/02 00:38
hollowland: 不管實務上是怎麼做(我也說我工作沒有寫亂數相關 只是41F 06/02 00:39
Jotarun: 啊原Po講的就是錯的啊42F 06/02 00:40
hollowland: 偶爾會摸到)43F 06/02 00:40
hollowland: 但是原Po講的理論 錯在哪邊我也看不太出來
hollowland: 題外話我看不太懂跑rand要重設seed是什麼意思
hollowland: 是每次都要重置到初始值還是每次都給不一樣的值?
Jotarun: 原Po的理論要成立只有你跑隨機之前都會用現在時間當種子47F 06/02 00:43
Jotarun: 然後剛好這個公司很爛只用標準rand 才會在同一個時間
Jotarun: 得到同樣的結果
hollowland: 原po的確是這樣講沒錯啊 所以才說"這情況" "可能" 會50F 06/02 00:44
Jotarun: 實際上兩者在稍微正常一點的公司都不會發生51F 06/02 00:45
hollowland: 有歐洲時間 然後後面也接了大部分公司會弄更複雜的52F 06/02 00:45
hollowland: 亂數讓這件事不會發生
Jotarun: 第一個前提就已經不可能了...54F 06/02 00:46
hollowland: 等等 所以你講了這麼多 只是想講實務上不會拿時間當55F 06/02 00:46
hollowland: 參數丟進函式這樣而已??
Jotarun: 對啊57F 06/02 00:47
Jotarun: 你不能把沒有人會作的事情因為做得到就說可能啊
hollowland: .... 我現在處於一個又震驚又不知道該說什麼的狀態59F 06/02 00:48
hollowland: 不曉得該說是溝通問題還是我中文能力還不夠強....
featherM: 原po講的就是如果這樣做就可能有產生歐洲時間 你在那邊61F 06/02 01:00
featherM: 實務上不會這樣做
Jotarun: 就沒有這種如果啊63F 06/02 01:02
TED781120: 問題FGO真的有發生這種事,實體活動同時按抽的兩人抽64F 06/02 01:04
TED781120: 出完全一樣的內容。
TED781120: 所以真的有這個如果,真的有人這樣做。
TED781120: 退一萬步說這個做法很爛可以,但講說一定沒人這樣作我
TED781120: 覺得太武斷了。
Jotarun: 就算發生了也絕對不是那樣 比較可能是其他原因69F 06/02 01:08
TED781120: 只要做的到就沒有甚麼叫做絕對不會。70F 06/02 01:10
TED781120: 講難聽點日本很多電腦方面的能力比台灣是差很多的。
TED781120: 你自己也講了是「正常點的公司不可能」,抱歉,有些公
TED781120: 司就是那麼不正常。
TED781120: 你不能把理論上可能的事講成絕對不可能。
TED781120: 這才是所謂理組的邏輯。
Jotarun: 抽卡遊戲的命根子就是抽卡 你說會隨便亂搞那我隨便了76F 06/02 01:14
hollowland: 其實請不要小看人類智商的下限 xd77F 06/02 01:16
TED781120: 誰說命根子就不會隨便搞的。78F 06/02 01:16
hollowland: 工作上其實偶爾都會遇到測試模組因為可以跑 然後也沒79F 06/02 01:17
TED781120: 如果你夠清楚FGO這類日本抽卡遊戲的狀況就不會覺得有80F 06/02 01:17
TED781120: 什麼不可能了。
hollowland: 時間修就這樣把測試code丟上正式環境了...(切腹82F 06/02 01:17
hollowland: 有很多蠢到爆的bug都是因為時間跟管理壓力造成的
TED781120: 整個遊戲一開始在開發時都不被當一回事,所以根本沒投84F 06/02 01:19
TED781120: 注什麼心力在做根本當免洗隨便搞,結果莫名靠IP死士硬
TED781120: 是撐到活起來,大概就是這種狀況。
TED781120: 抽卡對抽卡遊戲是命根子,但在開發期對老闆跟團隊別說
TED781120: 抽卡環節整個遊戲都只是個免洗企劃,這種案例多的是。
TED781120: 我不是寫程式的是做圖搞設計的,我進上一家公司前也以
TED781120: 為正常點的公司會把資料跟圖紙好好歸檔啊,製造業你工
TED781120: 程資料可是命根耶。
Jotarun: 你們說的都不是會賺錢的事情啊92F 06/02 01:23
TED781120: 阿結果?一家40年老企業就是都沒做然後人家賺錢賺到現93F 06/02 01:23
TED781120: 在,存在即合理我能怎樣。
Jotarun: 不過真的扯太遠了 隨便啦95F 06/02 01:23
hollowland: 他媽的就是 我跟你保證...96F 06/02 01:24
Jotarun: 所以你說因為趕時間有bug導致歐洲時間我信啊97F 06/02 01:24
TED781120: 實際上就是跟賺錢有關啊。98F 06/02 01:25
hollowland: 我是不曉得你家公司有多威猛 但是小公司管理一蹋糊塗99F 06/02 01:25
Jotarun: 但是一開始設計就會有歐洲時間那是不可能的100F 06/02 01:25
hollowland: 然後code一堆奇怪東西根本很正常101F 06/02 01:25
hollowland: 設計大概只跟你講 亂數抽卡你信不信
TED781120: 那不叫一開始設計就有歐洲時間,設計的人就是廢到不知103F 06/02 01:26
TED781120: 道會搞出問題這還比較可能。
hollowland: 沒錯 (狂點頭105F 06/02 01:26
TED781120: 我以前也以為大公司的工程師多厲害啊,結果碰到台○電106F 06/02 01:26
TED781120: 那群北七……
Jotarun: 反正我只是來罵原Po的 你們隨意108F 06/02 01:27
hollowland: 然後寫code的是剛進來的菜鳥 連rand怎麼寫現場google109F 06/02 01:27
hollowland: 後續會發生什麼鬼事根本不是他有辦法知道的事
TED781120: 不就是你要罵的根本沒罵的嗎。111F 06/02 01:28
hollowland: 我是沒到過那種真的管理很嚴謹的企業 但是我的經驗告112F 06/02 01:31
school4303: 看起來變成像是對人不對事了...就這樣吧113F 06/02 01:31
hollowland: 訴我小公司絕對沒有什麼 "正常來講不會發生"114F 06/02 01:31
hardyuse: "抽卡遊戲的命根子就是抽卡 你說會隨便亂搞那我隨便了"115F 06/02 01:32
hardyuse: 只能說呵呵
TED781120: 別說小公司,有的時候大公司也是讓人匪夷所思。117F 06/02 01:33
TED781120: 因為大公司有時候決定標準的根本不懂工程實務。
zz860619: 如果這個世界大家都是這樣理所當然的在思考,那我想世119F 06/02 01:34
zz860619: 界也不會那麼亂了
TED781120: 比方說某間供應商出錯以後就規定所有同型產品都要一致121F 06/02 01:35
TED781120: 超高標準,結果之後因為這種超高標準在某些尺度完全做
TED781120: 不到,卡死自己研發跟品保,然後工程師完全跟上層溝通
TED781120: 無效。
hollowland: 然後上層只負責出一張嘴 責任都不是他的(O125F 06/02 01:37
TED781120: 偏偏台灣這邊供應商很誠實都說做不到,支那那邊都是跟126F 06/02 01:37
TED781120: 你說可以但實際上做不到,然後就全部轉單過去,然後出
TED781120: 事以後回來找台灣幫忙,想轉回台灣然後別部門又再要求
TED781120: 台灣要做這個標準無限循環哈哈哈。
hollowland: 靠杯這我超有即視感的xddddd130F 06/02 01:38
hollowland: 果然這世界運作的模式都很像(o
TED781120: 欸你說他們大公司工程師薪水那麼高成天做這種無用功是132F 06/02 01:38
TED781120: 怎麼賺錢的?我也不知道,反正人家是跨國大公司不是我
TED781120: 能理解的。
gn00399745: 我朋友在台灣公司寫遊戲 他們就是寫像文中一樣的程式135F 06/02 09:01
gn00399745: 碼 他們的遊戲很紅 排行榜上也有
JamesChen: 完全亂扯137F 06/02 09:25
wei115: 現代硬體很多都內建硬體亂數器了,實作上直接去亂數池撈138F 06/02 11:34
wei115: 亂數當種子八
zxc1020305: 抽卡遊戲的命根子是抽卡(X) 卡面(O)夠香就會砸錢抽140F 06/02 15:06
zxc1020305: ,誰跟你算數學
silentlich: rand()就是亂數表阿,用之前要選種子。你說用rand會有142F 06/02 16:40
silentlich: 問題所以用亂數表+種子???你真的知道你在說啥嗎

--
※ 看板: diabloex 文章推薦值: 0 目前人氣: 0 累積人氣: 195 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇