minecraft吧 关注:1,903,626贴子:29,419,965

【半教程向】超高效刷怪装置的设计

只看楼主收藏回复

大家好,我是墨鱼服的mackler,给大家带了了第三期的【半教程向】系列。
这个系列以后可能还有更多的idea,这个系列会给大家介绍某方面的一些基础知识,提供一些思路,然后布置一个大作业,并且以一个墨鱼服的白名单作为完成大作业全部要求的奖励。
而这些大作业也正是墨鱼服规划中未来要制作的一些工程。


好了,回归正题,这次我会介绍一些刷怪的基本知识,然后旨在设计一个效率非常高的刷怪装置。


开始吧QAQ


回复
1楼2014-03-07 11:59
    二楼备用放链接


    收起回复
    2楼2014-03-07 11:59
      围观(~ ̄△ ̄)~


      白银拳师
      贴吧拳王争霸赛中累计获取100场胜利,去领取
      活动截止:2100-01-01
      去徽章馆》
      回复
      来自Android客户端3楼2014-03-07 11:59
        关于刷怪机制,相比很多人都已经相当了解,这里就直接借用德芙的介绍
        【刷怪循环过程】

        一个刷怪循环进行的过程比较复杂,在这里只讨论怪物的刷怪情况:
        判断怪物数量是否达到怪物总数封顶,如果达到封顶则取消本次循环
        选择一种刷出的怪物,进行一组怪物的刷怪尝试
        从主角为中心的15x15个chunk(一个chunk是16x16x256大小)中随机选取一个可用的位置,作为这组怪物的刷怪中心
        一个可用位置的判断是:这个位置必须是非实体方块和非液体方块;下方必须是实体方块;上方必须是非实体方块;怪物不会被其他方块窒息;主角空间距离24格之外
        如果位置符合,这一组进行12次刷怪尝试,最多刷出4只怪物
        每次刷怪尝试,从41x41x1的空间内选择一个可用的位置
        然后进行亮度判断,根据亮度不同会随机选择是否否决本次刷怪,亮度从0到7否决率增加,7以上否决率100%;如果收到天顶亮光(阳光或者是月光),否决率再增加50%
        史莱姆和小黑增加90%的否决率
        如果一切都符合并且未被否决,那么在这个位置刷出一个怪物


        此外,附加上lc的影响,在
        “从主角为中心的15x15个chunk(一个chunk是16x16x256大小)中随机选取一个可用的位置“
        这句话的过程,是先选中一个chunk,然后在这个chunk所有y小于等于lc的位置选取一个方块。


        基本概念就说这些,我也基本只知道这些QAQ


        收起回复
        5楼2014-03-07 12:04
          更高效的刷怪塔,资源不用愁了XDDDD


          回复
          7楼2014-03-07 12:15
            接下来以【效率】为唯一目标,考虑刷怪装置的设计思路。


            首先是怪物的处死方式:
            处死怪物的方式以烧死、摔死为效率高的方法。
            淹死、窒息等方法不能获得如此快的速度。
            补充说明一下:摔残然后由玩家空手补刀的方式也不在考虑范围内,因为玩家手杀的速度将成为最大的瓶颈。如果追求经验的话,现有的很多刷怪塔都已经可以满足经验的快速获取了。更高的速度也没有什么用,因此只追求大量物品的获得。


            摔死:摔死几乎是最快的杀怪方式了,因为只要控制高度大于等于30格,基本可以确保瞬杀怪物。但是1.7.4出的僵尸鸡骑士,导致了摔死无法有效处理僵尸鸡。
            烧死:烧死其实相当难做,因为当怪物落到了岩浆里,怪物会尝试在岩浆中游泳,最终烧死之后物品也被烧掉了,但是可以有效处理掉僵尸鸡。


            因此,可以考虑两者结合,由于岩浆并不像水一样可以重置速度,因此可以考虑用怪物从高空落下的过程中穿过一层岩浆,最后落在地上,这样可以及时处理掉鸡骑士的问题。


            收起回复
            8楼2014-03-07 12:17
              好高端的样子0.0


              回复
              来自Android客户端9楼2014-03-07 12:21
                然后说收集怪:
                收集怪,就是把刷出的怪物送到处死装置的过程。


                其中效率最高的当属活塞推动地板的方式。
                由于活塞推动过程中产生的技术性方块无法对怪物产生支持作用。怪物会穿过技术性方块落下去,因此使用活塞推动地板可以迅速的将怪物丢下去摔死。
                ---------------------------------------------------------------------------------
                重点是如何触发地板推动:
                有一种思路是使用时钟电路,每过一段时间推动一次地板,将刷出的怪物推出。
                但是这样的思路有个最大的问题是卡顿,因为一个活塞推动将导致推出的12个方块全部更新,计算量非常巨大,而高效率的刷怪装置必然有大量的活塞地板,一个时钟信号过来时候,大量的更新造成的卡顿是非常恐怖的。
                此外,不能及时清除怪物也是一个问题,因为怪物刷出后必须等待到时钟信号过来时,才会掉下去。


                还有一种思路是用拌线检测。拌线的好处是可以检测一排怪物,我们可以用一排拌线,链接上两侧的拌线钩,触发两边活塞来回推动,使得怪物迅速落下被处理掉。
                这样的好处是清理怪物更及时,并且造成的卡顿没有那么严重,因为刷怪上限大约是80,最多同时存在80+个怪物,也就是最多只有80+个处理怪物的拌线被触发。随之产生的更新量要比整体推动小很多。
                ----------------------------------------------------------------------------------
                拌线的放置有一些讲究,如果放在第二层,则无法检测小僵尸、蜘蛛等怪物,而如果放置在第一层,则为了能连接到拌线钩上且不导致对活塞产生BUD充能。装置要拓宽一些。并且将非刷怪面积的高度进行控制。不过还是可能导致一些怪物在扩宽部分生成。


                接着是来回推动地板的时钟信号的产生。漏斗时钟是一种非常好的时钟装置,也便于控制。但问题是漏斗上方如果不是容器的话,每个tick游戏要检测漏斗上方是否有物品,这是一个计算量比较大的过程,因为实体列表是单独维护的,无法在O(1)时间完成计算。如果以漏斗时钟作为刷怪单元的话,整体的卡顿也是非常恐怖的。
                因此推荐采用纯红石的时钟,但是纯红石的时钟需要考虑的问题是横向堆叠能互补干扰,因此需要设计两种放在一起不会干扰的结构,然后横向重复扩展。


                收起回复
                13楼2014-03-07 12:38
                  mark


                  回复
                  14楼2014-03-07 12:43
                    前排


                    回复
                    来自Android客户端15楼2014-03-07 12:50
                      以上这些可以作为基本刷怪单元:

                      一个围起来密闭的暗室,下面一排半砖,中间是拌线,两侧是时钟电路和活塞,下面是摔死部分,中间有岩浆。怪物一生成,立刻启动时钟电路来回推地板,怪物落下被烧死+摔死。
                      ======================================================
                      以上的这些,想必做过高效女巫塔的都知道如何做。也不是特别新的东西
                      接下来是【重点】部分:刷怪单元的分布
                      首先有一点大家都知道,怪物距离玩家超过180格将立刻删除。因此,整个刷怪的基本单元都必须排布在以玩家为中心的半径128的球体内。


                      但是我们没有必要将整个从0~255的世界高度范围内填充一个半径128的球来达到效率最大化,因为有lc的影响。
                      我们要做的是提高这个球体在lc下面部分所占的比例。


                      如下图所示的在0~255之间填上一个半径128的球和在0~128之间填上一个半球其实效率是差不多的。




                      回复
                      16楼2014-03-07 12:53
                        挤挤0.0


                        回复
                        17楼2014-03-07 12:57
                          我们要做的是选择球的一部分,使得球的这一部分占据方框的比例最高
                          一个很自然的想法就是像下图这样


                          选择球最宽的部分。这部分的所占比例是极高的。因为实际刷怪选择方块的时候,就是通过对方形区域内所有方块进行选取,如果球所占比例高,那么被抽中的方块有我们的刷怪面积的概率就非常高。这样可以大大提高刷怪效率


                          回复
                          18楼2014-03-07 12:58
                            而lc的值(也就是图中方框的上边界)必然是16的整数倍-1,。
                            选取一个合适的lc则很关键。刷怪单元至少有30格用于摔死,考虑到生存世界y<=4是基岩层,因此最下面的大约30+层基本是没有刷怪层的。
                            在30+以上建造刷怪层。我们要找出最球所占体积最大的lc位置。
                            假设球的中心在y=31的位置。


                            从lc=31开始估算,此时刷怪层面积为0,比例为0%
                            lc=47时,球的切面半径为√(128^2-16^2),约为126,所占增加部分有效体积的比例为76%,总的比例约25%
                            lc=63时,切面半径123,增加部分的有效体积比例为72%,总的比例为36%
                            lc=79时,切面半径118,增加部分的有效体积比例为66%,总的比例为42%
                            lc=95时,切面半径110,增加部分的有效体积比例为58%,总的比例为45%
                            lc=111时,切面半径100,增加部分的有效体积比例为47%,总的比例为45.2%
                            ……
                            ---------------------------------------------------------
                            因此如果球心在y=31的位置,lc取95最合适,如下图


                            进一步,如果适当提高球心位置,可以进一步提高速度,我们将刚刚的上半部分镜像一下并提高球心位置,如下图


                            其中绿色部分就是建造刷怪层的地方。


                            收起回复
                            19楼2014-03-07 13:34


                              而我们的刷怪基本结构是这样的,宽度为11~20左右,高度为30~40,要将这样一个结构放置到上面的那个区域内,可以按照层来分布。
                              而每个刷怪单元的层数不宜太多,否则处理怪物的速度回大大降低。可以堆叠多层刷怪单元的,每个刷怪单元高度算40的话,上一楼的范围总共160左右大致可以划分为4层。


                              回复
                              20楼2014-03-07 13:47
                                然后到俯视图,每一层大致为一个圆形,可以讲刷怪结构以正方形的环形堆积,图中黄色的表示刷怪单元的俯视图,沿着正方形四条边堆积。由于刷怪单元宽度大约为20左右,因此大约可以嵌套3个正方形。最中间的24范围不能刷怪,因此需要留空


                                当然,边缘也可以加以利用

                                这样最终可以实现一个密集排布的刷怪球结构


                                收起回复
                                21楼2014-03-07 13:55
                                  直接跪了


                                  回复
                                  22楼2014-03-07 13:55
                                    至于物品收集,水流冲刷物品是卡顿最小的,但是问题是水流会导致不在有衰落伤害,因此折中的办法是使用漏斗矿车在平台下面跑动来收集物品。具体的矿车的数量和速度当然需要根据刷怪速度进行尝试了。
                                    ------------------------------------------------------------------
                                    最后得到的设计是一个体积约为160x160x160的类似圆柱形的刷怪装置。挂机点大约在圆柱的中心位置。大家根据上面的侧视图和俯视图自行脑补。


                                    回复
                                    24楼2014-03-07 14:02
                                      赶上直播!


                                      回复
                                      来自Android客户端25楼2014-03-07 14:03
                                        【大作业】实现一个上面描述的刷怪球装置,允许使用mcedit。
                                        要求:
                                        1.尽可能减少漏斗的使用量(减少卡顿)
                                        2.符合本贴所描述的设计思路
                                        3.处理好各种细节问题
                                        =========================
                                        完成大作业的请留下存档,完成此作业的我将邀请你加入墨鱼服。


                                        收起回复
                                        26楼2014-03-07 14:07
                                          最后附上另外两个半教程向贴的链接:
                                          http://tieba.baidu.com/p/2865896268
                                          http://tieba.baidu.com/p/2846064358
                                          同样在最后有大作业,且目前尚无完成的QAQ。感兴趣的可以继续努力。


                                          收起回复
                                          27楼2014-03-07 14:09
                                            给大触跪了下次作业简单点呗QAQ


                                            收起回复
                                            28楼2014-03-07 14:51
                                              都没看懂


                                              回复
                                              来自iPhone客户端29楼2014-03-07 14:55
                                                M触教我铁路好不好啊,我的大型火车站已经做出一个雏形了


                                                收起回复
                                                来自WindowsPhone客户端30楼2014-03-07 15:04
                                                  我想下lz是什么学历 感觉好厉害的样子


                                                  收起回复
                                                  31楼2014-03-07 15:33

                                                    ------来自 爱贴吧HD for Windows8


                                                    回复
                                                    来自Windows8客户端32楼2014-03-07 17:10
                                                      楼上+1


                                                      回复
                                                      33楼2014-03-07 17:12
                                                        MC会被玩坏的


                                                        回复
                                                        34楼2014-03-07 18:13
                                                          看不懂。。。


                                                          回复
                                                          35楼2014-03-07 18:13
                                                            M大的贴何以不顶,感觉点亮洞穴工作两略大啊,这个好


                                                            收起回复
                                                            来自Android客户端36楼2014-03-07 18:22