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

作者: yshinri (ISML實習分析師)   2018-03-07 21:46:00
其實要不要 call rand() 即時產生亂數也是看工程師決定的...
不知道版上還有沒有人記得幾年前神抄之塔被人找出開盤時的盤面重覆性很高
然後有人下去拆包才發現原來開盤盤面是由一個固定有 450 個浮點數的表所決定
然後就出現了這個→https://pastebin.com/ehFB6ZXp
也就是說它的開局只有 450 種 (實際稍少, 因為一些演算法的原因)↑↑
這個就是連 rand() 都懶得/不想呼叫的結果
就算系統提供的亂數某種程度上有點糟, 但有的時候這種鳥鳥的東西就很夠用了
作者: LiNcUtT (典)   2018-03-07 21:48:00
以前老game也常用預建表,call rand雖說消耗不高但還是有
作者: holymars   2018-03-07 21:52:00
LCG跑亂數比你從記憶體讀表快多了...一個加法一個乘法一個module都在register裡執行..你查表還要去記憶體->cache->register 誰快不用說吧..
作者: kokal (細菌)   2018-03-07 21:55:00
可能是為了遊戲體驗,要不然一開始就抽到爛盤面會很火
作者: LiNcUtT (典)   2018-03-07 21:58:00
那為啥以前很多老game搞預建表的啊?我以為是有差說XDDOS/95那時的call rand快又省工,那搞預建表的是再搞自己嗎XD
作者: holymars   2018-03-07 22:04:00
你是真的decompile發現它記憶體裡有張表嗎...rand跑出來的行為和預建表一模一樣,你怎麼分辨..先用一個種子跑100次rand建表,和實際要用時在呼叫rand結果不是一模一樣嗎
作者: LiNcUtT (典)   2018-03-07 22:07:00
沒實際跑過,但記得以前不少文章都有提XD像原PO講的神魔這樣,我是沒實際去拆,說有表我就信了w
作者: holymars   2018-03-07 23:44:00
那要看文章是企劃寫的還是程式設計師寫的....為了理解方便,程式都會跟企劃說有張隨機表,每次跑出來結果是固定的,用來讓企劃理解PRNG的數學意義久而久之企劃們都以為真的有張表存在記憶體裡面,但實際上並不是...
作者: yshinri (ISML實習分析師)   2018-03-08 07:53:00
我是有印象有看過 decompile 出來的程式碼, 確實是有表

Links booklink

Contact Us: admin [ a t ] ucptt.com