#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试JSON存档格式功能 """ import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from maze_generator import MazeGenerator from maze import Maze from simple_save_manager import simple_save_manager import json def test_json_save_load(): """测试JSON格式的保存和加载功能""" print("=== 测试JSON存档格式功能 ===\n") # 1. 生成一个测试迷宫 print("1. 生成测试迷宫...") maze = Maze(wall_size=20, maze_size=400, file_name="test_maze.csv") maze.generate() print(f"迷宫大小: {maze.size}x{maze.size}") print(f"路径长度: {len(maze.full_path)}") # 2. 保存为JSON格式 print("\n2. 保存为JSON格式...") json_save_file = maze.save_game("test_maze_json", "json") if json_save_file: print(f"JSON保存成功: {json_save_file}") # 查看JSON文件内容 with open(json_save_file, 'r', encoding='utf-8') as f: data = json.load(f) print("JSON文件结构:") print(f"- maze: {len(data['maze'])}x{len(data['maze'][0])} 网格") print(f"- metadata: {data.get('metadata', {})}") if 'path_data' in data: print(f"- path_data: 包含{len(data['path_data']['full_path'])}步路径") # 显示迷宫的前5行作为示例 print("\n迷宫前5行示例:") for i, row in enumerate(data['maze'][:5]): print(f"第{i+1}行: {row}") else: print("JSON保存失败") return False # 3. 保存为CSV格式(对比) print("\n3. 保存为CSV格式...") csv_save_file = maze.save_game("test_maze_csv", "csv") if csv_save_file: print(f"CSV保存成功: {csv_save_file}") else: print("CSV保存失败") # 4. 测试JSON加载 print("\n4. 测试JSON加载...") new_maze = Maze(wall_size=20, maze_size=400, file_name="test_load.csv") if new_maze.load_game(json_save_file): print("JSON加载成功") print(f"加载后迷宫大小: {new_maze.size}x{new_maze.size}") print(f"加载后路径长度: {len(new_maze.full_path)}") # 验证加载的数据 original_path = maze.full_path loaded_path = new_maze.full_path if original_path == loaded_path: print("✓ 路径数据完全一致") else: print("✗ 路径数据不一致") print(f"原始路径前5步: {original_path[:5]}") print(f"加载路径前5步: {loaded_path[:5]}") else: print("JSON加载失败") return False # 5. 测试存档列表 print("\n5. 测试存档列表...") save_list = simple_save_manager.get_save_list() print(f"找到{len(save_list)}个存档文件:") for save in save_list: print(f"- {save['name']} ({save['format']}格式) - {save['filename']}") # 6. 验证JSON格式转换 print("\n6. 验证JSON格式转换...") print("内部格式 -> JSON格式转换测试:") test_conversions = [ ('1', '#', '墙壁'), ('0', ' ', '通路'), ('s', 'S', '起点'), ('e', 'E', '终点'), ('g10', 'G', '金币'), ('t15', 'T', '陷阱'), ('l20', 'L', '机关'), ('b50', 'B', 'BOSS') ] for internal, expected_json, desc in test_conversions: # 创建单元素测试迷宫 test_maze = [[internal]] json_format = simple_save_manager.convert_to_json_format_helper(test_maze) actual_json = json_format[0][0] status = "✓" if actual_json == expected_json else "✗" print(f"{status} {desc}: '{internal}' -> '{actual_json}' (期望: '{expected_json}')") print("\n=== 测试完成 ===") return True def simple_save_manager_convert_to_json_format_helper(maze_grid): """辅助函数:转换迷宫格式用于测试""" json_maze = [] for row in maze_grid: json_row = [] for cell in row: cell_str = str(cell) if cell_str == '1': json_row.append('#') elif cell_str == '0': json_row.append(' ') elif cell_str == 's': json_row.append('S') elif cell_str == 'e': json_row.append('E') elif cell_str.startswith('g'): json_row.append('G') elif cell_str.startswith('t'): json_row.append('T') elif cell_str.startswith('l'): json_row.append('L') elif cell_str.startswith('b'): json_row.append('B') else: json_row.append(' ') json_maze.append(json_row) return json_maze # 为simple_save_manager添加辅助方法 simple_save_manager.convert_to_json_format_helper = simple_save_manager_convert_to_json_format_helper if __name__ == "__main__": test_json_save_load()