[問題] 單機遊戲用seed生成的假亂數表好處是?

看板C_Chat作者 (夜風/瀟湘 VR板已經開板!)時間6年前 (2018/03/07 11:50), 6年前編輯推噓98(980245)
留言343則, 66人參與, 6年前最新討論串1/9 (看更多)
嗯,雖然我是APP工程師,但大學不是唸本科畢業後才半路出家的, 對這點真亂數、假亂數以前耳聞過討論卻沒什麼概念,剛好跟遊戲有關想到就問一下。 首先舉例使用假亂數表的遊戲,以下有稍微簡化過程: 1.魔物獵人:世界 「煉金」功能是拿X個珠子生成三顆新的珠子,存檔讀檔結果不會變。 後來被發現有一張表,像這樣 A B C D E A A A C 如果你是這次煉金出來是ABC,下次煉金出來是DEA,下下次煉金出來是AAC 那你可以先不練金,去打兩場任務出來就會變成AAC。 (實際上打任務推進的序列是1、1、2輪迴,按下不提) 細節:https://forum.gamer.com.tw/C.php?bsn=5786&snA=137873 2.神奇寶貝 「生蛋」功能是公母方配種生出子代,特定變因固定下存檔讀檔結果遺傳項不會變。 父母都有 A B C D E F六項能力,分別遺傳父母的哪幾項在變因固定下是不會變的, 但變因不包括父母是誰,所以可以確認會遺傳哪一項後再更換父母取得特定遺傳的子代, 進階一點用法就是找到第XXXX次會生出色違後, 用低步數就生出來的神奇寶貝跳過中間不需要的部分, 在指定的位子再更會為要的神奇寶貝快速取得色違。 細節:https://home.gamer.com.tw/creationDetail.php?sn=3427102 那問題來了, 如果說是避免玩家用SL大法來硬洗出想要的成果,卻反而造成未來成果會被預測, 難道單機遊戲做不到真正在產出結果當下進行亂數,或者亂數表假亂數表有什麼優點嗎? 其實對這問題有疑問好久了w 很多人說MHW洗珠子無聊會消耗熱情,但經過PM的洗禮我真的覺得還好XD 順帶一提,很多線上遊戲/網路遊戲的都市傳說有時候我不會完全不信的原因也是這個。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.209.137 ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1520394647.A.39C.html ※ 編輯: ZMTL (118.163.209.137), 03/07/2018 11:51:26

03/07 11:52, 6年前 , 1F
為了方便 就這樣
03/07 11:52, 1F

03/07 11:52, 6年前 , 2F
可預測有時候是優點啊
03/07 11:52, 2F

03/07 11:52, 6年前 , 3F
電腦就做不出真隨機的 什麼公式都只是用來算出要挑「
03/07 11:52, 3F

03/07 11:52, 6年前 , 4F
亂數表」的哪一格
03/07 11:52, 4F

03/07 11:52, 6年前 , 5F
因為比較簡單,搞得太複雜又沒好處,平白浪費時間與空間
03/07 11:52, 5F

03/07 11:52, 6年前 , 6F
比較好寫
03/07 11:52, 6F

03/07 11:52, 6年前 , 7F
電腦就弄不出真隨機....
03/07 11:52, 7F

03/07 11:53, 6年前 , 8F
以我現在開發app而言,下個亂數指令怎麼想都比用seed建表方
03/07 11:53, 8F

03/07 11:53, 6年前 , 9F
便啊XD
03/07 11:53, 9F

03/07 11:53, 6年前 , 10F
mh以前就有各種亂數調整刷護石
03/07 11:53, 10F

03/07 11:53, 6年前 , 11F
因為亂數表比你舉的例子大多了 你要預測啥?
03/07 11:53, 11F

03/07 11:53, 6年前 , 12F
而且電腦用不了真隨機 只能盡量接近
03/07 11:53, 12F

03/07 11:53, 6年前 , 13F
十年前P2G就在洗骨頭惹
03/07 11:53, 13F

03/07 11:53, 6年前 , 14F
而且實際上測出來也很接近真正隨機了不是?
03/07 11:53, 14F

03/07 11:54, 6年前 , 15F
以我舉得兩個例子而言,都被直接讀出表來在用各種方式跳過
03/07 11:54, 15F

03/07 11:54, 6年前 , 16F
中間的行了,其實可以很不隨機
03/07 11:54, 16F

03/07 11:54, 6年前 , 17F
有沒有考慮發到GameDesign版問問?
03/07 11:54, 17F

03/07 11:55, 6年前 , 18F
我知道電腦做不出真正隨機這個說法,但這兩例會被解出來也離
03/07 11:55, 18F

03/07 11:55, 6年前 , 19F
仿真隨機有點距離了?
03/07 11:55, 19F

03/07 11:55, 6年前 , 20F
不要小看遊戲研究家 他們亂數找的很精
03/07 11:55, 20F

03/07 11:56, 6年前 , 21F
我好像誤會你的意思了 你的意思是設計者自己定義一個很小
03/07 11:56, 21F

03/07 11:56, 6年前 , 22F
的樣本空間是嗎?
03/07 11:56, 22F

03/07 11:56, 6年前 , 23F
只有非真隨機 他們就有方法找出表
03/07 11:56, 23F

03/07 11:56, 6年前 , 24F
也可能很大,但那個空間一被讀出來就可以被猜到下面幾步
03/07 11:56, 24F

03/07 11:56, 6年前 , 25F
資訊領域裡面講的真假隨機跟你舉例子的照表執行是兩回事
03/07 11:56, 25F
應該這麼說,以我舉得這兩個例子而言, 如果改成「在產出結果當下,去做一個比較擬真的隨機抽取結果」 會很難辦到或很吃資源嗎? 當然,這麼做的話裡當每次SL這個遊戲做這動作產出的結果都不同,但至少不會被預測。 ※ 編輯: ZMTL (118.163.209.137), 03/07/2018 11:58:42

03/07 11:57, 6年前 , 26F
當然不一定是完全正確 但隨著發展 準確率仍會持續提升
03/07 11:57, 26F

03/07 11:57, 6年前 , 27F
痾 如果程式亂數是用 rand() 你建出表也跟隨機差不多了
03/07 11:57, 27F

03/07 11:57, 6年前 , 28F
兩件事 1.電腦即時產生真亂數表成本太高 2.自然亂數
03/07 11:57, 28F

03/07 11:57, 6年前 , 29F
除非你三天兩頭就更新把亂數打掉重塞新的
03/07 11:57, 29F

03/07 11:58, 6年前 , 30F
應該說你講的這兩個例子都可以說是相當短的遊戲時間內進
03/07 11:58, 30F

03/07 11:58, 6年前 , 31F
行預測 對吧?
03/07 11:58, 31F
是可以被預測的,應該可以這樣說沒錯。

03/07 11:58, 6年前 , 32F
是非均勻的,不利控管歐皇比例
03/07 11:58, 32F
※ 編輯: ZMTL (118.163.209.137), 03/07/2018 11:59:23

03/07 11:58, 6年前 , 33F
但那樣沒什麼意義 反而累得要死
03/07 11:58, 33F

03/07 11:59, 6年前 , 34F
即時call rand() 成本會很高嗎?
03/07 11:59, 34F

03/07 11:59, 6年前 , 35F
因為原po所講的情況是開發者刻意用一個既定樣本空間
03/07 11:59, 35F

03/07 12:00, 6年前 , 36F
MH的亂數表我都只是當作他是這系列的特色
03/07 12:00, 36F
還有 267 則推文
還有 6 段內文
03/07 15:33, 6年前 , 304F
遊戲體驗都沒有影響
03/07 15:33, 304F

03/07 15:34, 6年前 , 305F
那麼把這點改掉真的有意義嗎?
03/07 15:34, 305F

03/07 15:38, 6年前 , 306F
好處大概是可以close「用家可以透過save-load來降低
03/07 15:38, 306F

03/07 15:38, 6年前 , 307F
消耗取得想要的東西」的issue吧
03/07 15:38, 307F

03/07 15:41, 6年前 , 308F
save load如果結果會變 就會變成機器人大戰那樣 在
03/07 15:41, 308F

03/07 15:41, 6年前 , 309F
那邊讀檔凹個大半天才打完一回合
03/07 15:41, 309F

03/07 15:53, 6年前 , 310F
但是為了避免每次讀檔可以重骰而使用固定亂數表,明顯是挖
03/07 15:53, 310F

03/07 15:53, 6年前 , 311F
東牆補西牆啊
03/07 15:53, 311F

03/07 15:53, 6年前 , 312F
可預測性和隨機性本來就是拮抗的概念,為了讓玩家不能重骰
03/07 15:53, 312F

03/07 15:53, 6年前 , 313F
所以乾脆放棄隨機性,這是因噎廢食等級的solution
03/07 15:53, 313F

03/07 16:04, 6年前 , 314F
你呼叫的亂數函式也是查表的概念
03/07 16:04, 314F

03/07 16:06, 6年前 , 315F
OK,但以我舉的例子來說是否能說變因太死?或者說他們就是
03/07 16:06, 315F

03/07 16:06, 6年前 , 316F
為的單純不想玩家SL快速改變結果,卻造成整體比較好預測(?)
03/07 16:06, 316F

03/07 16:07, 6年前 , 317F
有一部分也是想聽這麼設計可能的理由是什麼,今天學到很多XD
03/07 16:07, 317F

03/07 16:50, 6年前 , 318F
上面那篇知乎跟使用seed的偽隨機是不同的概念吧,那種
03/07 16:50, 318F

03/07 16:50, 6年前 , 319F
偽隨機是考慮使用體驗的額外設定,跟是否使用seed無關
03/07 16:50, 319F

03/07 16:50, 6年前 , 320F
幹嘛不做更多重的假隨機 就可以無限接近又不失熱情
03/07 16:50, 320F

03/07 16:51, 6年前 , 321F
很多遊戲是為了維持保底機率都會做小樣本區
03/07 16:51, 321F

03/07 16:51, 6年前 , 322F
那麼可以做成多重骰樣本群中的樣本表來阻止規則
03/07 16:51, 322F

03/07 16:53, 6年前 , 323F
要無限接近真隨機是很花資源的 用省一點就是多重骰
03/07 16:53, 323F

03/07 16:55, 6年前 , 324F
比如魔物可以骰10種珠子產生順序就會複雜十倍
03/07 16:55, 324F

03/07 16:56, 6年前 , 325F
要讓規律更複雜是做得到,想不想、有沒有必要而已
03/07 16:56, 325F

03/07 16:59, 6年前 , 326F
單機遊戲應該沒有自行設計更複雜的PRNG的需求
03/07 16:59, 326F

03/07 17:02, 6年前 , 327F
在沒有需求的時候應該就越簡單越好,MHW的原理應該也很
03/07 17:02, 327F

03/07 17:02, 6年前 , 328F
單純,因為多打一場多用了一次隨機數,所以鍊金會跳到
03/07 17:02, 328F

03/07 17:02, 6年前 , 329F
下一格。
03/07 17:02, 329F

03/07 17:03, 6年前 , 330F
我認為是一般的PRNG怎麼做他就怎麼做
03/07 17:03, 330F

03/07 17:07, 6年前 , 331F
自然亂數反而會讓玩家覺得不隨機喔
03/07 17:07, 331F

03/07 17:18, 6年前 , 332F
真要搞玩家,可以偵測SL頻率來修正機率
03/07 17:18, 332F

03/07 17:19, 6年前 , 333F
另外一個較常見的做法是減少能SL的時機點
03/07 17:19, 333F

03/07 19:37, 6年前 , 334F
PM那個算好預測嗎 我覺得研究並破解亂數表是一回事
03/07 19:37, 334F

03/07 19:37, 6年前 , 335F
實際實行起來想取得那些有誇張數值的色違稀有PM們
03/07 19:37, 335F

03/07 19:37, 6年前 , 336F
幾乎還是會選擇用改的改出來吧
03/07 19:37, 336F

03/08 10:06, 6年前 , 337F
其實手工派的很多。 理念就是自己沒有透過修改方式那就不是
03/08 10:06, 337F

03/08 10:06, 6年前 , 338F
作弊來的。也有很多人在交易未來X個後的色違位子,另一方
03/08 10:06, 338F

03/08 10:07, 6年前 , 339F
可以選擇自己要什麼寵的色違
03/08 10:07, 339F

03/08 11:19, 6年前 , 340F
電腦弄不出真隨機~但是無限趨近真隨機了
03/08 11:19, 340F

03/08 11:22, 6年前 , 341F
但是樓上有提到~自然亂數的話反而讓人覺的不是隨機
03/08 11:22, 341F

03/08 11:23, 6年前 , 342F
為了遊戲體驗 離群值的控制變成非常重要的一環
03/08 11:23, 342F

03/08 14:56, 6年前 , 343F
神奇寶貝是一款真正的亂倫遊戲 大家都是百變怪的孩子
03/08 14:56, 343F
文章代碼(AID): #1Qds6NES (C_Chat)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 9 篇):
文章代碼(AID): #1Qds6NES (C_Chat)