146 lines
4.9 KiB
Python
146 lines
4.9 KiB
Python
#!/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()
|