在农业生存中有许许多多的问题,今天琵琶网小编就为大家来解答一下这些问题,今天主要从MC的源代码入手,希望大家能够喜欢!

  作者:贴吧D大

  甘蔗生长,以及其他农作物生长(小麦,西瓜,仙人掌等)

  都是依赖一个block tick的更新机制

  首先要明白的是,block tick和block update不同

  简单的来说,如果一个方块变化了,会对周围的方块产生block update

  也就是说,block update是被动的

  只有当周围的方块变化时才会接受到block update

  作物生长是主动的,与block update机制无关

  而是由block tick进行控制的

  PS block tick是一个很少人知道的概念

  其中原因之一就是各种wiki页面上都没有指向block tick的链接

  block tick也不是一个专门的wiki页面

  而是在tick页面下的一个子条目而已

  PS PS 个人感觉中文版wiki没有把这部分翻译过来。。?

  block tick是在每一个game tick里面进行的

  当一个block tick发生在方块上时

  这个方块的updatetick方法就会被调用

  block tick分为2种

  一种是scheduled tick,被提前计划好的

  例如红石中继器、漏斗等,事件的发生已经被提起计划好了

  当到达了指定时间后,一个block tick就会触发

  另外一种就是random tick,随机发生的

  任何一个方块都会随机接受到random tick并触发

  而作物生长不是被提起计划好的,而是random tick

  这一段就是在每一个game tick中产生random tick的代码

  所有附近有玩家的chunk都进入了ramdom tick的产生范围

  每一个chunk都被分为16x16x16的16个section

  在每一个section里面随机选取3个方块

  这三个方块被给予random tick

  也就是这个方块的updatetick方便被调用了

  虽然说random tick的确是随机进行选取方块发生的

  但是也有平均值,平均来说一个方块会多久发生一次random tick

  接下来会进行一些数学计算

  为了方便更好的显示数学书写,使用MathType

  由于在一个section里会选取3个方块进行random tick

  因此一个方块被抽中的概率就为3/(16x16x16),用a表示

  那么在第n次才被抽中的几率可以由Pn表示,解析式如图

  自然,第n此才被抽中耗时则是Tn=n个tick

  自然,要求平均时间就是求所有情况耗时的加权平均值了

  那么Sn可以表示从第1次就抽中到第n次才抽中的平均耗时

  那么只需要取n接近于无穷大的极限即可

  那么接下来的任务就是要求Sn的解析式

  把Sn展开之后,可以用等比数列求和的方法求

  将Sn乘(1-a)之后得到第二式

  并将两式相减可以得到第三式

  注意到所有的Tn全部被约掉退化为1

  因此第三式除最后一项以外构成了等比数列

  前面的n项可以通过等比数列求和公式进行求和

  这样就可以得到了Sn的解析式

  接下来把取n接近无穷大的极限即可

  取极限的结果就是1/a

  也就是说,平均每1/a次才会产生一个random tick

  PS 其实1/a这是一个很明显的结果

  不过这里只是进行一次严格的证明而已

  数学非常严谨而优雅不是吗。。。

  也就是说,平均需要1/a个tick才会接受到一次random tick更新

  1/a个tick的时间就是1/(3/(16x16x16))x0.05=68.27秒

  也就是说平均每68.27秒一个方块就会收到一次random tick

  但是值得注意的是,10秒内接受到random tick的几率也是很大的

  而5分钟才接受到一次random tick的几率也是不可忽视的

  这个平均值只是一个参考数据

  不能依靠这个数据进行所有的自动化设计

  PS 截图取自E文版wiki,证实了计算准确性

  接下来我们就可以到甘蔗的updatetick里面看看执行了什么

  首先先判断了甘蔗上方是不是空气

  然后再判断现在已经长了多少个甘蔗了

  如果小于3则可以进行生长处理

  然后会判断甘蔗方块的附加值(默认为0)

  如果等于15了那么就会在上方长出一个甘蔗

  否则的话就会把附加值加1

  也就是说,甘蔗要生长的话就需要接受16次random tick

  16×68.27=1092.32秒,也就是18.2分钟

  换句话说,平均每18.2分钟甘蔗会长一节

  PS 同时也终结了“沙子上长得快”和“可以长4节”等流言

  接下来我们看一下这个甘蔗场会不会由于活塞下推而影响效率

  15×7的甘蔗场,除去水源之后一共有84个甘蔗

  经过长时间运行之后每个甘蔗的附加值会在0-15间平均分布

  那么会有84*(1/16)=5.25个甘蔗可能会在活塞下推时被影响生长

  一个section抽到这5.25个甘蔗的几率为p=5.25/4096

  那么活塞伸缩的4个game tick中都不抽到这些甘蔗的几率就为

  (1-p)^4=99.49%

  也就是说,99.49%的情况下是不会影响到其他甘蔗的生长的

  即使影响到了也不会重置甘蔗的成长进度

  下一次game tick中甘蔗又会继续长出了

发表评论

您的电子邮箱地址不会被公开。