terraria吧 关注:738,798贴子:9,737,339
  • 4回复贴,共1

【问题】关于游戏随机数BUG的可靠来源

取消只看楼主收藏回复

在贴吧里看到的来源是B站网友世纪小花的动态,但他同一天的另一条动态表示自己找不着出处。楼主曾经在论坛里搜索一些关键词,也没找着相应的讨论。不知有无了解得更详细的吧友指明发现这个BUG的最初的来源?



IP属地:重庆1楼2022-06-27 10:42回复
    关于游戏随机数系统(指Utilities.UnifiedRandom.cs里的UnifiedRandom方法),这个方法本身的来源,应当是微软.NET Framework源码,微软的源码中引用的来源则是Numerical Recipes in C (2nd Ed.),这本书我找着了电子版,其提供的源码如下:

    一个超奇怪的不同是变量inextp,这个值在书中是31,但微软和relogic的源码里都写成了是21,而且这个常数是特殊的(根据Knuth的书,不过我没去看,估计想看懂也得费老大劲)。
    BUG是源于这个笔误吗?如果是的话,其实锅可能不是relogic,而是微软的23333


    IP属地:重庆2楼2022-06-27 10:48
    收起回复
      突然想到最初的来源会不会是速通社区的,毕竟他们估计对世纪之花灯泡的生成规律十分热心


      IP属地:重庆3楼2022-06-27 10:59
      回复

        Knuth的书找到了,居然是1997年的。但我不会去看算法的理论解释的,问就是懒,再问就是看不懂。
        这书里还聊了一些关于随机性检测的玩意,比如Frequency test,Serial test,Gap test之类的用来检测随机数生成器的质量。或许可以对游戏用的随机数生成器跑一跑这些测试,等我有心情了的时候(
        另外好在游戏里随机数生成器本身是个独立的模块,很容易就能单独摘下来转写成我习惯的语言,比如Python...

        所以等我有心情的时候就继续搞(


        IP属地:重庆9楼2022-06-27 18:52
        收起回复
          此外,楼主目前并不清楚31写成21的后果,也不能确定游戏里许多脸黑事件是否应该由这个笔误来背锅(可以想象的是即使随机数生成器没有问题,依然会有大量玩家遭遇脸黑事件)。
          在我们甚至没有搞清楚随机数生成器的行为前,任何简单的归咎都是武断的。


          IP属地:重庆10楼2022-06-27 18:56
          收起回复