尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

python-sc2自动化测试实战:run_multiple_games一键运行多场Bot对局并保存录像

python-sc2自动化测试实战:run_multiple_games一键运行多场Bot对局并保存录像 python-sc2自动化测试实战run_multiple_games一键运行多场Bot对局并保存录像【免费下载链接】python-sc2A StarCraft II bot api client library for Python 3项目地址: https://gitcode.com/gh_mirrors/pyt/python-sc2做星际争霸 IIStarCraft II的 Bot 自动化测试python-sc2是最流行的 Python 3 客户端库。它让你用一个函数run_multiple_games批量跑完多场 Bot 对局、自动断言胜负结果还能把关键对局保存为录像回放。本文手把手带你搭建完整的 Bot 自动化测试流程。一、环境准备安装 python-sc2️ 开始前需要两个条件Python 3.8环境已安装支持 API 的 StarCraft II 客户端需按 SC2 API 要求配置启动参数-api并安装 API 组件安装 python-sc2 非常简单pip install python-sc2如果你要运行仓库里自带的示例 Bot先把代码下载下来git clone https://gitcode.com/gh_mirrors/pyt/python-sc2二、GameMatch一场比赛的配置对象run_multiple_games接收一个比赛列表每场比赛由 GameMatch 数据类描述核心字段如下字段说明map_sc2比赛地图用maps.get(AcropolisLE)等获取players玩家列表Bot、Human或Computer三种类型realtimeFalse为极速快进模式推荐用于测试game_time_limit游戏内时限秒超时自动判平局Tierandom_seed随机种子可固定开局保证结果可复现disable_fog是否关闭战争迷雾sc2_config每个玩家的 SC2 进程参数如{fullscreen: True}其中 needed_sc2_count 属性会自动计算需要启动几个 SC2 进程——打电脑只需 1 个Bot 互相对打需要 2 个。三、run_multiple_games 一键批量跑对局批量入口是 run_multiple_games同步版和 a_run_multiple_games异步版只需三步① 构建比赛列表→② 调用批量运行→③ 遍历结果做断言。import asyncio from sc2 import maps from sc2.data import Race from sc2.main import GameMatch, a_run_multiple_games from sc2.player import Bot from examples.protoss.warpgate_push import WarpGateBot from examples.zerg.zerg_rush import ZergRushBot matches [ GameMatch( map_sc2maps.get(AcropolisLE), players[Bot(Race.Protoss, WarpGateBot()), Bot(Race.Zerg, ZergRushBot())], realtimeFalse, game_time_limit240, ) for _ in range(3) # 连打 3 场 ] results asyncio.run(a_run_multiple_games(matches)) for match, result in zip(matches, results): print(match, result) # 每场返回 {玩家: Result} 字典批量运行有几个内置优势✅进程复用内部通过 maintain_SCII_count 自动增减 SC2 进程避免每场都冷启动✅容错隔离单场比赛异常只记录日志、不中断整批任务✅自动清理跑完后KillSwitch统一收尾避免残留进程 官方注释特别指出Bot vs Bot 场景下run_multiple_games比反复调用旧的run_game()更不容易崩溃见 main.py 第 479 行 的迁移建议。四、保存录像复盘每场关键对局保存录像有两种常用姿势单场精跑save_replay_as参数用 run_game 时直接传录像路径对局结束后自动落盘from sc2.main import run_game from sc2 import maps from sc2.data import Race from sc2.player import Bot result run_game( maps.get(AcropolisLE), [Bot(Race.Protoss, WarpGateBot()), Bot(Race.Zerg, ZergRushBot())], realtimeFalse, save_replay_asMyFirstBotMatch.SC2Replay, )这就是 examples/bot_vs_bot.py 中示例的做法。底层接口client.save_replay录像保存的底层实现在 Client.save_replay它向 SC2 服务器请求录像数据并写入指定文件。注意当前版本的GameMatch不含录像字段所以批量跑分 录像的推荐组合是批量回归用run_multiple_games需要录像的关键场次用带save_replay_as的run_game单独复跑。回放录像run_replay保存的.SC2Replay文件可以用 run_replay 回放验证写法参考 examples/watch_replay.pyfrom sc2.main import run_replay run_replay(MyObserver(), C:/Replays/MyFirstBotMatch.SC2Replay)⚠️ 录像路径必须是绝对路径Linux 下录像需放在主目录的 SC2 回放文件夹中仓库里 test/replays/ 目录下就有现成的职业选手对战录像可供练习。五、官方测试脚本批量回归怎么做仓库自带的两个脚本是自动化回归测试的最佳范本脚本做法test/run_example_bots_vs_computer.py18 个示例 Bot 逐个打电脑限时 240 秒test/run_example_bots_vs_each_other.py用combinations两两配对78 个 Bot 互打全覆盖它们的关键技巧值得抄作业用a_run_multiple_games_nokill源码跨场次复用 SC2 进程速度更快注释也提醒其较易卡死适合 CI 快速验证用importlib动态导入examples/下所有 Bot新增 Bot 自动纳入回归统一断言结果——限时短促的对局双方应判Result.Tie任一字段不符立即报错results await a_run_multiple_games_nokill(matches) for result, game_match in zip(results, matches): assert all(v Result.Tie for k, v in result.items())六、常见坑与实战技巧 问题解决建议对局无限打不完设置game_time_limit超时自动判Tie收尾Bot vs Bot 偶发卡死优先用run_multiple_gamesCI 中可换a_run_multiple_games_nokill并加超时结果不稳定难复现给GameMatch传固定random_seedLinux 回放失败录像必须是主目录下的绝对路径想确认 Bot 的on_end是否触发参考官方脚本在 Bot 里打标记变量再断言写在最后python-sc2的批量测试链路非常清晰GameMatch 定义比赛 → run_multiple_games 批量执行 → Result 断言 录像回放。照着 test/ 目录下的官方脚本改造你半天就能搭出一套可跑在 CI 上的 StarCraft II Bot 回归测试体系。快去让你的 Bot 们打上一整天吧【免费下载链接】python-sc2A StarCraft II bot api client library for Python 3项目地址: https://gitcode.com/gh_mirrors/pyt/python-sc2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表