s2client-proto项目概述
s2client-proto是暴雪娱乐(Blizzard Entertainment)开发的一个开源项目,提供了与星际争霸II(StarCraft II)游戏进行通信的协议定义。该项目旨在为开发者提供一个完整的接口,用于控制和分析StarCraft II游戏。
s2client-proto项目的主要目标是支持以下几类软件的开发:
- 脚本化的AI机器人
- 基于机器学习的AI机器人
- 游戏回放分析工具
- 辅助人类玩家的工具
该API可在Windows和Mac的零售版客户端中使用,同时也提供了Linux版本的客户端下载。
项目主要组成部分
s2client-proto项目包含以下几个主要部分:
1. 协议定义
2. C++参考实现
- 用于构建脚本化机器人的C++库
- 代码仓库
3. Linux版StarCraft II
- 无图形界面的Linux版StarCraft II构建
- Linux版说明文档
- 下载链接
4. 地图资源
- 1v1天梯地图和其他自定义地图
- 下载链接
5. 游戏回放
- 1v1天梯对战的回放包
- 下载链接
社区资源
除了官方提供的资源外,s2client-proto项目还催生了丰富的社区资源:
-
PySC2 - DeepMind开发的Python环境封装 代码仓库
-
CommandCenter - 快速开发StarCraft AI机器人的架构 代码仓库
-
非官方机器人天梯
-
社区维基 网站链接
-
Discord讨论服务器 邀请链接
-
Facebook群组 群组链接
这些社区资源为开发者提供了宝贵的学习资料、讨论平台和测试环境,大大促进了StarCraft II AI的发展。
资源下载
s2client-proto项目提供了丰富的下载资源,包括Linux客户端包、地图包和回放包。需要注意的是,访问这些资源需要同意AI和机器学习许可协议。
下载文件受密码保护,密码为"iagreetotheeula"。输入该密码即表示同意遵守上述许可协议的条款。
Linux版本包
项目提供了多个版本的Linux客户端包,从3.16.1到4.10,开发者可以根据需要选择合适的版本。
地图包
提供了2017年至2019年各赛季的天梯地图包,以及Melee(混战)地图包。
回放包
目前提供了3.16.1版本的两个回放包供下载使用。
安装和使用说明
安装地图和回放包
-
所有额外的游戏数据应该解压到游戏安装目录中。
-
默认安装目录:
- Windows: C:\Program Files (x86)\StarCraft II\
- Mac: /Applications/StarCraft II/
- Linux: 解压Linux包的文件夹
-
所有平台的文件夹结构相同:
StarCraft II/ ├── Battle.net/ ├── Maps/ ├── Replays/ ├── SC2Data/ └── Versions/
地图包安装
- 将zip文件直接解压到"Maps"文件夹中
- 在API中,可以使用地图的绝对路径或相对于"Maps"文件夹的相对路径
回放包安装
- 用zip文件中的"Battle.net"和"Replays"文件夹替换原有文件夹
- 在API中,必须使用回放文件的绝对路径
稳定ID
s2client-proto项目中的stableid.json
文件定义了protobuf API中能力ID到游戏内部的行为映射,以及一些具有相似语义的通用ID(如各种形式的钻地、取消、升降等)。
该文件会随游戏更新而更新,也可以手动下载最新版本并放置在StarCraft II根目录下进行更新。
开发示例
以下是使用s2client-proto创建一个简单机器人的Python代码示例:
from s2clientprotocol import sc2api_pb2 as sc2api
from s2clientprotocol import common_pb2 as common
# 创建游戏请求
create_game = sc2api.RequestCreateGame(
local_map=sc2api.LocalMap(
map_path="Maps/Empty.SC2Map"
),
player_setup=[
sc2api.PlayerSetup(type=sc2api.Participant),
sc2api.PlayerSetup(type=sc2api.Computer)
],
realtime=False
)
# 加入游戏请求
join_game = sc2api.RequestJoinGame(
race=common.Terran,
options=sc2api.InterfaceOptions(raw=True, score=True)
)
# 创建并加入游戏
client.create_game(create_game)
client.join_game(join_game)
# 游戏主循环
while True:
obs = client.observation()
# 分析观察结果,制定策略
actions = []
# 生成行动指令
client.actions(actions)
if obs.player_result:
break
client.quit()
这个简单的例子展示了如何使用s2client-proto创建游戏、加入游戏,以及基本的游戏循环结构。开发者可以根据需求扩展这个框架,实现更复杂的AI逻辑。
总结
s2client-proto项目为StarCraft II AI开发提供了强大而灵活的工具。通过提供标准化的协议定义、丰富的资源和活跃的社区支持,该项目极大地降低了AI开发的门槛,推动了StarCraft II AI技术的快速发展。
无论是对机器学习感兴趣的研究人员,还是热衷于开发游戏AI的爱好者,s2client-proto都是一个值得深入研究和利用的优秀项目。随着项目的不断完善和社区的持续贡献,我们可以期待看到更多创新的StarCraft II AI应用出现。