2个版本
0.1.1 | 2021年11月13日 |
---|---|
0.1.0 | 2021年11月8日 |
#765 in 游戏开发
41 每月下载量
用于 ddnet-map-gen
17KB
192 代码行
一个小巧易用的库,用于为游戏生成迷宫
Irrgarten 允许您以任意大小生成迷宫。与类似的库相比,Irrgarten 特别关注在游戏中使用这些迷宫。主要优点包括
生成的迷宫本质上是对应的瓦片图 - 墙只是瓦片
这与其他创建美丽迷宫但使用内部表示(如位掩码)的墙的生成器不同。在 Irrgarten 中,您只需得到一个这样的二维向量
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 0 0 0 0 0 0 0 0 0 0 1
1 0 1 1 1 0 1 1 1 1 1 1 1 0 1
1 0 1 0 0 0 1 0 0 0 1 0 0 0 1
1 0 1 0 1 1 1 0 1 0 1 0 1 1 1
1 0 0 0 1 0 0 0 1 0 1 0 0 0 1
1 1 1 1 1 0 1 1 1 0 1 1 1 0 1
1 0 0 0 1 0 0 0 1 0 1 0 0 0 1
1 0 1 0 1 1 1 0 1 1 1 0 1 1 1
1 0 1 0 0 0 0 0 1 0 0 0 1 0 1
1 0 1 1 1 1 1 1 1 0 1 1 1 0 1
1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 1 1 1 1 1 0 1 1 1 1 1 0 1
1 0 0 0 0 0 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
其中墙用 1
表示,地面用 0
表示,您可以将它们直接映射到任何瓦片图、网格图或其他您喜欢的引擎提供的类似瓦片的图形结构。
可注入的随机性
您提供自己的随机数生成器。因此,您可以完全控制种子和随机性的内部状态。这使得您可以确定性地生成相同的迷宫,例如,在网络上。现在您只需同步参与者的种子,而不是整个迷宫。您还可以使用此种子用于重放系统,让测试者与您分享困难的种子以评估等。对于具有此类生成内容的游戏非常有用。
使用方法
将以下内容添加到您的 Cargo.toml 中
[dependencies]
irrgarten = "0.1"
您还需要选择一个随机数生成器。以下示例中,我们简单地使用了 rand crate。
示例:简单迷宫生成
use irrgarten::Maze;
use rand;
fn main() {
let mut rng = rand::thread_rng();
// Full maze generation. The dimensions can be any odd number that is > 5.
let maze = Maze::new(63, 31).unwrap().generate(&mut rng);
// The generated maze data can be accessed via index:
for y in 0..maze.height {
for x in 0..maze.width {
println!("{}", maze[x][y]);
}
}
// Alternatively, Maze also provides into_iter(), iter() and iter_mut()
// methods to iterate over the columns.
}
示例:生成迷宫图像(用于易于检查/原型设计)
use irrgarten::Maze;
use rand;
use std::fs;
fn main() {
let mut rng = rand::thread_rng();
let maze = Maze::new(255, 255).unwrap().generate(&mut rng);
// Save image to disk. Can be opened with most image viewers.
fs::write("maze.pbm", maze.to_pbm()).unwrap();
}
示例:使用具有种子的不同随机数生成器
使用 xoshiro 生成器
use irrgarten::Maze;
use rand_xoshiro::rand_core::SeedableRng;
use rand_xoshiro::Xoshiro256Plus;
fn main() {
let mut rng = Xoshiro256Plus::seed_from_u64(123123123);
let maze = Maze::new(4095, 4095).unwrap().generate(&mut rng);
}
依赖关系
~0.5–1MB
~23K SLoC