暇ですよねwww
そんな時はお金のかからない方法で
遊びを見つけてみよーじゃないですか
自作でプログラム作ればタダです。
ということで迷路を作るプログラムを作ってみました。
解説動画はこちら
今回のプログラムでは穴掘り法というアルゴリズムを使用しています。
どんな感じかというと
1.縦横それぞれ奇数個サイズのマス作る
2.縦横それぞれ奇数座標のマスをランダムに選択する
3.方向をランダムに選択し2マス先のマスを調べて
まだ通路でなければ通路に変える
4.ランダムに選択した方向の2マス先が通路の場合はここで一旦終了
6.スタートとゴールをつけてあげる
ソースコードはこちら
sizeの所に奇数で縦横のサイズを入れてください。
横はデカすぎるとダメですが、縦は大きくても問題ないです。
こんな感じになるはずです。

黒いのが壁で白抜きが道。
右下にゴールがあります。
でかいサイズで作ったら
PDFとかにでもして
印刷すれば即席巨大迷路の完成です。
どこまで大きなサイズができるかは知りませんが
色々遊べると思うので
動かして遊んでみてくださいませ。
それでは。
そんな時はお金のかからない方法で
遊びを見つけてみよーじゃないですか
自作でプログラム作ればタダです。
ということで迷路を作るプログラムを作ってみました。
解説動画はこちら
今回のプログラムでは穴掘り法というアルゴリズムを使用しています。
どんな感じかというと
1.縦横それぞれ奇数個サイズのマス作る
2.縦横それぞれ奇数座標のマスをランダムに選択する
3.方向をランダムに選択し2マス先のマスを調べて
まだ通路でなければ通路に変える
4.ランダムに選択した方向の2マス先が通路の場合はここで一旦終了
5.新たに縦横奇数座標のマスをランダムに選択し
通路を延ばせるマスが無くなるまで繰り返す
通路を延ばせるマスが無くなるまで繰り返す
6.スタートとゴールをつけてあげる
ソースコードはこちら
import random
import sys
sys.setrecursionlimit(10**6)
# 穴掘り法で迷路を作る
def make(ny, nx):
ar = list(range(4))
random.shuffle(ar)
for i in ar:
if ny+dy[i][1]<1 or ny+dy[i][1]>=size[0]:
continue
if nx+dx[i][1]<1 or nx+dx[i][1]>=size[1]:
continue
if maze[ny+dy[i][1]][nx+dx[i][1]]=="□":
continue
for j in range(2):
maze[ny+dy[i][j]][nx+dx[i][j]] = "□"
make(ny+dy[i][1], nx+dx[i][1])
#height , width Enter with odd number
size = (101, 51)
maze = [["■"]*size[1] for _ in range(size[0])]
dx,dy = [(1,2), (-1,-2), (0,0), (0,0)],[(0,0), (0,0), (1,2), (-1,-2)]
make(1, 1)
maze[1][1],maze[size[0]-2][size[1]-2] = "す","ご"
for i in maze:
print(*i)
ちゃんと確認はしてませんが動くはずです。sizeの所に奇数で縦横のサイズを入れてください。
横はデカすぎるとダメですが、縦は大きくても問題ないです。
こんな感じになるはずです。

黒いのが壁で白抜きが道。
右下にゴールがあります。
でかいサイズで作ったら
PDFとかにでもして
印刷すれば即席巨大迷路の完成です。
どこまで大きなサイズができるかは知りませんが
色々遊べると思うので
動かして遊んでみてくださいませ。
それでは。

コメントする