陈沧夜 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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大