commandcenter是一款星际争霸 AI 机器人,可以玩《星际争霸:母巢之战》和《星际争霸 2》。
commandcenter是使用 BWAPI 和暴雪的星际争霸 II AI API 用 C++ 编写的。它围绕这两个 API 提供了许多包装函数,使其能够通过相同的源代码在两个游戏中执行相同的功能。它的作者是纪念大学计算机科学助理教授、AIIDE 星际争霸人工智能竞赛的组织者 David Churchill。
commandcenter基于 UAlbertaBot 的架构,旨在成为一个易于使用的架构,供您快速修改、使用和构建自己的机器人。机器人本身并不包含太多硬编码的策略或战术,但它为您在任何比赛中实施自己的策略提供了一个良好的起点。
commandcenter目前提供以下功能:
commandcenter最终应该具有 UAlbertaBot 的所有功能,但其大部分功能目前尚未完成。以下是commandcenter当前缺少的功能的最新列表,这些功能将很快实现:
星际争霸 BW:您必须安装星际争霸:母巢之战版本 1.16.1 以及 BWAPI。
星际争霸 2:您必须安装最新零售版本的星际争霸 II 才能运行机器人。您还必须下载并安装一些地图才能与机器人一起使用,您可以在这里找到这些地图:https://github.com/Blizzard/s2client-proto#downloads。请注意,该页面上提供了用于从 zip 文件中提取地图的密码。
该机器人附带一个名为 BotConfig.txt 的配置文件,您可以在其中修改构建顺序、在屏幕上打印各种调试信息以及设置一些机器人参数。您可以在文件的“策略”部分定义多个构建顺序,并选择当机器人进行特定比赛时要实施的命名策略。构建顺序中的单位名称区分大小写,并且必须与它们在游戏中的显示方式完全相同,且不带空格。配置文件中的某些选项当前尚未实现,例如 KiteWithRangedUnits 选项。
请注意,此配置文件采用 JSON 格式,除非它是格式正确的 JSON,否则机器人将不会运行。配置文件必须与commandcenter位于同一目录中,才能使机器人正确运行。如果您在 JSON 语法中出现错误并且无法自行查找,您可以使用在线 JSON Validator 为您检查。
默认情况下,当您运行commandcenter .exe 时,它将作为随机竞赛与内置 SC2 Easy AI 的随机竞赛进行比赛。您可以通过“BotRace”和“EnemyRace”选项修改配置文件中进行的比赛。您还可以通过指定“MapFile”选项来修改要播放的地图。请注意,MapFile 选项与您的《星际争霸 II》地图目录相关,默认情况下位于您的 StarCraft_Install_Directory/maps/ 中,如果不指定有效的地图文件,机器人将不会运行。
如果机器人崩溃或做了其他令人讨厌的事情,请耐心等待,我会使其更加稳定:)
通过这些步骤,您应该能够构建和安装 SC2 API 并将其包含到commandcenter中。它已针对 aba2d3813571c344090f3de5b58a5c912cd5acb3 进行了成功测试,因此,如果下面的安装说明不起作用,请检查该版本的 SC2 API
$ git checkout aba2d3813571c344090f3de5b58a5c912cd5acb3 .
并重复说明。
$ git clone --recursive https://github.com/Blizzard/s2client-api && cd s2client-api
$ mkdir build && cd build
$ cmake ../
$ make
# Assuming that you are located in the 'build' directory
# after you finished the previous step
$ cd ../
# Install SC2 API headers
$ sudo mkdir -p /opt/local/include
$ sudo cp -R include/{sc2api,sc2renderer,sc2utils} /opt/local/include
$ sudo cp -R build/generated/s2clientprotocol /opt/local/include
# Install protobuf headers
$ sudo cp -R contrib/protobuf/src/google /opt/local/include/sc2api
# Install SC2 API libraries
$ sudo mkdir -p /opt/local/lib/sc2api
$ sudo cp build/bin/{libcivetweb,libprotobuf,libsc2api,libsc2lib,libsc2protocol,libsc2utils}.a /opt/local/lib/sc2api
$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .
$ make
如果你熟悉UAlbertaBot的架构,那么commandcenter的逻辑非常相似。最大的区别是与地图、基地位置等相关的信息不再在全球范围内访问。该数据现在位于主 CCBot 类内,并且必须通过对该类实例的引用来访问。因此, commandcenter中的大多数类都带有对机器人的主要 CCBot 对象的引用,从中可以进行所有游戏相关的信息、观察和查询。
深入的开发指南即将推出,但请暂时参考 UAlbertaBot wiki,因为架构非常相似(减去构建顺序规划器和战斗模拟器)。