我是一般的编码初学者,但我知道我的基本方法。作为一个挑战,可能还有一个地图生成工具,我想看看我是否可以使用python创建一个基于小文本的5x5迷宫生成器,它被隔离(没有出口或入口),允许循环和死角。我亲自画了一个例子:
┌ → ↑ ┌ ┐
├ ─ ┴ ┼ ┤
│ ┌ ┬ ┘ │
├ ┘ │ ← ┤
↓ ← ┴ ─ ┘
(箭头表示来自箭头相反方向的死角)
我无法取得多大进展,并且相当迅速地放弃了,决定我的编码知识不是创造这种复杂的东西的水平。现在我想知道是否有一种简单的方法来做这样的事情。在沿着生长树,视觉代码等的兔子洞走下去之后,其中95%我几乎无法理解,我找不到多少帮助我。我正在寻找一种(希望)易于理解的方法来创建一个可以实现这一目标的代码。理想情况下,我希望答案是在python中,并且对于初学者 - 中等程序员来说,如果有足够的时间,这是一个相对容易理解的东西。另外,请原谅我写的这个问题的任何可怕的模糊/过于复杂的部分,他们很可能是因为我不太了解这个编码领域。
如果有一个更简单的方法来表达这个问题,或者更简单的创建5x5迷宫的方法而不是基于文本,这些也非常受欢迎:)
答案 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()