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("""
        #####
        #  @#
        #$  #
      ###  $##
      #  $ $ #
    ### # ## #   ######
    #   # ## #####  ..#
    # $  $          ..#
    ##### ### #@##  ..#
        #     #########
        #######
""")
puzzle = SokobanPuzzle(board=data)
board = BoardGraph(puzzle)
mover = Mover(board)
mover.select_pusher(Config.DEFAULT_ID + 1)
mover.move(Direction.UP)
print(board)

or in C++:

#include <sokoengine.hpp>

#include <iostream>

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 = R"""(
    #####
    #  @#
    #$  #
  ###  $##
  #  $ $ #
### # ## #   ######
#   # ## #####  ..#
# $  $          ..#
##### ### #@##  ..#
    #     #########
    #######
)""";

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

  std::cout << board.str() << std::endl;

  return 0;
}

Install

sokoenginepy package from PyPi:

pip install sokoenginepy

or libsokoengine C++ library:

You will need vcpkg and then:

sudo apt install git build-essential cmake doxygen

git clone https://github.com/tadams42/sokoenginepy.git
cd sokoenginepy/

export CMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake
cmake --preset "debug"

cd build/debug/
make && make install

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

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-1.0.2.tar.gz (1.5 MB view hashes)

Uploaded Source

Built Distribution

sokoenginepy-1.0.2-py3-none-any.whl (77.6 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