NAME
    Games::Sokoban - load/transform/save sokoban levels in various formats

SYNOPSIS
     use Games::Sokoban;

DESCRIPTION
    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.

    $level = new Games::Sokoban [format => "text|rle|binpack"], [data =>
    "###..."]
    $level = new_from_file Games::Sokoban $path[, $format]
    $level->data ([$new_data, [$new_data_format]])
        Sets the level from the given data.

    $text = $level->as_text
    $binary = $level->as_binpack
        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.

    @lines = $level->as_lines
    $line = $level->as_rle
        http://www.sokobano.de/wiki/index.php?title=Level_format

    ($x, $y) = $level->start
        Returns (0-based) starting coordinate.

    $level->hflip
        Mirror horizontally.

    $level->vflip
        Mirror vertically.

    $level->transpose
        Transpose level (mirror at top-left/bottom-right diagonal).

    $level->rotate_90
        Rotate by 90 degrees clockwise.

    $level->rotate_180
        Rotate by 180 degrees clockwise.

    $id = $level->simplify
        Detect playable area, crop to smallest size.

    $id = $level->normalise
        Simplifies the level map and calculates/returns its identity code. .
        http://www.sourcecode.se/sokoban/level_id.php, assume uppercase and
        hex.

    $levels = Games::Sokoban::load_sokevo $path
        Loads a sokevo snapshot/history file and returns all contained
        levels as Games::Sokoban objects in an arrayref.

AUTHOR
     Marc Lehmann <schmorp@schmorp.de>
     http://home.schmorp.de/