1.1.5 • Published 8 years ago
sokoban-generator v1.1.5
Sokoban Level Generator (JavaScript)
A procedural level generator for Sokoban, written in JavaScript.
Install
npm i sokoban-generatorDemo
Play Sokoban created by this generator in action!
The website above uses the default options for the generator, except that it specifies the initial position of the player.
Usage
// es6
import {generateSokobanLevel} from sokoban-generator;
generateSokobanLevel();
// es5 or older
var sokobanGenerator = require("sokoban-generator");
sokobanGenerator.generateSokobanLevel();The generator accepts an optional options, and can return either a string representation of the level, or a grid class.
If will return null if no solution is found. Increasing attempts might help.
const options = {
width: 9, // the width of the sokoban grid
height: 9, // the height of the sokoban grid
boxes: 3, // the boxes on the grid
minWalls: 13, // the minimum number of walls on the grid
attempts: 5000, // when generating the map, the maximum attempts
seed: Date.now(), // map seed. See note below
initialPosition: { // The initial position of player
x: 0,
y: 0
},
type: "string", // the return type, either "string" or "class"
};
let level = generateSokobanLevel(options);Note
- Seed is only expected to generate the same map under the same options. This means, for example,
generateSokobanLevel({seed: 1, boxes: 2})andgenerateSokobanLevel({seed: 1, boxes: 3})will probably generate different levels.
Performance
The time it takes to generate a level is greatly increased when the number of size and walls are increased.
It took ~1 seconds to generate a result on default settings on a 2015 Ultrabook Laptop on Node, but it took only less than a second on runkit.
License
GNU GPLv3
Reference
The whole algorithm is partially based on this paper