You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成迷宫保存为图片时输出全黑图像的问题求助

迷宫图片生成问题的修复与优化建议

问题根源分析

你提供的PIL代码存在3个核心错误,直接导致生成全黑图像:

  1. 起点/终点判断逻辑错误:"S" in maze[i][j]和"E" in maze[i][j]永远不成立——maze[i][j]是包含"wall"和"visited"键的字典,不存在直接的"S"或"E"键。
  2. 默认单元格颜色错误:默认设置为黑色(0,0,0),直接覆盖白色背景,导致所有通路被涂黑。
  3. 墙的绘制坐标错误:南墙(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:32:10