HonorNet_v1 / tests /test_mapper.py
clarenceleo's picture
Upload tests/test_mapper.py
808af93 verified
# test_mapper.py
from inference.game_controller import GameController
from inference.action_mapper import ActionMapper
import time
import os
def test_all_actions():
"""测试所有动作映射"""
ctrl = GameController()
mapper = ActionMapper(ctrl)
print("=" * 50)
print("王者荣耀AI控制测试 - 全面测试")
print("=" * 50)
# 1. 测试移动(8个方向)
print("\n[1/4] 测试移动控制...")
moves = [
"move_up", "move_down", "move_left", "move_right",
"move_upleft", "move_upright", "move_downleft", "move_downright"
]
for move in moves:
print(f" 执行: {move}")
mapper.execute(move)
time.sleep(0.5) # 每个动作间隔0.5秒
# 2. 测试战斗技能
print("\n[2/4] 测试战斗技能...")
combat_actions = ["attack", "skill_damage", "skill_control"]
for action in combat_actions:
print(f" 执行: {action}")
mapper.execute(action)
time.sleep(0.8)
# 3. 测试战术动作
print("\n[3/4] 测试战术动作...")
tactical_actions = ["recall", "heal", "summoner", "enhance", "upgrade"]
for action in tactical_actions:
print(f" 执行: {action}")
mapper.execute(action)
time.sleep(0.8)
# 4. 测试截图功能
print("\n[4/4] 测试截图功能...")
try:
img = ctrl.screenshot()
timestamp = time.strftime("%Y%m%d_%H%M%S")
filename = f"screenshot_{timestamp}.png"
img.save(filename)
print(f" 截图已保存: {filename}")
# 获取屏幕尺寸
w, h = ctrl.get_screen_size()
print(f" 屏幕尺寸: {w}x{h}")
# 显示截图信息
print(f" 图片尺寸: {img.size}")
print(f" 图片模式: {img.mode}")
except Exception as e:
print(f" 截图失败: {e}")
print("\n" + "=" * 50)
print("测试完成!")
print("=" * 50)
def test_single_action():
"""交互式测试单个动作"""
ctrl = GameController()
mapper = ActionMapper(ctrl)
print("\n=== 交互式测试模式 ===")
print("可用动作:")
print(" 移动: up, down, left, right, upleft, upright, downleft, downright")
print(" 战斗: attack, damage, control")
print(" 战术: recall, heal, summoner, enhance, upgrade")
print(" 其他: screenshot, quit")
print("-" * 40)
while True:
cmd = input("\n请输入动作: ").strip().lower()
if cmd == 'quit':
print("退出测试")
break
elif cmd == 'screenshot':
try:
img = ctrl.screenshot()
filename = "manual_screenshot.png"
img.save(filename)
print(f"截图已保存: {filename}")
except Exception as e:
print(f"截图失败: {e}")
elif cmd in ['up', 'down', 'left', 'right', 'upleft', 'upright', 'downleft', 'downright']:
action = f"move_{cmd}"
print(f"执行: {action}")
mapper.execute(action)
elif cmd in ['attack', 'damage', 'control']:
if cmd == 'damage':
action = 'skill_damage'
elif cmd == 'control':
action = 'skill_control'
else:
action = cmd
print(f"执行: {action}")
mapper.execute(action)
elif cmd in ['recall', 'heal', 'summoner', 'enhance', 'upgrade']:
print(f"执行: {cmd}")
mapper.execute(cmd)
else:
print(f"未知动作: {cmd}")
time.sleep(0.3)
def test_with_delay():
"""带延迟的循环测试(用于观察)"""
ctrl = GameController()
mapper = ActionMapper(ctrl)
print("\n=== 自动循环测试模式 ===")
print("将依次执行所有动作,每个动作间隔1秒")
print("按 Ctrl+C 停止\n")
actions = [
# 移动
"move_up", "move_down", "move_left", "move_right",
"move_upleft", "move_upright", "move_downleft", "move_downright",
# 战斗
"attack", "skill_damage", "skill_control",
# 战术
"recall", "heal", "summoner", "enhance", "upgrade"
]
try:
for i, action in enumerate(actions, 1):
print(f"[{i}/{len(actions)}] {action}")
mapper.execute(action)
time.sleep(1) # 每个动作间隔1秒
print("\n循环测试完成")
except KeyboardInterrupt:
print("\n用户中断测试")
if __name__ == "__main__":
print("选择测试模式:")
print("1. 全面测试(一次执行所有动作)")
print("2. 交互式测试(手动输入动作)")
print("3. 循环测试(自动循环,可观察)")
choice = input("\n请选择 (1/2/3): ").strip()
if choice == '1':
test_all_actions()
elif choice == '2':
test_single_action()
elif choice == '3':
test_with_delay()
else:
print("无效选择,运行全面测试")
test_all_actions()