Skip to content
Slack bot making a maze
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
output
plugins
.gitignore
LICENSE
README.md
makemaze.py
runbot.py
slackbot_settings.py
solvemaze.py
usage.jpg

README.md

迷路自動生成bot

自動で迷路を作ってくれるSlackBotです。~~人生の迷路は嫌でも勝手に作られていくのに~~~

Image

sample

準備

slackbotの作成などはggるときっと幸せになる。
まずrun.pyと同じ階層にTOKENS.jsonを作成してください。 中身は、

{
    "bot_token": "xxxx-xxxx...",
    "legacy_token": "xxxx-xxxx..."
}

としてください。

上の xxxx-xxxx... はbotのtokenに置き換えてください。 botのtokenはhttps://なんやらかんやら.slack.com/apps/manage/custom-integrations -> Bots -> 右の鉛筆のアイコン で見られます。 下の xxxx-xxxx... はLegacy tokenに置き換え。LegacyTokenはこ↑こ↓で確認できます。 python run.py でrun.pyを実行して、しばらくしてslack側でbotがオンラインになったら、botにDMを送る、または#generalなどでbotにリプライを送ってみてください。 メッセージの内容は次頁を参照。

コマンド

  • meiro -> 100×100の迷路
  • meiro 145 -> 145×145の迷路
  • meiro 30 35 -> 30×35の迷路 廃止
  • meiro 10 10 string -> 10×10の絵文字迷路 廃止
  • solve -> 迷路の解答を表示

コラム数は無制限ですが、300コラム以上はオススメしない。ループ回数に制限があり、1M回まで。迷路作成にかかる時間は100コラムで5秒、300コラムで7分ほど。slackbotで自動返信する場合はpingやファイル転送の関係で時間が倍かかる。

一言

どうやらslack上にuploadした画像は勝手には消えないようなので、容量が無駄だからダウンロードした後作った迷路はslack上から消しておいたらいいと思う。 また、実行する前にPILをインストールする必要がある。

sudo pip install pillow

slackbotじゃない用法

makemaze.pyを実行すればいいのだが、中身を編集したり、自分で別に実行ファイルを作成するのも良い。

from path.to.lib import meiro

meiro1 = meiro.ImageMeiro(200, 1000, 'meiro.jpg')
if meiro1.makeRoute():
    meiro1.save()

を実行すれば、200*200の迷路が保存される。 ちゃんとlib内のmeiro.pyをimportしてね!

makemaze.pyはコマンドライン引数で-c/-columnでコラム数を、-s/-sizeで画像のサイズ(px)を、-e/-entrancetypeでスタートとゴールの位置のタイプ(実装と仕様にて詳解)を指定できる。

python makemaze.py -c 200 -e 2

迷路を解く

solvemaze.pyを実行すれば、outputフォルダ内の迷路jpgから、正解を描き足したバージョンが作成されoutput内のsolutionフォルダ内に保存される。

solved maze

Depth Mapも同じく保存される。

depth map

solvemaze.pyはコマンドライン引数で-c/-colortypeで塗り分けのタイプを、-d/-drawanswerで解答のラインを描画するか否かを指定できる。

python solvemaze.py -c 2 -d False

Known Issue

  • 迷路の正解ルートが偏っている
  • 一定コラム以上の迷路の作成に時間がかかる

実装と仕様

class ImageMeiro

画像形式の迷路を作成するクラス。

引数

  1. 正確に言うと路地の数。おおまかには迷路のサイズ。
  2. 画像のおおまかなサイズ(pixel単位)。画像は第二引数より少し大きめのサイズになる。
  3. 保存ファイルのパス。save()で保存される。
  4. スタート・ゴールの位置。0なら左下と右上、1なら上下真ん中、2なら上下のランダムな位置、3なら左右のランダムな位置。

class SolveMeiro

迷路の解凍やDepth Mapを作成するクラス

引数

  1. 読み込む画像のパス。絶対パス(相対パスでなく)にするべき。

関数

  • createSolutionMap(保存先のパス)・・・solution mapを作成
  • createDepthMap(保存先のパス, 色のタイプ, 解答のラインを描くか否か)・・・depth mapを作成。色のタイプは現在0-2まで存在。

class AbstractMeiro

迷路自体の作成をするクラス。save(),fillPoint()などは抽象メソッド。

引数

  1. 横の路地の数
  2. 縦の路地の数
  3. 壁の間隔
  4. 壁の厚さ
  5. スタート・ゴールの位置。0なら左下と右上、1なら上下真ん中、2なら上下のランダムな位置、3なら左右のランダムな位置。
You can’t perform that action at this time.