#地下城 #rogue-like #生成 #算法 #游戏开发

tatami-dungeon

一个rogue-like地下城生成算法

6个版本

0.1.5 2024年8月12日
0.1.4 2024年8月8日
0.1.2 2024年7月4日

#273 in 游戏开发

Download history 317/week @ 2024-06-28 45/week @ 2024-07-05 1/week @ 2024-07-12 4/week @ 2024-07-19 19/week @ 2024-07-26 155/week @ 2024-08-02 183/week @ 2024-08-09

361 每月下载量

MIT 许可证

75KB
1.5K SLoC

Tatami — License 最新版本 文档

Tatami是一个rogue-like地下城生成算法,它通过一系列随机方向的、相互连接的矩形来创建多层的地下城布局。

该库试图提供rogue-like游戏中常见的许多功能,如楼梯、传送门、物品、敌人和陷阱。它旨在作为构建完整游戏的基础。

您可以在这里找到如何使用它的教程。

示例

输出生成的地下城图像

let dungeon = Dungeon::generate();

dungeon.output_as_image("dungeon.png", "images/spritesheet.png", 8);
dungeon.output_floor_as_image(0, "floor-1.png", "images/spritesheet.png", 8);

示例输出

dungeon floor

为您的游戏生成地下城

let dungeon = Dungeon::generate();

for floor in &dungeon.floors {
    for (x, col) in floor.tiles.iter().enumerate() {
        for (y, tile) in col.iter().enumerate() {
            match tile {
                Tile::Floor => // Draw floor tile at (x, y)
                Tile::Wall => // Draw wall tile at (x, y)
            }
        }
    }

    for room in &floor.rooms {
        for item in &room.items {
            match item.rarity {
                1..=20 => // Spawn common item
                21..=40 => // Spawn uncommon item
                41..=60 => // Spawn rare item
                61..=80 => // Spawn epic item
                81..=100 => // Spawn legendary item
                _ => unreachable!(),
            }
        }

        for enemy in &room.enemies {
            match enemy.difficulty {
                1..=20 => // Spawn common enemy
                21..=40 => // Spawn uncommon enemy
                41..=60 => // Spawn rare enemy
                61..=80 => // Spawn epic enemy
                81..=100 => // Spawn legendary enemy
                _ => unreachable!(),
            }
        }

        for trap in &room.traps {
            match trap.difficulty {
                1..=20 => // Spawn common trap
                21..=40 => // Spawn uncommon trap
                41..=60 => // Spawn rare trap
                61..=80 => // Spawn epic trap
                81..=100 => // Spawn legendary trap
                _ => unreachable!(),
            }
        }
    }
}

依赖项

~5.5MB
~108K SLoC