我的世界官网中文百科zh.minecraft.wikiJava版服务器列表基岩版服务器列表
帖子

Memorial Edition

查看: 141|回复: 1

[数据包] (数据包 1.18-1.21)跑酷迷宫机

[复制链接]

Lv.1 伐木工

人气
0 点
金粒
54 粒
宝石
0 颗
爱心
0 颗
钻石
3 颗
贡献
0 点
发表于 前天 12:08 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 机器人WBW 于 2025-5-27 12:37 编辑

这个工具是利用程序自动生成一种路线为跑酷路线的立体迷宫应该是比较欢乐的
现在实际的数据包已经更新到mc1.21了(1.18-1.20也有)
下载可以去modrinth
或者 gitee

新的使用说明可以看planetminecraft

(上面这些网站名加了链接可以点的)

(其实游戏里/reload就可以打开菜单了)
举个单独的例子,玻璃挑战,从地底到天顶的向上跑酷:
/function parkour_maze/examples/challenge/glass
(手机手打的命令,可能有点错误,希望能用

演示视频:BV1g44y1c79h
欢迎各位体验~

然后下面是把原理重新挖出来的内容
————————————————

跑酷迷宫机发布帖:
https://www.mcbbs.net/thread-1229566-1-1.html
咱也得硬着头皮来讲讲原理是吧
零、背景
俺其实有过迷宫机的经验,即1.9版本时的“3d迷宫机”,大概是那段时间做得最漂亮的一个作品吧……
那之后其实就有造高级迷宫机的想法了,于是1.12就开始策划跑酷迷宫机,无奈学业正紧(当时初三,现在马上大二),只出来个半成品(纠结在tellraw以及各种设置设计)
——为什么是跑酷迷宫机呢?因为俺在网上见到的绝大多数迷宫机,不论算法如何,生成的迷宫实际上都是二维的。而曾经在mcbbs看过一个“手动做3d迷宫”的帖子,下面有一条回复提到了“迷宫回路”(从某个地方掉下去又是另一条路,但是这个位置你跳下去后不一定能原路返回),觉得挺有意思的,minecraft迷宫就是至少要这样的设计才能算比较有趣~不然和外面的迷宫其实没啥两样的……
高一后试图重拾呢,那时候1.13版本出来了,指令格式大修,原本的很多指令基本上算作废了吧……倒也留下些设计(感谢当时@⊙v⊙ 的合作,虽然最终未果)
后来高中就开始追小马,大一重新追神奇宝贝,而且还有WBW梦想,很少碰我的世界了,不过设计还偶尔挂念在心
大概三四天前又重新回忆起来这个项目,在设计上大大简化周边功能而保留核心功能,也大大放宽对迷宫路线审查的要求,发现好像可以动手了,于是一天就把核心原型给搞定了(嗯,就用了一天,迷宫机就可以跑起来了),后面两三天进行调试优化细化,就有了现在0.6.0版本,算是第一阶段的最终版本吧_(:3JZ)
实际上1.13后实现起来要比1.12前容易多了,多亏了进行了强大改进的execute以及局部坐标功能(1.12那时候是考虑用结构方块的!)
总之,现在用起来还算不错的跑酷迷宫生成器终于做出了了,可喜可贺。
一、性质要求设计:
跑酷迷宫机,生成的是迷宫,路线是跑酷。
一个合格的跑酷迷宫机,至少要保证,仅用生存模式下的行走跳跃,便足以达到迷宫各处。
然后是个人的设计,即使你走错路了,也还有路能让你重新到达原来的位置(即,单行道不能是死路,不小心掉下去了咱还得有路再爬上去……一般跑酷地图也都要这么设计吧)
另外,迷宫机应当能比较合理地利用所提供的空间,即路线既不过于密集(否则有难度的路线统统被简单路线取代,过于“平坦”),也要尽量钻进封闭空间中能够钻进的角落(否则迷宫路线便不够复杂,无法称之为“迷宫”)——emm这个设计要求我用“超细空间(stick)”测试了好久……算是能生成长度比较可观的垂直路线而不至于“卡层”了……
还有针对巨型迷宫生成,所用的步骤是非常多的,实体量过多会拖慢速度,所以也作了优化的~
大概就是这样……迷宫生成方便,并且做出来的迷宫好玩就行嘛
二、迷宫机运作基本流程:
可以参考发布帖的“使用步骤”,不过那是用户端,这里我们讲一下“运营端”:
1.初始化,计分板,分数设定(初始设置)
2.(用户已经自行创建好迷宫建造的范围)接受用户指令,执行“第一步”(生成第一个node节点),激活循环进行建造!
3.(循环中的每一步)选择合适节点——用随机器随意选择路线——判断所选路线是否在当前方块环境下可用——若能,则放置方块,此步结束;若不能,记作一次失败,此步仍然结束(“不走回头步”,但对“失败者”会有一些处理)
4.持续循环第3步,等待结束条件
5.结束,进行得分点/终点设置,清空实体,彻底结束
((:3JZ)突然想起来好像结束没有提示消息emmmm可能是习惯了看积分栏了吗23333不过如果雪球全部消失了也是结束(好吧赶紧改)好了0.6.1加上了结束消息提示)
下面重点细讲步骤3的各个部分(步骤3算是核心,其他的都勉强算周边功能了……周边功能这里就不细讲了,愿意的可以翻翻数据包内部)
三、迷宫线路的建造(最初版本)
图片:
(上边的文件夹中fallb与jumpb文件夹其实并没有用起来了……目前相当于一个备份)
迷宫的路线是人为设计好的,而这些路线将由“操作单元”来组成
node节点,即跑酷落脚点,变体是node oneway(单行道节点,无法原路到达前一个节点)
path节点,即跑酷路径空间(一个路线必须要留出这样的空间,才能保证这条生成的节点是可到达的),变体是path hit(原意“碰头块”,实际表示该跑酷路径不论有或没有这一格空间,这条路径生成的节点都是可到达的(:3JZ)不过难度可能不同罢了……)
由于在“路径审验”通过后:
node会在当前格放置结构空位(后面结构空位会被清理成空气),在脚下放置石砖(落脚点)
path会在当前格放置结构空位(path hit则是概率性放置……)
因此在“路径审验”时要求:
1. node与path当前所在格不能是“bedrock类”(人为设置的封闭空间的边界块,以及落脚块,都属于“bedrock类”)
——否则,node与path在“当前格”放置的结构空位,将会消除掉可能必要的落脚点,或者破坏人为设置的边界而“路线流出”。
2. node脚下不能是“path类”(主要是结构空位,虽说也有梯 子和蜘蛛网……但实际上还没有设计含有这两者的路线……目前路线是纯方块的,大概各位愿意的话可以试着自定义一下)
——否则,node生成的落脚块将会消除掉可能必要的通行空间
3.node oneway 必须保证 ~1 ~1 ~或 ~-1 ~1 ~或~ ~1 ~1或~ ~1 ~-1(即上面一格的前后左右四格)是“path类”
——否则,此node将可能生成一条死路
(人物基本上是1x2x1的空间占位,这种位置是保证通路的“必要空位”,不论是上格通路(“腿一格”),平通路,坠落通路(均为“头一格”),一定会在这种位置留有空位)
(:3JZ)_其实这种单行道基本上不会导向“新路线”,基本上都通往已生成的路线,所以作用大概就是形成“回路”(左右手法则不再适用,嗯),来“坑害”那些方向感较差或者跑酷水平不足的人吧
现在重新回到这句话,详解步骤:
选择合适节点——用随机器随意选择路线——判断所选路线是否在当前方块环境下可用——若能,则放置方块,此步结束;若不能,记作一次失败,此步仍然结束
1.选择合适节点:初代基本是随机选择节点
2.用随机器随意选择路线:初代18类路线(见上图),每类路线一个代号(0-17)用随机器抽取
——ps:路线的初始朝向也是随机器,4向,代号0~3;(路线是用 ^ ^ ^2这类局坐标表示,所以4朝向也就意味着一类路线能表示的路线乘以4)
——此外,“折角”的方式也是用随机器的(l不拐,b首左拐,d首右拐,p尾右拐,q尾左拐五种,代号0~4)
“折角”的实现方式是tag,execute统一朝向,还有局部坐标tp。比如,b首左拐的代码:
代码:#execute as @e positioned as @s run teleport @s ^ ^ ^3
上面这样可以实现一切生物以我的视线为准向前移动
execute align xyz run tp @e[dy=1,dx=0,dz=0] @p
这样的选择器可以精确到格子

tag @e[tag=path] add turning
tag @e[tag=node,tag=new] add turning
execute align xyz run tag @e[y=0,dy=256,dx=0,dz=0,tag=turning] remove turning
execute as @e[tag=turning,tag=maze] positioned as @s run teleport @s ^1 ^ ^-1
3.判断所选路线是否在当前方块环境下可用:即前文“路径审验时”内容
4.“若能,则放置方块,此步结束……”:见前文“路径审验通过后”内容,简单而言即对应单元实体使用对应的方块放置程序
“……若不能,记作一次失败,此步仍然结束”:初代似乎并没有加入失败惩罚,只是单纯凭随机而已……
四、迷宫线路建造的优化版本
啊今天时间不早了,就明天再继续写吧……
18834815-parkour-maze-new_l.webp
18834802_l.webp

Lv.1 伐木工

人气
0 点
金粒
54 粒
宝石
0 颗
爱心
0 颗
钻石
3 颗
贡献
0 点
 楼主| 发表于 前天 12:29 来自手机 | 显示全部楼层
本帖最后由 机器人WBW 于 2025-5-27 12:59 编辑

发得有点急了,用法的话,一种是靠墙start(需要手动先fill一片区域)
另一种简单的是用example里面的
比如
/function parkour_maze/examples/challenge/glass

另外可以参看归档:
https://archives.mcbbs.co/read.php?tid=1229566
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋| MCBBS纪念版 ( 新ICP备2024014954号|兵公网安备66010002000149号 )|隐私政策| 手机版

GMT+8, 2025-5-29 13:42 , Processed in 0.121687 second(s), 22 queries , Redis On.

"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

© 2010-2025 MCBBS纪念版 版权所有 本站内原创内容版权属于其原创作者,除作者或版规特别声明外未经许可不得转载

返回顶部