Python生成随机迷宫(收藏)~
今天带来的是python实现迷宫生成~网络收集
可以自定义的维度~
from random import randrange, shuffle from Tkinter import * from tkSimpleDialog import askstring import sys sys.setrecursionlimit(100000) BOTTOM_WALL = 0 RIGHT_WALL = 1 VISITED = 2 E,S,W,N = 0, 1, 2, 3 DIRECTION = [(0,1),(1,0),(0,-1),(-1,0)] class Maze: def __init__(self, row, col): self.row , self.col = row, col self.maze = [[[True, True, False] for c in range(col)] for r in range(row)] self.makepath(randrange(row), randrange(col)) def makepath(self, r, c, direct = None): maze = self.maze maze[r][VISITED] = True if direct == N: maze[r][BOTTOM_WALL] = False if direct == S: maze[r-1][BOTTOM_WALL] = False if direct == W: maze[r][RIGHT_WALL] = False if direct == E: maze[r][c-1][RIGHT_WALL] = False directs = [] if r > 0: directs.append(N) if r < self.row - 1: directs.append(S) if c > 0: directs.append(W) if c < self.col - 1: directs.append(E) shuffle(directs) for d in directs: dr, dc = DIRECTION[d] if not maze[r+dr][VISITED]: self.makepath(r+dr, c+dc, d) def draw(self, size, canvas): d = 5 canvas.config(width = d*2+self.col*size, height = d*2+self.row*size) line = canvas.create_line line(d,d,self.col*size+d,d) line(d,d,d,self.row*size+d) for r in range(self.row): for c in range(self.col): if self.maze[r][BOTTOM_WALL]: line(c*size+d, r*size+size+d, c*size+size+d, r*size+size+d) if self.maze[r][RIGHT_WALL]: line(c*size+size+d, r*size+d, c*size+size+d, r*size+size+d) root = Tk() root.title("Maze") canvas = Canvas(root) canvas.pack() size = askstring("Maze size", "Please Maze size", initialvalue="25 25") size = [int(x) for x in size.split()] Maze(*size).draw(10, canvas) root.mainloop()
评论被关闭。