commandcenter — это искусственный бот StarCraft, который может играть как в StarCraft: Broodwar, так и в StarCraft 2.
commandcenter написан на C++ с использованием BWAPI и AI API StarCraft II от Blizzard. Он предоставляет множество функций-оболочек для обоих API, которые позволяют ему выполнять одни и те же функции в обеих играх с помощью одного и того же исходного кода. Его написал Дэвид Черчилль, доцент кафедры компьютерных наук Мемориального университета и организатор конкурса AIIDE StarCraft AI.
commandcenter основан на архитектуре UAlbertaBot и призван стать простой в использовании архитектурой, позволяющей быстро модифицировать, экспериментировать и создавать собственного бота. Сам бот не содержит жестко запрограммированной стратегии или тактики, однако он обеспечивает хорошую отправную точку для реализации ваших собственных стратегий для любой расы.
В настоящее время commandcenter предоставляет следующие возможности:
В конечном итоге commandcenter должен обладать всеми функциями UAlbertaBot, однако большая часть его функций в настоящее время не реализована. Вот актуальный список функций, которые в настоящее время отсутствуют в commandcenter и которые будут реализованы в ближайшее время:
StarCraft BW: у вас должен быть установлен StarCraft: Broodwar версии 1.16.1, а также BWAPI.
StarCraft 2: для запуска бота у вас должна быть установлена последняя розничная версия StarCraft II. Вам также необходимо загрузить и установить некоторые карты для использования с ботом, которые вы можете найти здесь: https://github.com/Blizzard/s2client-proto#downloads. Обратите внимание, что на этой странице указан пароль для извлечения карт из zip-файлов.
Бот поставляется с файлом конфигурации с именем BotConfig.txt, в котором вы можете изменять порядок сборки, выводить на экран различную отладочную информацию и устанавливать некоторые параметры бота. Вы можете определить несколько порядков сборки в разделе «Стратегии» файла и выбрать, какую именованную стратегию реализовать, когда бот участвует в определенной гонке. Имена юнитов в порядке сборки чувствительны к регистру и должны быть именно такими, какими они появляются в игре, без пробелов. Некоторые параметры файла конфигурации в настоящее время не реализованы, например параметр KiteWithRangedUnits.
Обратите внимание, что этот файл конфигурации имеет формат JSON, и бот не запустится, если он не имеет правильного формата JSON. Для правильной работы бота файл конфигурации должен находиться в том же каталоге, что и файл commandcenter . Если вы допустили ошибку в синтаксисе JSON и не можете найти ее самостоятельно, вы можете использовать онлайн-валидатор JSON, чтобы проверить ее.
По умолчанию, когда вы запускаете commandcenter .exe, он будет воспроизводиться как случайная гонка против случайной гонки, встроенной в SC2 Easy AI. Вы можете изменить расы, в которых играют, в файле конфигурации с помощью опций «BotRace» и «EnemyRace». Вы также можете изменить карту, на которой будет воспроизводиться, указав опцию «MapFile». Обратите внимание, что параметр MapFile относится к каталогу карт StarCraft II, который по умолчанию находится в каталоге StarCraft_Install_Directory/maps/, и бот не запустится без указания действительного файла карты.
Если бот вылетает или делает другие неприятные вещи, пожалуйста, поддержите меня, пока я сделаю его более стабильным :)
Выполнив эти шаги, вы сможете собрать и установить API SC2 и включить его в commandcenter . Он был успешно протестирован для aba2d3813571c344090f3de5b58a5c912cd5acb3, поэтому, если приведенные ниже инструкции по установке не работают, проверьте эту версию API SC2.
$ 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, поскольку архитектура очень похожа (за исключением планировщика порядка сборки и боевого симулятора).