1

行と列の数を指定してランダムな迷路を生成する機能があり、すべてが完全に細かく刻まれています...私がやりたいのは、迷路の中にある可能性のある壁と囲いを削除/削除して、迷路になるようにすることです「行き止まり」はありません。私は次のことを試しましたが、うまくいかないようです...誰もが私がどこで間違っているのかわかります

def random_maze_without_deadends(row,cols):
    maze = random_maze(row,cols) #this will generate a random maze and carve out a maze where all cells are defaulted to no value
    for i in xrange(row):
        for j in xrange(cols):
            z  = maze.open_directions(i,j) # assume maze.open_direction open's up the maze by  Returning a list of open (non-wall) directions from a cell given by row column  
            walls = ['N','S','W','E'] #preassigned values for north south west and east respectively to check open 'walls' of cells
            if i == 0:
                walls.remove('N')
            if i == i -1:
                walls.remove('S')
            if j == 0:
                walls.remove('W')
            if j == j-1:
                walls.remove('E')
            if len(z) == 1:
                walls.remove(z[0])
                return maze

以下は、前のコードでも使用されているものです。

class MazeCell:
    def __init__(self, r, c):
        self.row = r
        self.col = c
        self.directions = ["N", "S", "E", "W"]
        random.shuffle(self.directions)

    def random_maze(rows,cols):
        maze = Maze(rows, cols)
        carve_passages_stack(maze)
        return maze

私の主な質問は、基本的にデッドエンド関数のロジックの何が問題になっているのかということです。私が何を意味するのか理解しようと試みてくれてありがとう。

更新-これは私の現在の出力です:

 _________
| |  _  | |
| |_  | | |
|_____| | |
|  __x|_  |  <---This part should get opened up---where the x is as north south and east are clos
|_________|
4

2 に答える 2

1

した後 walls.remove(z[0])

壁配列には、行き止まりの壁である方向のみが含まれるようになりました。ただし、残っている壁の 1 つを取り除くために迷路を編集することはしません。

また、z を初期化した直後にチェックを実行して確認する必要があります。len(z) == 1そうでない場合はcontinue、次のセルに移動します。これにより、処理時間が節約されます。

于 2013-03-20T02:26:59.613 に答える
0

wallsは単なるリストです。

walls = ['N','S','W','E']

walls.remove(z[0])に影響wallsしますが、変更しませんmaze。Maze オブジェクトで使用されるメソッドやデータ構造を調べて、セルから壁を削除する方法を決定する必要があり(i,j)ますlen(z) == 1

また、が常に迷路を返すreturn mazeように、行をデデントする必要があります。random_maze_without_deadends

于 2013-03-20T02:39:40.820 に答える