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

看板C_Chat作者時間6年前 (2018/03/07 21:23), 6年前編輯推噓6(607)
留言13則, 9人參與, 6年前最新討論串7/9 (看更多)
※ 引述《LiNcUtT (典)》之銘言: : ※ 引述《ZMTL (夜風/瀟湘 VR板已經開板!)》之銘言: : : 嗯,雖然我是APP工程師,但大學不是唸本科畢業後才半路出家的, : : 對這點真亂數、假亂數以前耳聞過討論卻沒什麼概念,剛好跟遊戲有關想到就問一下。 : 首先要有一個觀念 : 目前沒有所謂的真亂數 : 程式裡用隨機函式(後面用rand()代稱)產生的亂數全都是假亂數 : rand()有很多種,但不論哪種都是人寫出來的 : 有自己寫過的就會知道流程大概都如下 : 1.給一個seed > 2.演算法做運算 > 3.得一個值 > 跳回2得3 loop : 所以seed固定,後面產出的值也都會固定,連續取3的值建表就是所謂的隨機表,這是正常的 : 不同的seed會有不同的表,更改seed可以視作"洗牌" : 通常是用系統時間或tick做seed : : 首先舉例使用假亂數表的遊戲,以下有稍微簡化過程: : : 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 : : 順帶一提,很多線上遊戲/網路遊戲的都市傳說有時候我不會完全不信的原因也是這個。 : 老實說我覺得就是寫程式的人問題 : 大多數都是直接call平台內建的rand()來用 : 而沒有去了解該rand()的內部演算法 你說反了.. 正是因為了解rand()的演算法 所以寫程式的人才決定要把seed存在玩家記錄裡 如果不把seed存在存檔裡,就可以S/L大法一直試 不管你是什麼其他的東西當種子,只要種子每次讀取舊檔時不同 就可以一直重覆嘗試到想要的結果 所以一個遊戲的隨機性簡化成兩個問題 1.要不要將seed存在玩家存檔裡 2.哪些地方的rand()呼叫要用這個seed MHW的問題在,把seed存在存檔裡,但是用到這個seed的地方太少 只有 1.決定熔山龍任務是否出現 2.決定冥燈龍任務是否出現(每三場呼叫一次) 3.珠子鍊金 沒了,目前看起來就這三個地方共用存檔裡的seed 所以才會被找出規律... 更慘的是因為1和2的存在 玩家可以一直過關來達到不消耗素材也能呼叫一或兩次rand()的機會 如果只有3會呼叫rand() 就算你找出規律還是得消耗素材才能前進,那就沒什麼用處了 總之呢,要解決MHW的問題,又要避免被S/L大法的話 1.只有 珠子鍊金時使用存檔的種子 或者 2. 結算素材也用存檔的種子呼叫rand() 這樣玩家即使先建預測表,也很難準確的擊中想要的珠子 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.32.97 ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1520429004.A.555.html ※ 編輯: holymars (60.250.32.97), 03/07/2018 21:24:53

03/07 21:26, 6年前 , 1F
了解,我沒去研究MHW存檔機制,只是想說真要避免被反推是OK
03/07 21:26, 1F

03/07 21:27, 6年前 , 2F
另外單機遊戲用time當種子更危險,直接改本地時間就..
03/07 21:27, 2F

03/07 21:27, 6年前 , 3F
以前某一代的真三國無雙洗隨從好像就是這樣
03/07 21:27, 3F

03/07 21:28, 6年前 , 4F
這樣看來就是為了避免重複S/L而刻意為之的,只是沒做到位
03/07 21:28, 4F

03/07 21:30, 6年前 , 5F
終於有內行人講話了
03/07 21:30, 5F

03/07 21:31, 6年前 , 6F
與其說沒做到位, 不如說單機遊戲花大力氣防止玩家修改
03/07 21:31, 6F

03/07 21:31, 6年前 , 7F
的好處在哪裡
03/07 21:31, 7F

03/07 21:33, 6年前 , 8F
MH這套好幾代了 不覺得有啥不妥 倒不如還好是可預測的
03/07 21:33, 8F

03/07 21:42, 6年前 , 9F
官方大不了全隨機就好啦…
03/07 21:42, 9F

03/07 21:43, 6年前 , 10F
元PO有講了,全隨機就變成大家一直S/L
03/07 21:43, 10F

03/07 22:45, 6年前 , 11F
推!看到現在終於有比較內行的人出現了!
03/07 22:45, 11F

03/07 22:56, 6年前 , 12F
是說我直接把MHW當成網路遊戲了...XD 才想起他算單機
03/07 22:56, 12F

03/07 23:06, 6年前 , 13F
03/07 23:06, 13F
文章代碼(AID): #1Qd-VCLL (C_Chat)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 9 篇):
文章代碼(AID): #1Qd-VCLL (C_Chat)