4 个版本 (破坏性更新)
0.4.0 | 2023 年 5 月 4 日 |
---|---|
0.3.0 | 2023 年 4 月 26 日 |
0.2.0 | 2023 年 4 月 15 日 |
0.1.0 | 2023 年 4 月 1 日 |
#1382 in 游戏开发
215KB
1.5K SLoC
Morkov Maptiler
数据驱动的程序化地图生成
大陆
废弃的空间站
...等等!
用法
Morkov Maptiler 可以作为一个应用程序和一个 Rust 库使用。
应用程序
预构建:
只需运行可执行文件(Windows 上为 morkovmap.exe
)
从源代码:
您需要安装 Rust 编译器。
- 下载并安装 Rust 编译器(如果您还没有的话)
- 下载此项目的源代码
- 在项目的根目录中打开您的终端(您应该至少能看到这个 README 和一个
src/
)。 - 在终端中,运行
cargo run -r
。 - 现在您应该会看到代码正在编译和运行。
在两种情况下,您现在应该会看到在可执行文件相同的目录中创建了一个新文件,名为 map.png
。
配置
地图生成规则可以在运行应用程序的工作目录中名为 rules.json
的文件中编辑。
如果您看不到此文件,则将在第一次运行后自动为您生成一个默认预设。
或者,您可以将 examples/
目录中的一个规则集文件复制并编辑,然后将其保存为 rules.json
。
截至目前,配置包含三个主要部分
- 布局规则
- 着色规则
- 地图大小
布局规则
布局规则是一张相对权重的映射表;例如
{
"1": {"1": 1.0, "2": 3.0},
"2": {"1": 3.0, "2": 1.0}
}
表示类型 1 的地砖有三种可能性会过渡到类型 2 的相邻地砖,而不是另一种类型 1。
同样,类型 2 的地砖有三种可能性会过渡到类型 1 的相邻地砖,而不是同类型的 2。
这种类型的规则可能会提供轻微的 '条纹' 效果,其中 1 和 2 大约交错在一起。
着色规则
这对你来说太抽象了吗?
好吧,这是因为类型目前还不代表任何东西,这正是着色规则发挥作用的地方。
这些是将类型(与布局相同)映射到 RGB 颜色以进行可视化的映射表。
例如,
"1": {
"Rgb": [
10,
255,
10
]
},
"2": {
"Rgb": [
10,
10,
255
]
}
表示类型1的瓦片是绿色(例如草地)而类型2的瓦片是蓝色(例如水)。
请注意,这种可视化惯例没有任何“意义”附加;我们可以轻松地翻转颜色方案,布局仍然相同。
目前,只有可视化引擎使用全像素为每个瓦片着色 - 在将来,这将被扩展。
关于这一点,单个地图像素不一定对应单个“物理”瓦片!
您可以将此用作库来生成“生物群落”,并将每个生成的瓦片扩展到数百或数千个子瓦片!
然后您如何填充生物群落就取决于您了 - 您甚至可以使用库递归地,使用每个生物群落不同的规则集来填充瓦片。
地图大小
这一点应该相当容易理解。地图的大小,由边长定义(它是一个正方形)。
例如,100
结果是一个100x100像素的地图。
请记住,处理时间与瓦片数量(线性)和地图大小(对于二维地图是平方)成比例,所以如果您将地图大小从100像素增加到200像素,您应该预计它将慢4倍才能完成。
尽管如此,当前未优化的生成器很容易在一次运行中处理多达一百万个瓦片(1000x1000),使用 超过这一点事情开始变得复杂,一次性生成如此大的地图在本质上是不高效的 - 我们正在存储对我们目的不再相关的地图数据。 这并不意味着不可能 - 但更好的方法是生成较小的地图并将它们的边缘拼接在一起,这正是这种算法非常擅长的事情。
依赖项
~8.5MB
~89K SLoC