- Introduced a new biome system with various biome types and properties. - Implemented terrain generation using Perlin noise to create diverse landscapes. - Added examples for basic tilemap generation and biome analysis. - Created helper functions for displaying tiles and biomes in the console. - Enhanced the TileMap class to support chunk-based tile management. - Developed a PerlinNoise class for generating smooth noise patterns. - Updated generation configuration to include climate parameters for biomes. - Implemented error handling for out-of-bounds access in TileMap. Signed-off-by: szdytom <szdytom@qq.com>
2.5 KiB
2.5 KiB
Perlin Noise Tilemap Generator
这个项目实现了一个基于Perlin噪声的C++地图生成系统,可以生成包含不同地形类型的n×n区块地图。
功能特性
- Perlin噪声生成: 使用高质量的Perlin噪声算法生成自然的地形
- 区块系统: 支持最大100×100区块的大型地图
- TilePos坐标系统: 使用chunk_x, chunk_y, local_x, local_y的四元坐标系统
- 多种地形类型: 支持空地、山地、森林、沙地、水域五种地形
- 可配置生成: 提供种子、缩放、八度等可调参数
使用示例
#include "generation.h"
#include "tilemap.h"
int main() {
// 创建一个10×10区块的地图
istd::TileMap tilemap(10);
// 配置生成参数
istd::GenerationConfig config;
config.seed = 12345;
config.scale = 0.02;
config.octaves = 4;
config.persistence = 0.5;
// 生成地图
istd::map_generate(tilemap, config);
// 访问特定位置的瓦片
istd::TilePos pos{5, 5, 32, 32}; // 区块(5,5)的本地坐标(32,32)
istd::Tile tile = tilemap.get_tile(pos);
// 修改瓦片
istd::Tile mountain = istd::Tile::from_name("mountain");
tilemap.set_tile(pos, mountain);
return 0;
}
地形类型
- 空地 (
empty
): 类型0,显示为空格' ' - 山地 (
mountain
): 类型1,显示为'^' - 森林 (
wood
): 类型2,显示为'T' - 沙地 (
sand
): 类型3,显示为'.' - 水域 (
water
): 类型4,显示为'~'
坐标系统
使用TilePos
结构体表示地图中的位置:
chunk_x
,chunk_y
: 区块坐标 (0-99)local_x
,local_y
: 区块内本地坐标 (0-63)
每个区块包含64×64个瓦片。
构建和运行
# 构建项目
cmake -S . -B build && cmake --build build
# 运行基础演示
./build/tilemap/tilemap_demo
# 运行高级演示
./build/tilemap/tilemap_advanced_demo
API参考
TileMap类
TileMap(uint8_t size)
: 构造指定大小的地图get_tile(const TilePos& pos)
: 获取指定位置的瓦片set_tile(const TilePos& pos, const Tile& tile)
: 设置指定位置的瓦片get_chunk(uint8_t x, uint8_t y)
: 获取指定区块
GenerationConfig结构体
seed
: 随机种子scale
: 噪声坐标缩放octaves
: 噪声八度数量persistence
: 八度持续性*_threshold
: 各地形类型的噪声阈值
PerlinNoise类
PerlinNoise(uint64_t seed)
: 构造噪声生成器noise(double x, double y)
: 生成2D噪声值octave_noise(...)
: 生成多八度噪声值