maze_python/tests/test_json_format.py

146 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()