Python生成迷宫保存为图片时输出全黑图像的问题求助
迷宫图片生成问题的修复与优化建议
问题根源分析
你提供的PIL代码存在3个核心错误,直接导致生成全黑图像:
- 起点/终点判断逻辑错误:
"S" in maze[i][j]和"E" in maze[i][j]永远不成立——maze[i][j]是包含"wall"和"visited"键的字典,不存在直接的"S"或"E"键。 - 默认单元格颜色错误:默认设置为黑色
(0,0,0),直接覆盖白色背景,导致所有通路被涂黑。 - 墙的绘制坐标错误:南墙(S)和东墙(E)的像素位置计算偏差,没有对应到正确的墙位置。
修复后的完整代码
将PIL生成部分替换为以下代码,即可正确生成迷宫图像:
# Create an image with a white background cell_size = 2 # 可调整单元格大小,让迷宫更清晰 img_width = width * cell_size + 1 img_height = height * cell_size + 1 img = Image.new("RGB", (img_width, img_height), (255, 255, 255)) pixels = img.load() # 绘制边框(增强视觉效果) for x in range(img_width): pixels[x, 0] = (0, 0, 0) # 顶部边框 pixels[x, img_height-1] = (0, 0, 0) # 底部边框 for y in range(img_height): pixels[0, y] = (0, 0, 0) # 左侧边框 pixels[img_width-1, y] = (0, 0, 0) # 右侧边框 # 绘制迷宫通路、起点、终点和墙 for i in range(height): for j in range(width): # 计算单元格左上角坐标 cell_x = j * cell_size + 1 cell_y = i * cell_size + 1 # 设置单元格颜色:起点绿色,终点红色,通路白色 if (i, j) == start: cell_color = (0, 255, 0) elif (i, j) == end: cell_color = (255, 0, 0) else: cell_color = (255, 255, 255) # 填充单元格区域 for dx in range(cell_size): for dy in range(cell_size): pixels[cell_x + dx, cell_y + dy] = cell_color # 绘制墙:黑色 wall_color = (0, 0, 0) # 南墙(单元格下方) if "S" in maze[i][j]["wall"]: wall_y = cell_y + cell_size for dx in range(cell_size): pixels[cell_x + dx, wall_y] = wall_color # 东墙(单元格右侧) if "E" in maze[i][j]["wall"]: wall_x = cell_x + cell_size for dy in range(cell_size): pixels[wall_x, cell_y + dy] = wall_color # Save the image to a file img.save("maze.png")
优化建议
- 调整单元格大小:修改
cell_size变量(比如设为4或8),生成更大更清晰的迷宫图像,适合观察细节。 - 优化绘制效率:对于大尺寸迷宫,建议使用
ImageDraw模块替代直接操作像素,代码更简洁且性能更好:from PIL import ImageDraw draw = ImageDraw.Draw(img) # 示例:绘制南墙 if "S" in maze[i][j]["wall"]: draw.line([(cell_x, wall_y), (cell_x + cell_size, wall_y)], fill=wall_color, width=1) - 添加路径标记:如果需要展示迷宫解,可以在生成图像后添加路径绘制逻辑,用蓝色等颜色标记从起点到终点的路径。
- 拆分模块化代码:将迷宫生成和图像生成分拆为独立函数,提高代码可读性和复用性。
内容的提问来源于stack exchange,提问作者P_n
相关产品推荐
相关产品推荐

