Compare commits
No commits in common. "fba062598e678e235c3447798a5256d3066f99b8" and "e3e7e0b373e43f0efd8e578c2863cf4196a43ddc" have entirely different histories.
fba062598e
...
e3e7e0b373
@ -65,5 +65,5 @@ def get_button_positions(maze_display_size=MAZE_SIZE):
|
|||||||
'history_progress_text': (control_panel_x, 350),
|
'history_progress_text': (control_panel_x, 350),
|
||||||
'hint_text': (control_panel_x, 380),
|
'hint_text': (control_panel_x, 380),
|
||||||
'shortcut_text': (control_panel_x, 410),
|
'shortcut_text': (control_panel_x, 410),
|
||||||
'save_list_area': (control_panel_x, 440, 400, 330) # x, y, width, height - 增加高度到330
|
'save_list_area': (control_panel_x, 440, 400, 200) # x, y, width, height
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ class SaveLoadUI:
|
|||||||
self.save_list = []
|
self.save_list = []
|
||||||
self.selected_save = -1
|
self.selected_save = -1
|
||||||
self.scroll_offset = 0
|
self.scroll_offset = 0
|
||||||
self.max_visible_saves = 10 # 增加到10条
|
self.max_visible_saves = 8
|
||||||
|
|
||||||
# 双击检测
|
# 双击检测
|
||||||
self.last_click_time = 0
|
self.last_click_time = 0
|
||||||
|
@ -1,109 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""测试存档界面显示10条存档的能力"""
|
|
||||||
|
|
||||||
import pygame
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# 添加项目根目录到路径
|
|
||||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
from config import *
|
|
||||||
from save_ui import SaveLoadUI
|
|
||||||
from maze import Maze
|
|
||||||
|
|
||||||
def test_10_saves_display():
|
|
||||||
"""测试显示10条存档"""
|
|
||||||
print("=== 测试存档界面10条存档显示能力 ===")
|
|
||||||
|
|
||||||
# 初始化pygame
|
|
||||||
pygame.init()
|
|
||||||
screen = pygame.display.set_mode((UI_WIDTH, UI_HEIGHT))
|
|
||||||
pygame.display.set_caption("测试10条存档显示")
|
|
||||||
font = pygame.font.Font(FONT_FILE, FONT_SIZE)
|
|
||||||
|
|
||||||
# 创建对象
|
|
||||||
maze = Maze(wall_size=20, maze_size=200, file_name="test")
|
|
||||||
save_ui = SaveLoadUI(font)
|
|
||||||
|
|
||||||
# 检查max_visible_saves设置
|
|
||||||
print(f"max_visible_saves设置: {save_ui.max_visible_saves}")
|
|
||||||
|
|
||||||
# 模拟10条存档数据
|
|
||||||
mock_saves = []
|
|
||||||
for i in range(10):
|
|
||||||
mock_saves.append({
|
|
||||||
'name': f'test_save_{i+1:02d}.json',
|
|
||||||
'path': f'saves/test_save_{i+1:02d}.json',
|
|
||||||
'save_time': f'2024-01-{i+1:02d} 10:00:00',
|
|
||||||
'size': '5x5'
|
|
||||||
})
|
|
||||||
|
|
||||||
# 直接设置存档列表
|
|
||||||
save_ui.save_list = mock_saves
|
|
||||||
save_ui.show_save_list = True
|
|
||||||
|
|
||||||
print(f"模拟存档数量: {len(mock_saves)}")
|
|
||||||
|
|
||||||
# 计算显示参数
|
|
||||||
button_positions = get_button_positions()
|
|
||||||
list_area = button_positions['save_list_area']
|
|
||||||
|
|
||||||
print(f"存档列表区域: x={list_area[0]}, y={list_area[1]}, w={list_area[2]}, h={list_area[3]}")
|
|
||||||
|
|
||||||
# 计算可显示的存档数量
|
|
||||||
# 标题区域: 30像素
|
|
||||||
# 操作提示区域: 25像素
|
|
||||||
# 剩余区域高度: 330 - 30 - 25 = 275像素
|
|
||||||
# 每个存档项: 25像素
|
|
||||||
available_height = list_area[3] - 55 # 55 = 30(标题) + 25(提示)
|
|
||||||
max_displayable = available_height // 25
|
|
||||||
|
|
||||||
print(f"可用显示高度: {available_height}像素")
|
|
||||||
print(f"理论最大显示数量: {max_displayable}条")
|
|
||||||
print(f"实际设置显示数量: {save_ui.max_visible_saves}条")
|
|
||||||
|
|
||||||
# 测试显示
|
|
||||||
clock = pygame.time.Clock()
|
|
||||||
running = True
|
|
||||||
|
|
||||||
while running:
|
|
||||||
for event in pygame.event.get():
|
|
||||||
if event.type == pygame.QUIT:
|
|
||||||
running = False
|
|
||||||
elif event.type == pygame.KEYDOWN:
|
|
||||||
if event.key == pygame.K_ESCAPE:
|
|
||||||
running = False
|
|
||||||
elif event.key == pygame.K_UP:
|
|
||||||
if save_ui.selected_save > 0:
|
|
||||||
save_ui.selected_save -= 1
|
|
||||||
print(f"选中存档: {save_ui.selected_save + 1}")
|
|
||||||
elif event.key == pygame.K_DOWN:
|
|
||||||
if save_ui.selected_save < len(save_ui.save_list) - 1:
|
|
||||||
save_ui.selected_save += 1
|
|
||||||
print(f"选中存档: {save_ui.selected_save + 1}")
|
|
||||||
|
|
||||||
# 绘制
|
|
||||||
screen.fill(COLOR_WHITE)
|
|
||||||
save_ui.draw(screen)
|
|
||||||
|
|
||||||
# 绘制测试信息
|
|
||||||
info_text = [
|
|
||||||
f"存档数量: {len(save_ui.save_list)}",
|
|
||||||
f"显示设置: {save_ui.max_visible_saves}条",
|
|
||||||
f"当前选中: {save_ui.selected_save + 1}",
|
|
||||||
"按↑↓键选择存档,ESC退出"
|
|
||||||
]
|
|
||||||
|
|
||||||
for i, text in enumerate(info_text):
|
|
||||||
text_surface = font.render(text, True, COLOR_BLACK)
|
|
||||||
screen.blit(text_surface, (10, 10 + i * 30))
|
|
||||||
|
|
||||||
pygame.display.flip()
|
|
||||||
clock.tick(60)
|
|
||||||
|
|
||||||
pygame.quit()
|
|
||||||
print("测试完成")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_10_saves_display()
|
|
@ -1,152 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
测试存档界面显示数量修改
|
|
||||||
验证能否显示10条存档记录
|
|
||||||
"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
from simple_save_manager import simple_save_manager
|
|
||||||
import json
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
def create_test_saves():
|
|
||||||
"""创建测试存档文件"""
|
|
||||||
print("=== 创建测试存档文件 ===")
|
|
||||||
|
|
||||||
# 确保saves目录存在
|
|
||||||
if not os.path.exists("saves"):
|
|
||||||
os.makedirs("saves")
|
|
||||||
|
|
||||||
# 创建简单的测试迷宫数据
|
|
||||||
test_maze_data = {
|
|
||||||
"maze": [
|
|
||||||
["#", "#", "#", "#", "#"],
|
|
||||||
["#", "S", " ", " ", "#"],
|
|
||||||
["#", " ", "#", " ", "#"],
|
|
||||||
["#", " ", " ", "E", "#"],
|
|
||||||
["#", "#", "#", "#", "#"]
|
|
||||||
],
|
|
||||||
"metadata": {
|
|
||||||
"name": "测试迷宫",
|
|
||||||
"test": True
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# 创建12个测试存档(超过10个来测试显示限制)
|
|
||||||
for i in range(1, 13):
|
|
||||||
filename = f"saves/test_save_{i:02d}.json"
|
|
||||||
|
|
||||||
# 修改迷宫名称
|
|
||||||
test_data = test_maze_data.copy()
|
|
||||||
test_data["metadata"] = test_maze_data["metadata"].copy()
|
|
||||||
test_data["metadata"]["name"] = f"测试迷宫_{i:02d}"
|
|
||||||
test_data["metadata"]["save_time"] = datetime.now().isoformat()
|
|
||||||
|
|
||||||
with open(filename, 'w', encoding='utf-8') as f:
|
|
||||||
json.dump(test_data, f, indent=2, ensure_ascii=False)
|
|
||||||
|
|
||||||
print(f"创建: {filename}")
|
|
||||||
|
|
||||||
print(f"✅ 创建了12个测试存档文件")
|
|
||||||
|
|
||||||
def check_save_list():
|
|
||||||
"""检查存档列表"""
|
|
||||||
print("\n=== 检查存档列表 ===")
|
|
||||||
|
|
||||||
save_list = simple_save_manager.get_save_list()
|
|
||||||
print(f"找到存档数量: {len(save_list)}")
|
|
||||||
|
|
||||||
for i, save_info in enumerate(save_list):
|
|
||||||
print(f"{i+1:2d}. {save_info['name']} ({save_info['format']})")
|
|
||||||
|
|
||||||
return len(save_list)
|
|
||||||
|
|
||||||
def calculate_display_capacity():
|
|
||||||
"""计算显示容量"""
|
|
||||||
print("\n=== 计算显示容量 ===")
|
|
||||||
|
|
||||||
from config import get_button_positions
|
|
||||||
|
|
||||||
positions = get_button_positions()
|
|
||||||
save_area = positions['save_list_area']
|
|
||||||
|
|
||||||
print(f"存档区域尺寸: {save_area[2]}x{save_area[3]} (宽x高)")
|
|
||||||
|
|
||||||
# 计算可用高度
|
|
||||||
title_height = 25
|
|
||||||
hint_height = 25
|
|
||||||
start_offset = 55 # 实际开始位置偏移
|
|
||||||
|
|
||||||
available_height = save_area[3] - start_offset
|
|
||||||
item_height = 25
|
|
||||||
|
|
||||||
max_items = available_height // item_height
|
|
||||||
|
|
||||||
print(f"标题和提示占用: {start_offset}像素")
|
|
||||||
print(f"可用高度: {available_height}像素")
|
|
||||||
print(f"每项高度: {item_height}像素")
|
|
||||||
print(f"理论最大显示: {max_items}条")
|
|
||||||
|
|
||||||
return max_items
|
|
||||||
|
|
||||||
def test_ui_layout():
|
|
||||||
"""测试UI布局说明"""
|
|
||||||
print("\n=== UI测试说明 ===")
|
|
||||||
print()
|
|
||||||
print("现在可以测试存档界面显示效果:")
|
|
||||||
print("1. 运行主程序: python main.py")
|
|
||||||
print("2. 按 Ctrl+L 打开存档界面")
|
|
||||||
print("3. 验证能否看到10条存档(如果存档数量足够)")
|
|
||||||
print("4. 使用↑↓键测试所有存档是否可选择")
|
|
||||||
print()
|
|
||||||
print("预期结果:")
|
|
||||||
print("- 存档界面高度增加到300像素")
|
|
||||||
print("- 最多可显示约9-10条存档")
|
|
||||||
print("- 界面不会截断或重叠")
|
|
||||||
print("- 所有存档都可以正常选择和加载")
|
|
||||||
print()
|
|
||||||
|
|
||||||
def cleanup_test_files():
|
|
||||||
"""清理测试文件"""
|
|
||||||
response = input("是否删除测试存档文件? (y/n): ")
|
|
||||||
if response.lower() == 'y':
|
|
||||||
print("\n=== 清理测试文件 ===")
|
|
||||||
for i in range(1, 13):
|
|
||||||
filename = f"saves/test_save_{i:02d}.json"
|
|
||||||
if os.path.exists(filename):
|
|
||||||
os.remove(filename)
|
|
||||||
print(f"删除: {filename}")
|
|
||||||
print("✅ 测试文件清理完成")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
print("开始测试存档界面显示数量...")
|
|
||||||
|
|
||||||
# 计算理论容量
|
|
||||||
max_capacity = calculate_display_capacity()
|
|
||||||
|
|
||||||
# 创建测试文件
|
|
||||||
create_test_saves()
|
|
||||||
|
|
||||||
# 检查存档列表
|
|
||||||
save_count = check_save_list()
|
|
||||||
|
|
||||||
print(f"\n=== 结果分析 ===")
|
|
||||||
print(f"理论最大显示容量: {max_capacity}条")
|
|
||||||
print(f"实际存档数量: {save_count}条")
|
|
||||||
|
|
||||||
if max_capacity >= 10:
|
|
||||||
print("✅ 界面尺寸足够显示10条存档")
|
|
||||||
else:
|
|
||||||
print(f"❌ 界面尺寸只能显示{max_capacity}条存档")
|
|
||||||
|
|
||||||
# UI测试说明
|
|
||||||
test_ui_layout()
|
|
||||||
|
|
||||||
# 可选清理
|
|
||||||
cleanup_test_files()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@ -1,196 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""测试存档界面完整功能:显示10条存档,交互功能等"""
|
|
||||||
|
|
||||||
import pygame
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import json
|
|
||||||
|
|
||||||
# 添加项目根目录到路径
|
|
||||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
from config import *
|
|
||||||
from save_ui import SaveLoadUI
|
|
||||||
from maze import Maze
|
|
||||||
|
|
||||||
def create_test_saves():
|
|
||||||
"""创建10个测试存档文件"""
|
|
||||||
print("创建测试存档文件...")
|
|
||||||
|
|
||||||
# 确保saves目录存在
|
|
||||||
os.makedirs("saves", exist_ok=True)
|
|
||||||
|
|
||||||
# 创建10个不同的测试存档
|
|
||||||
test_mazes = [
|
|
||||||
{"rows": 5, "cols": 5, "name": "小迷宫5x5"},
|
|
||||||
{"rows": 7, "cols": 7, "name": "中迷宫7x7"},
|
|
||||||
{"rows": 10, "cols": 10, "name": "大迷宫10x10"},
|
|
||||||
{"rows": 6, "cols": 8, "name": "矩形迷宫6x8"},
|
|
||||||
{"rows": 8, "cols": 6, "name": "矩形迷宫8x6"},
|
|
||||||
{"rows": 12, "cols": 12, "name": "超大迷宫12x12"},
|
|
||||||
{"rows": 5, "cols": 10, "name": "长条迷宫5x10"},
|
|
||||||
{"rows": 9, "cols": 9, "name": "正方迷宫9x9"},
|
|
||||||
{"rows": 15, "cols": 15, "name": "巨型迷宫15x15"},
|
|
||||||
{"rows": 7, "cols": 5, "name": "高窄迷宫7x5"}
|
|
||||||
]
|
|
||||||
|
|
||||||
created_files = []
|
|
||||||
|
|
||||||
for i, maze_info in enumerate(test_mazes):
|
|
||||||
filename = f"test_save_{i+1:02d}.json"
|
|
||||||
filepath = f"saves/{filename}"
|
|
||||||
|
|
||||||
# 创建简单的迷宫数据
|
|
||||||
rows, cols = maze_info["rows"], maze_info["cols"]
|
|
||||||
maze_data = []
|
|
||||||
|
|
||||||
for r in range(rows):
|
|
||||||
row = []
|
|
||||||
for c in range(cols):
|
|
||||||
if r == 0 or r == rows-1 or c == 0 or c == cols-1:
|
|
||||||
row.append(1) # 边界是墙
|
|
||||||
elif r == 1 and c == 1:
|
|
||||||
row.append(2) # 起点
|
|
||||||
elif r == rows-2 and c == cols-2:
|
|
||||||
row.append(3) # 终点
|
|
||||||
elif (r + c) % 3 == 0:
|
|
||||||
row.append(1) # 一些墙
|
|
||||||
else:
|
|
||||||
row.append(0) # 通路
|
|
||||||
maze_data.append(row)
|
|
||||||
|
|
||||||
# 创建路径数据
|
|
||||||
path_data = [
|
|
||||||
{"x": 1, "y": 1, "step": 0},
|
|
||||||
{"x": 2, "y": 1, "step": 1},
|
|
||||||
{"x": cols-2, "y": rows-2, "step": 2}
|
|
||||||
]
|
|
||||||
|
|
||||||
# 保存数据
|
|
||||||
save_data = {
|
|
||||||
"maze_info": {
|
|
||||||
"name": maze_info["name"],
|
|
||||||
"size": f"{rows}x{cols}",
|
|
||||||
"save_time": f"2024-01-{i+1:02d} {10+i}:00:00"
|
|
||||||
},
|
|
||||||
"maze_data": maze_data,
|
|
||||||
"path_data": path_data,
|
|
||||||
"game_state": {
|
|
||||||
"path_step": 0,
|
|
||||||
"is_path_complete": False
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
with open(filepath, 'w', encoding='utf-8') as f:
|
|
||||||
json.dump(save_data, f, indent=2, ensure_ascii=False)
|
|
||||||
|
|
||||||
created_files.append(filepath)
|
|
||||||
print(f"创建存档: {filename} ({maze_info['name']})")
|
|
||||||
|
|
||||||
print(f"总共创建了 {len(created_files)} 个测试存档文件")
|
|
||||||
return created_files
|
|
||||||
|
|
||||||
def test_save_ui_complete():
|
|
||||||
"""测试存档界面完整功能"""
|
|
||||||
print("=== 测试存档界面完整功能 ===")
|
|
||||||
|
|
||||||
# 创建测试存档
|
|
||||||
test_files = create_test_saves()
|
|
||||||
|
|
||||||
# 初始化pygame
|
|
||||||
pygame.init()
|
|
||||||
screen = pygame.display.set_mode((UI_WIDTH, UI_HEIGHT))
|
|
||||||
pygame.display.set_caption("存档界面完整测试")
|
|
||||||
font = pygame.font.Font(FONT_FILE, FONT_SIZE)
|
|
||||||
|
|
||||||
# 创建对象
|
|
||||||
maze = Maze(wall_size=20, maze_size=200, file_name="test")
|
|
||||||
save_ui = SaveLoadUI(font)
|
|
||||||
|
|
||||||
# 更新存档列表
|
|
||||||
save_ui.update_save_list(maze)
|
|
||||||
save_ui.show_save_list = True
|
|
||||||
|
|
||||||
print(f"检测到存档数量: {len(save_ui.save_list)}")
|
|
||||||
print(f"max_visible_saves设置: {save_ui.max_visible_saves}")
|
|
||||||
|
|
||||||
# 显示前10个存档的信息
|
|
||||||
for i, save_info in enumerate(save_ui.save_list[:10]):
|
|
||||||
print(f"{i+1:2d}. {save_info['name']} - {save_info['save_time']}")
|
|
||||||
|
|
||||||
clock = pygame.time.Clock()
|
|
||||||
running = True
|
|
||||||
|
|
||||||
print("\n交互测试:")
|
|
||||||
print("- ↑↓键: 选择存档")
|
|
||||||
print("- 回车键: 加载选中存档")
|
|
||||||
print("- Delete键: 删除选中存档")
|
|
||||||
print("- N键: 新建存档")
|
|
||||||
print("- ESC键: 退出")
|
|
||||||
print("- 鼠标: 点击选择,双击加载")
|
|
||||||
|
|
||||||
while running:
|
|
||||||
for event in pygame.event.get():
|
|
||||||
if event.type == pygame.QUIT:
|
|
||||||
running = False
|
|
||||||
elif event.type == pygame.KEYDOWN:
|
|
||||||
if event.key == pygame.K_ESCAPE:
|
|
||||||
running = False
|
|
||||||
else:
|
|
||||||
# 处理存档界面事件
|
|
||||||
result = save_ui.handle_event(event, maze)
|
|
||||||
if result:
|
|
||||||
print(f"操作结果: {result}")
|
|
||||||
if result == "load_success":
|
|
||||||
print(f"成功加载存档,迷宫尺寸: {len(maze.grid)}x{len(maze.grid[0])}")
|
|
||||||
elif result == "delete_success":
|
|
||||||
print("存档删除成功")
|
|
||||||
save_ui.update_save_list(maze)
|
|
||||||
elif result == "save_success":
|
|
||||||
print("存档保存成功")
|
|
||||||
|
|
||||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
|
||||||
result = save_ui.handle_event(event, maze)
|
|
||||||
if result:
|
|
||||||
print(f"鼠标操作结果: {result}")
|
|
||||||
|
|
||||||
# 绘制
|
|
||||||
screen.fill(COLOR_WHITE)
|
|
||||||
|
|
||||||
# 绘制迷宫(如果已加载)
|
|
||||||
if hasattr(maze, 'grid') and maze.grid:
|
|
||||||
maze.draw(screen)
|
|
||||||
|
|
||||||
# 绘制存档界面
|
|
||||||
save_ui.draw(screen)
|
|
||||||
|
|
||||||
# 绘制状态信息
|
|
||||||
status_texts = [
|
|
||||||
f"存档总数: {len(save_ui.save_list)}",
|
|
||||||
f"显示设置: 最多{save_ui.max_visible_saves}条",
|
|
||||||
f"当前选中: {save_ui.selected_save + 1 if save_ui.selected_save >= 0 else '无'}",
|
|
||||||
f"输入模式: {'是' if save_ui.input_active else '否'}"
|
|
||||||
]
|
|
||||||
|
|
||||||
for i, text in enumerate(status_texts):
|
|
||||||
text_surface = font.render(text, True, COLOR_BLACK)
|
|
||||||
screen.blit(text_surface, (10, 10 + i * 25))
|
|
||||||
|
|
||||||
pygame.display.flip()
|
|
||||||
clock.tick(60)
|
|
||||||
|
|
||||||
pygame.quit()
|
|
||||||
|
|
||||||
# 清理测试文件
|
|
||||||
print("\n清理测试文件...")
|
|
||||||
for filepath in test_files:
|
|
||||||
try:
|
|
||||||
os.remove(filepath)
|
|
||||||
print(f"删除: {filepath}")
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
print("测试完成")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_save_ui_complete()
|
|
Loading…
Reference in New Issue
Block a user