Games::Sokoban - load/transform/save sokoban levels in various formats
use Games::Sokoban;
I needed something like this quickly - if you need better docs, you have to ask.
Supports xsb (text), rle, sokevo and a small "binpack" format for input and output and can normalise levels as well as calculate unique IDs.
Sets the level from the given data.
Returns the level in xsb/text format - every row of the level is one line ended by a newline, e.g.:
"###\n# #\n###\n"
Binpack is a very compact binary format (usually 17% of the size of an xsb file), that is still reasonably easy to encode/decode.
It only tries to store simplified levels with full fidelity - other levels can be slightly changed outside the playable area.
Returns the level as a list of rows, each row is a text representation of the respective level row, e.g.:
("###", "# #", "###")
http://www.sokobano.de/wiki/index.php?title=Level_format
Example:
"3#|# #|3#"
Returns (0-based) starting coordinate.
Mirror horizontally.
Mirror vertically.
Transpose level (mirror at top-left/bottom-right diagonal).
Rotate by 90 degrees clockwise.
Rotate by 180 degrees clockwise.
Detect playable area, crop to smallest size.
Simplifies the level map and calculates/returns its identity code. . http://www.sourcecode.se/sokoban/level_id.php, assume uppercase and hex.
Loads a sokevo snapshot/history file and returns all contained levels as Games::Sokoban objects in an arrayref.
Marc Lehmann <schmorp@schmorp.de> http://home.schmorp.de/