陈沧夜 2016-12-19 06:40 采纳率: 0%
浏览 935
已结题

求助,程序运行错误,不能得到想要的结果,即随机生成迷宫,再遍历的GUI界面。麻烦前辈指点

 import sys
from random import randrange, shuffle
from tkSimpleDialog import askstring
from Tkinter import *
sys.setrecursionlimit(100000)
BOTTOM_WALL = 0
RIGHT_WALL = 1
VISITED = 2
VISITE = 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 = [[[1, 1, 0] for c in range(col)] for r in range(row)]
        self.makepath(randrange(row), randrange(col))
        self.walk(0,0)
        self.s = []


    def makepath(self, r, c, direct = None):

        maze = self.maze

        maze[r][c][VISITED] = 1

        if direct == 3: maze[r][c][BOTTOM_WALL] = 0
        if direct == 1: maze[r-1][c][BOTTOM_WALL] = 0
        if direct == 2: maze[r][c][RIGHT_WALL] = 0
        if direct == 0: maze[r][c-1][RIGHT_WALL] = 0

        directs = []
        if r > 0: directs.append(3)
        if r < self.row - 1: directs.append(1)
        if c > 0: directs.append(2)
        if c < self.col - 1: directs.append(0)

        shuffle(directs)

        for d in directs:

            dr, dc = DIRECTION[d]

            if not maze[r+dr][c+dc][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)
        #canvas.itemconfig(canvas, fill = 'red')
        #canvas.config(text = 'Please input the maze size')
        #canvas = Button(None, text = 'exit', command = sys.exit)
        line = canvas.create_line
        box = canvas.create_rectangle

        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][c][BOTTOM_WALL]:
                    line(c*size+d, r*size+size+d, c*size+size+d, r*size+size+d)

                if self.maze[r][c][RIGHT_WALL]:
                    line(c*size+size+d, r*size+d, c*size+size+d, r*size+size+d)
                if self.maze[r][c][VISITE]:
                    box(c*size+size+d, r*size+d, c*size+size+d, r*size+size+d,fill = 'red')

    def walk(self, r, c, direct = None):
        maze = self.maze
        maze[r][c][VISITE] = 1
        directs = []
        if maze[r][c][BOTTOM_WALL] == 1:
            directs.append(1)
        if maze[r-1][c][BOTTOM_WALL] == 1:
            directs.append(3)
        if maze[r][c][RIGHT_WALL] == 1:
            directs.append(0)
        if maze[r][c-1][RIGHT_WALL] == 1:
            directs.append(2)
        shuffle(directs)
        for d in directs:
            dr, dc = DIRECTION[d]
            if not maze[r+dr][c+dc][VISITE]:
                self.makepath(r+dr, c+dc, d)

root = Tk()

root.title("Maze")
canvas = Canvas(root)
canvas.pack(expand = YES, fill = BOTH)
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()
  • 写回答

1条回答

  • dabocaiqq 2016-12-31 09:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)