maze_python/md/NEW_FEATURES_README.md

11 KiB
Raw Permalink Blame History

迷宫游戏 - 新按钮功能说明

🎮 更新后的按钮功能

1. 🚀 Start Button (开始按钮)

  • 功能: 生成全新的随机迷宫
  • 操作: 点击"开始"按钮
  • 结果:
    • 生成新的迷宫布局
    • 自动计算最优路径
    • 可以开始路径演示

2. 💾 Save Button (保存按钮) - 新功能

  • 功能: 自动保存当前迷宫为JSON格式
  • 操作: 点击"保存"按钮
  • 结果:
    • 将当前迷宫保存为 saves/maze_save_时间戳.json
    • JSON格式符合您要求的标准格式
    • 包含完整的路径信息

3. 📂 Load Button (加载按钮) - 新功能

  • 功能: 加载样例迷宫并生成路径
  • 操作: 点击"加载"按钮
  • 行为逻辑:
    1. 优先加载: saves/sample.json 文件(如果存在)
    2. 自动生成路径: 加载后自动计算最优路径
    3. 备选方案: 如果 sample.json 不存在,打开存档选择界面

🎯 JSON格式标准

生成的JSON文件严格按照您的要求格式

{
  "maze": [
    ["#", "#", "#", "#", "#", "#", "#", "#", "#", "#"],
    ["#", "S", "#", " ", "#", " ", "#", " ", "#", "#"],
    ["#", " ", "#", " ", "#", " ", "#", " ", "#", "#"],
    ["#", " ", " ", " ", " ", " ", " ", " ", "E", "#"],
    ["#", "T", "#", "G", "#", "L", "#", "B", "#", "#"],
    ["#", "#", "#", "#", "#", "#", "#", "#", "#", "#"]
  ],
  "metadata": {
    "save_name": "maze_save_20250630_120000",
    "save_time": "2025-06-30T12:00:00",
    "maze_size": 10,
    "path_length": 25
  },
  "path_data": {
    "full_path": [[1,1], [2,1], [3,1], ...],
    "current_step": 0,
    "is_path_complete": false
  }
}

🎮 元素映射

内部代码 JSON显示 说明
'1' '#' 墙壁
'0' ' ' 通路
's' 'S' 起点
'e' 'E' 终点
'g数字' 'G' 金币
't数字' 'T' 陷阱
'l数字' 'L' 机关
'b数字' 'B' BOSS

⌨️ 快捷键和操作

游戏主界面

  • Ctrl+S: 保存为JSON格式
  • Shift+S: 保存为CSV格式兼容旧版本
  • Ctrl+L: 打开存档选择界面
  • 空格键: 路径下一步
  • R键: 重置路径
  • A键: 自动播放路径

存档选择界面

  • ↑↓方向键: 选择存档
  • 回车键: 加载选中的存档并生成路径
  • 鼠标双击: 直接加载存档并生成路径
  • Delete键: 删除选中的存档
  • N键: 新建存档
  • ESC键: 关闭存档界面

📁 文件结构

saves/
├── sample.json          # 样例迷宫文件Load按钮优先加载
├── maze_save_时间戳.json # Save按钮生成的存档
└── *.csv               # 旧格式存档文件

🔄 使用流程

  1. 生成新迷宫: 点击 Start → 自动生成迷宫和路径
  2. 保存当前迷宫: 点击 Save → 保存为JSON格式
  3. 加载样例迷宫: 点击 Load → 加载sample.json并生成路径
  4. 演示路径: 使用路径控制按钮或快捷键观看路径演示

测试验证

所有新功能已通过测试:

  • JSON格式保存功能正常
  • sample.json加载功能正常
  • 自动路径生成功能正常
  • 格式转换功能正常
  • 向后兼容CSV格式
  • 存档界面加载后自动生成路径 ← 已修复
  • 双击加载功能 ← 新增功能
  • 动态UI布局适应 ← 新修复功能

UI自适应测试结果

  • 10x10迷宫: 墙壁60px, 显示600px, 按钮位置正确
  • 15x15迷宫: 墙壁53px, 显示795px, 按钮位置正确
  • 20x20迷宫: 墙壁40px, 显示800px, 按钮位置正确
  • 25x25迷宫: 墙壁32px, 显示800px, 按钮位置正确
  • 加载不同存档: UI自动调整布局

🔧 问题修复

修复了存档界面加载问题

之前通过 Ctrl+L 选择存档读取时,地图能够加载但没有生成路径。现在已修复:

  1. 键盘回车加载: 选中存档后按回车键,自动加载并生成路径
  2. 鼠标双击加载: 双击存档项,直接加载并生成路径
  3. 自动路径生成: 无论通过哪种方式加载,都会自动重新计算最优路径

修复了UI布局自适应问题 ← 新修复

之前加载不同大小的地图时UI布局会出现问题。现在已修复

  1. 动态尺寸计算: 根据地图大小自动计算合适的显示尺寸
  2. 智能墙壁缩放: 自动调整墙壁大小,确保地图不会太大或太小
  3. 按钮位置自适应: 所有按钮和控制面板会根据地图大小自动调整位置
  4. 实时布局更新: 当加载不同大小的地图时UI会立即重新布局

技术特性

  • 最小墙壁尺寸: 20像素确保可视性
  • 最大墙壁尺寸: 60像素防止过大
  • 最大显示尺寸: 800像素或窗口宽度减去400像素为控制面板留空间
  • 智能缩放算法: 根据地图大小自动选择最佳显示参数

现在您的迷宫游戏完全支持您要求的JSON存档格式

🔄 历史迭代展示功能 - 全新功能

功能概述

在随机生成迷宫时,系统会记录每一步生成过程,用户可以回放查看迷宫的构建历史。

操作说明

历史模式切换

  • 按钮: 历史模式 / 路径模式 切换按钮
  • 快捷键: H
  • 功能: 在历史展示模式和路径展示模式之间切换

历史控制按钮 (仅在历史模式下显示)

  • 上一步: 查看上一个生成步骤
  • 下一步: 查看下一个生成步骤
  • 自动播放: 自动播放生成历史动画
  • 快捷键:
    • 左箭头: 历史上一步
    • 右箭头: 历史下一步
    • P 键: 历史自动播放切换

重要特性

  1. 生成时记录: 只有随机生成的迷宫才有历史记录
  2. 读档时无历史: 从文件加载的迷宫不展示历史过程
  3. 状态隔离: 每次生成新迷宫时会清除之前的历史数据
  4. 双模式: 支持历史演示和路径演示两种独立模式

使用场景

  • 🎓 教学演示: 展示迷宫生成算法的工作过程
  • 🔍 调试分析: 了解递归分割算法的每个步骤
  • 🎮 娱乐观赏: 观看迷宫"生长"的动画效果

🔧 修复内容

多次生成迷宫的状态重置修复

  • 问题: 连续点击Start按钮时之前的历史数据没有正确清除
  • 修复:
    • MazeGenerator.generate() 中添加历史数据清除
    • Maze.generate() 中使用 reset_all_states() 方法
    • 确保每次生成新迷宫时所有相关状态都被正确重置
  • 验证: 通过专门的测试脚本确保多次生成不会有数据累加问题

状态管理优化

  • 新增方法: Maze.reset_all_states() - 统一重置所有状态
  • 改进逻辑: 确保历史模式、路径模式、自动播放等状态的正确切换
  • 内存管理: 避免历史数据在多次生成时累积导致内存问题

🛡️ 迷宫边界自动修复功能 - 新增安全特性

功能概述

自动检测和修复迷宫文件中边界不完整的问题,确保算法正常运行。

问题背景

某些迷宫JSON文件可能存在边界不是墙壁的情况如边界包含起点S、终点E或空格这会导致路径算法报错。

自动修复机制

检测规则

系统在加载迷宫时自动检查:

  • 上边界: 第一行是否全是墙壁('#' 或 '1')
  • 下边界: 最后一行是否全是墙壁
  • 左边界: 每行第一列是否全是墙壁
  • 右边界: 每行最后一列是否全是墙壁

修复动作

当检测到边界问题时:

  1. 自动添加边界: 在原迷宫四周添加一圈墙壁('#')
  2. 尺寸调整: 迷宫尺寸从NxN变为(N+2)x(N+2)
  3. 坐标调整: 如果有路径数据,自动调整坐标(+1,+1)
  4. 日志输出: 显示修复过程和结果

示例

原始迷宫 (15x15):
["#","#","#","S","#",...] <- 边界有起点S
...
["#","#","#","E","#",...] <- 边界有终点E

修复后迷宫 (17x17):
["#","#","#","#","#",...] <- 全部墙壁
["#","#","#","S","#",...] <- 原内容向内偏移
...
["#","#","#","E","#",...] 
["#","#","#","#","#",...] <- 全部墙壁

支持范围

  • JSON格式: 完全支持,包括路径坐标调整
  • CSV格式: 完全支持,路径自动适配
  • 路径数据: 自动调整坐标以适应新边界
  • 兼容性: 对正常迷宫无影响

使用场景

  • 📂 导入外部迷宫: 安全加载来源不明的迷宫文件
  • 🔧 修复损坏文件: 自动处理格式不标准的迷宫
  • 🛡️ 算法保护: 防止边界问题导致的程序崩溃
  • 🔄 自动化处理: 无需手动修改文件,系统自动处理

🐛 路径生成边界检查修复 - 重要错误修复

问题描述

当加载边界不完整的迷宫文件(如maze_15_15_2.json系统会自动添加边界墙壁迷宫尺寸从15x15变为17x17。但是SourceCollector在进行路径搜索时会出现数组越界错误:

IndexError: list index out of range

根本原因

  1. 边界检查逻辑错误: SourceCollector.outofmap()方法使用了错误的边界条件(> 而不是 >=
  2. 网格覆盖问题: 在重新生成路径后,代码错误地将显示网格重置为原始网格,覆盖了包含路径信息的网格
  3. 重复路径生成: 即使已经有路径信息,系统仍然会强制重新生成路径

修复内容

1. SourceCollector边界检查修复

# 修复前(错误)
def outofmap(self,x,y):
    return x < 0 or y < 0 or x > self.rowNums or y > self.colNums

# 修复后(正确)  
def outofmap(self,x,y):
    return x < 0 or y < 0 or x >= self.rowNums or y >= self.colNums

2. 智能路径生成逻辑

  • 条件检查: 只在len(maze.full_path) == 0时才重新生成路径
  • 网格保护: 不再重置显示网格,保持加载的包含路径信息的网格
  • 一致性优化: 在main.pysave_ui.py中统一处理逻辑

3. 多处修复点

  • main.py: Load按钮逻辑优化
  • save_ui.py: 存档界面回车键和双击加载逻辑修复
  • SourceCollector.py: 边界检查条件修正

测试验证

通过全面测试确认修复效果:

  • 边界检查: 所有边界条件测试通过
  • 小迷宫测试: 5x5测试迷宫路径生成正常
  • 直接测试: SourceCollector直接加载修复后迷宫正常
  • 完整流程: maze.load_game()完整流程测试通过
  • 路径长度: 修复后能正确生成15步路径

实际效果

对于maze_15_15_2.json文件:

  • 修复前: 加载时报IndexError,程序崩溃
  • 修复后: 自动边界修复(15x15→17x17)成功生成15步路径程序稳定运行

兼容性保证

  • 正常文件: 对边界完整的迷宫文件无影响
  • 路径保持: 已有路径信息的文件保持路径不变
  • 格式支持: JSON和CSV格式都支持边界修复和路径生成