📜  洞穴生成器 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:40:44.652000             🧑  作者: Mango

洞穴生成器 - TypeScript

洞穴生成器 - TypeScript 是一个适用于 TypeScript 开发者的工具,可以帮助生成具有险象环生的洞穴地形。使用该工具可以快速生成洞穴地形,使得开发者可以更加专注于游戏逻辑的实现,提高游戏开发效率。

如何使用

使用洞穴生成器 - TypeScript,需要先安装 TypeScript。

同时,你需要在你的项目中引入洞穴生成器 - TypeScript,使用以下命令:

npm install cave-generator-typescript

在你的代码中,使用以下语句来生成一个洞穴:

import { CaveGenerator } from 'cave-generator-typescript';

const generator = new CaveGenerator(width, height, {
  fillPercentage: 40,
  smoothLevel: 4,
  tileGenerator: (x, y, wall) => wall ? '#' : '.'
});

const map = generator.generate();

其中,widthheight 分别表示生成地图的宽度和高度;fillPercentage 为初始时,填充地图的百分比;smoothLevel 为洞穴地形的平滑度,该数值越小,地形越崎岖;tileGenerator 为地形方块的生成函数,可以根据需要进行自定义。

API
CaveGenerator

该类表示地图的生成器。

构造函数

constructor(width: number, height: number, options: CaveGeneratorOptions);

参数:

  • width {Number} - 生成地图的宽度
  • height {Number} - 生成地图的高度
  • options {CaveGeneratorOptions} - 生成地图的选项

generate

generate(): Tile[][];

生成洞穴地形,并返回一个二维数组。数组中的每个元素表示一个地形方块,其中 1 表示地形方块(墙壁),0 表示空地方块。

CaveGeneratorOptions

表示地形生成的选项。

interface CaveGeneratorOptions {
  fillPercentage?: number;
  smoothLevel?: number;
  tileGenerator?: (x: number, y: number, isWall: boolean) => any;
}

参数:

  • fillPercentage {Number} - 初始时,填充的地图百分比(默认值:40
  • smoothLevel {Number} - 地形平滑度(默认值:4
  • tileGenerator {Function} - 地形方块的生成函数,可自定义方块样式(默认值:isWall ? '#' : '.')。函数参数包括方块的 xy 坐标和该方块是否为墙壁。
示例
import { CaveGenerator } from 'cave-generator-typescript';

const width = 50;
const height = 50;

const generator = new CaveGenerator(width, height, {
  fillPercentage: 40,
  smoothLevel: 4,
  tileGenerator: (x, y, wall) => wall ? '#' : '.'
});

const map = generator.generate();
console.table(map);

输出结果:

┌─────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬ ...
│ (index) │  0  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │ 10  │ 11  │ 12  │ 13  │ 14  │ 15  │ ...
├─────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼ ...
│    0    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '.' │ '.' │ '#' │ '#' │ '#' │ '#' │ ...
│    1    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ ...
│    2    │ '#' │ '.' │ '#' │ '#' │ '#' │ '.' │ '.' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ ...
│    3    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│    4    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ ...
│    5    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '.' │ '#' │ '#' │ '#' │ ...
│    6    │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ ...
│    7    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│    8    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ ...
│    9    │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   10    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   11    │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ ...
│   12    │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   13    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ ...
│   14    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   15    │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   16    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   17    │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   18    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ ...
│   19    │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   20    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   21    │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ ...
│   22    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   23    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   24    │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '.' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   25    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
│   26    │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ '#' │ ...
└─────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴ ...

这是一个使用洞穴生成器生成的随机地形,其中 '#' 代表地形方块(墙壁),. 代表空地方块。你可以根据需要,自定义地形方块的样式。