在Python中创建基于文本的迷宫生成器

时间:2015-07-26 06:09:09

标签: python text random graph maze

我是一般的编码初学者,但我知道我的基本方法。作为一个挑战,可能还有一个地图生成工具,我想看看我是否可以使用python创建一个基于小文本的5x5迷宫生成器,它被隔离(没有出口或入口),允许循环和死角。我亲自画了一个例子:

┌ → ↑ ┌ ┐

├ ─ ┴ ┼ ┤

│ ┌ ┬ ┘ │

├ ┘ │ ← ┤

↓ ← ┴ ─ ┘

(箭头表示来自箭头相反方向的死角)

我无法取得多大进展,并且相当迅速地放弃了,决定我的编码知识不是创造这种复杂的东西的水平。现在我想知道是否有一种简单的方法来做这样的事情。在沿着生长树,视觉代码等的兔子洞走下去之后,其中95%我几乎无法理解,我找不到多少帮助我。我正在寻找一种(希望)易于理解的方法来创建一个可以实现这一目标的代码。理想情况下,我希望答案是在python中,并且对于初学者 - 中等程序员来说,如果有足够的时间,这是一个相对容易理解的东西。另外,请原谅我写的这个问题的任何可怕的模糊/过于复杂的部分,他们很可能是因为我不太了解这个编码领域。

如果有一个更简单的方法来表达这个问题,或者更简单的创建5x5迷宫的方法而不是基于文本,这些也非常受欢迎:)

1 个答案:

答案 0 :(得分:3)

http://rosettacode.org/wiki/Maze_generation#Python开始,您可以选择要创建的迷宫的大小(它应该是5x5)。

它使用墙壁而不是走廊的文字字符,但一般概念应该仍然有用。

from random import shuffle, randrange

def make_maze(w = 16, h = 8):
    vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
    ver = [["|  "] * w + ['|'] for _ in range(h)] + [[]]
    hor = [["+--"] * w + ['+'] for _ in range(h + 1)]

    def walk(x, y):
        vis[y][x] = 1

        d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
        shuffle(d)
        for (xx, yy) in d:
            if vis[yy][xx]: continue
            if xx == x: hor[max(y, yy)][x] = "+  "
            if yy == y: ver[y][max(x, xx)] = "   "
            walk(xx, yy)

    walk(randrange(w), randrange(h))
    for (a, b) in zip(hor, ver):
        print(''.join(a + ['\n'] + b))

make_maze()