作者LPH66 ( )
看板Minecraft
标题Re: [分享] 如何用数学方法寻找钻石
时间Fri Mar 26 03:26:15 2021
※ 引述《Xuelingyu (雪灵羽)》之铭言:
: 影片连结:https://www.youtube.com/watch?v=5Icj5TNmBUI
来简单转述补充一下影片中的解释, 以及加一点我认为 1.17 会造成的影响
====
基本原理是这样的:
Java 内建的乱数产生器 java.util.Random
它的实作是有一定规定的 (专业术语叫做线性同余产生器, LCG)
其特性是: 当你喂入的种子码很接近时
所产生的开头数个乱数的数值也会很接近
特别的, 如果已知种子码差多少的话, 所产生的这些乱数也能够在某种程度上互相推算
反应在所产生的世界就是:
种子码 s+60011 产生的黏土团的特性
和种子码 s+60009 产生的钻石团特性会有很强的关联
强到足以利用其中一个推算另一个, 而其中位置相关的数值正好有个普遍适用的偏移量在
影片中有详细地把程式内部的计算演示一遍给你看
告诉你那些偏移量是如何算出来的
====
要问 1.17 会产生的影响嘛
首先, 还是回到官方给的分布图
https://reurl.cc/Dvq6KQ
注意到右边列在 1.16 旧版的图示中, 钻石的分布是均匀分布的
实际你去找有人统计的钻石矿分布统计图看会看到
y=5 ~ y=12 这一块的分布其实是几乎均匀的
(y < 5 会受基岩生成影响成线性减少, y >= 13 我就不太确定是什麽原因就是了...)
但是 1.17 改变生成方式变成越深机率越大
这代表说上面这些乱数产生器的输出不会直接变成矿团性质的数值
而是会进行一些简单的数学运算之後才会变成矿团性质
这些运算有可能会因为多使用了几个乱数而造成参照的乱数不再对应
(我指的是那些三角形分布, 因为三角分布可以藉由产生两个均匀乱数相加而得
这甚至是个已经使用在游戏其他地方的方法了;
如果它是使用新的高斯分布的乱数产生器的话
最常见的高斯分布产生演算法也是需要由两个均匀乱数转换成两个高斯分布乱数
(关键字: Box-Muller)
总之这样一来, 一边使用一个乱数, 另一边使用两个乱数, 对应就会被打乱)
再加上 8a 减少了钻石矿团露出空气的比例
以及 10a 对钻石矿团的生成演算法有较大的改变
就算实际产生的座标还是能够推算, 也很有可能因为这样的改变造成扑空
所以我会认为在 1.17 就算是有可能推算出新版的对应是如何
但实际成功机率应该是会大幅下降的
--
有人喜欢边
玩游戏边
上逼;
也有人喜欢边
听歌边
打字。
但是,我有个请求,
选字的时候请
专心好吗?
-- 改编自「古 火田 任三郎」之开场白
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.0.237 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Minecraft/M.1616700377.A.570.html
1F:推 twosheep0603: 原来这两个种子生成这麽靠近 03/26 04:39
2F:推 pupudice: 强 03/26 04:59
3F:推 Xuelingyu: 我就是後面都听不懂才只翻利用方法 L大好强 03/26 11:40
4F:推 ZooseWu: 酷喔 03/26 15:18
5F:推 sa080691: 我看我还是乖乖鱼骨好了 03/26 16:14
6F:推 espresso789: 原po只说结果就很像迷信,但是这篇的楼主详细解释, 03/26 17:53
7F:→ espresso789: 变得有科学做作证,故给推 03/26 17:53
8F:→ Xuelingyu: 痾…楼上我有附影片连结啊,只是因为不懂程式跟数学就 03/26 20:11
9F:→ Xuelingyu: 没翻了 03/26 20:11
10F:推 WinRARdotrar: 嗯嗯 跟我想的差不多 03/26 23:56
11F:推 kosoj6: 你是鬼吧= = 03/27 00:37
12F:推 starjack2001: 太神辣,这我也只能乖乖下跪拜见大佬了 03/28 01:38
13F:推 BlackCoal: 神 03/30 05:52
14F:推 siriusu: 推 03/31 02:37
15F:推 kaiyo25: 推 感谢讲解 04/07 12:20