Skip to main content

Sokoban and variants game utilities

Project description

sokoenginepy - Sokoban and variants

version license python_versions python_implementations travis docs Codacy Badge codecov

This project implements various utilities for Sokoban:

  • board representation for Sokoban, Hexoban, Trioban and Octoban variants with support for Sokoban+ and Multiban for all four variants
  • game engine implementation
  • SokobanYASC compatible level collections file reader / writer

It provides two implementations:

  • sokoenginepy - pure Python implementation
  • libsokoengine - C++ library

Example

In Python:

import textwrap
from sokoenginepy.io import SokobanPuzzle
from sokoenginepy.game import BoardGraph, Mover, Direction, Config

data = textwrap.dedent("""
        #####
        #  @#
        #$  #
      ###  $##
      #  $ $ #
    ### # ## #   ######
    #   # ## #####  ..#
    # $  $          ..#
    ##### ### #@##  ..#
        #     #########
        #######
""".lstrip("\n").rstrip())
puzzle = SokobanPuzzle(board=data)
board = BoardGraph(puzzle)
mover = Mover(board)
mover.select_pusher(Config.DEFAULT_PIECE_ID + 1)
mover.move(Direction.UP)

or in C++:

#include <sokoengine.hpp>

using sokoengine::game::BoardGraph;
using sokoengine::game::Direction;
using sokoengine::game::Mover;
using sokoengine::game::Config;
using sokoengine::io::SokobanPuzzle;
using std::string;

int main() {
  string data =
    string() +
    "    #####\n" +
    "    #  @#\n" +
    "    #$  #\n" +
    "  ###  $##\n" +
    "  #  $ $ #\n" +
    "### # ## #   ######\n" +
    "#   # ## #####  ..#\n" +
    "# $  $          ..#\n" +
    "##### ### #@##  ..#\n" +
    "    #     #########\n" +
    "    #######\n"
  ;

  SokobanPuzzle puzzle(data);
  BoardGraph board(puzzle);
  Mover mover(board);
  mover.select_pusher(Config::DEFAULT_PIECE_ID + 1);
  mover.move(Direction::UP);

  return 0;
}

Install

sokoenginepy package from PyPi:

pip install sokoenginepy

or libsokoengine C++ library:

sudo apt install git build-essential libboost-graph-dev cmake doxygen
git clone https://github.com/tadams42/sokoenginepy.git
cd sokoenginepy/
cmake --preset "debug"
cd build/debug/
make && make install

On Linux, installing package via pip will also try to build native C++ extension that utilizes libsokoengine for improved speed. In case it can't build, it will install pure Python implementation. On any other OS, pip will install pure Python only.

For more elaborate details, see INSTALL.md

Why?

  • experimenting with Boost.X3 in C++
  • experimenting with Boost.Graph in C++
  • experimenting with NetworkX in Python
  • experimenting with pybind11
  • playing with SokobanYASC .sok file format and providing fully compatible implementation for it in both, Python and C++

Documentation

If you're looking for C++ docs in Doxygen format, they are here:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sokoenginepy-0.6.0.tar.gz (1.5 MB view hashes)

Uploaded Source

Built Distribution

sokoenginepy-0.6.0-py3-none-any.whl (74.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page