Minecraft JE: 基于随机区块的地图生成设计 - illusion 的实现
基于随机区块的地图生成设计 - illusion 的实现
在地图 illusion 中实现了通过预先保存的结构进行局内地形随机生成,以实现每场对局的地形都不同的效果。
效果示例
实现思路
随机数生成
在 JE: 原版实现随机数生成 中,我们实现了在 Minecraft JE 中通过 UUID 生成随机数的方法,并基于此实现了随机数生成器。
区块类型
首先,局内地图被分为了以下几种区块:
- 大门区块
- 固定区块
- 淘汰区块
- 供奉区块
- 主要/次要建筑
- 随机区块
其中,大门区块与固定区块不参与随机生成。
- 大门区块
包含开启大门的烛台,用于逃生者逃脱 - 固定区块
不被刷新或随机更改的区域 - 淘汰区块
场上有 3 个作为淘汰区块的区域,生成地图时会随机选择 2 个区块作为淘汰区块,另一个作为固定建筑刷新该区块类型为唯一区块,位置随机,但地图中必定包含所有种类的该区块
- 供奉区块
场上有 7 个供奉区块,其中 5 个区块中含有供奉箱(另外两个在主要/次要建筑中)该区块类型为唯一区块,位置随机,但地图中必定包含所有种类的该区块
- 主要/次要建筑
场上有 1 个主要建筑和 1 个次要建筑,在该区块中必定会刷新一个供奉箱该区块位置固定,但有两种刷新情况,不同情况下门、窗、供奉箱位置不同
- 随机区块
场上有若干随机区块,刷新时将从 32 个模板区块中随机选择一项进行刷新随机区块刷新情况不固定,不唯一,且可能一次刷新中不包含某些区块
区块刷新
通过结构方块预先保存了多种区块模板,在刷新时通过随机数生成器生成随机数进行选择。
唯一区块刷新
使用随机数选择列表中的区块进行刷新,刷新后该项将被标记,再次步进到此将跳过
如图中所示,标记
将一直向左边传送,默认未刷新的区块将以石头表示。
执行随机数操作后 标记
向左步进随机数次数,当 标记
步进至铁块上时,回到最右方起点
步进结束后,将所在方块设置为红石块(并执行了命令方块内的指令)
如果下次步进结束后所在位置为红石块,将步过(跳过)该位置至下一个位置
此处 标记
指代 Minecraft JE 中的实体 Marker (标记),下同。
随机区块刷新
遍历所有带有指定 Tag 的 标记
,作为 标记
在自身的位置执行生成函数
execute as @e[type=marker,tag=随机区块,tag=!随机区块.done] at @s run function 生成随机区块
主要/次要建筑刷新
指定 标记
在自身的位置执行生成函数
execute as @e[type=marker,tag=主要建筑,tag=!主要建筑.done] at @s run function 生成主要建筑
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hello! I'm 0o酱!
评论