commandcenter 는 스타크래프트: 브루드워(StarCraft: Broodwar)와 스타크래프트 2(StarCraft 2)를 모두 플레이할 수 있는 스타크래프트 AI 봇입니다.
commandcenter BWAPI와 Blizzard의 StarCraft II AI API를 사용하여 C++로 작성되었습니다. 이는 동일한 소스 코드를 통해 두 게임에서 동일한 기능을 수행할 수 있도록 두 API 주위에 많은 래퍼 기능을 제공합니다. 이 글은 Memorial University의 컴퓨터 과학 조교수이자 AIIDE StarCraft AI 대회의 주최자인 David Churchill이 작성했습니다.
commandcenter UAlbertaBot의 아키텍처를 기반으로 하며 사용자가 자신만의 봇을 빠르게 수정하고, 가지고 놀고, 구축할 수 있도록 사용하기 쉬운 아키텍처로 만들어졌습니다. 봇 자체에는 하드 코딩된 전략이나 전술이 많이 포함되어 있지 않지만, 모든 종족에 대해 자신만의 전략을 구현하기 위한 좋은 출발점을 제공합니다.
commandcenter 현재 다음 기능을 제공합니다.
commandcenter 궁극적으로 UAlbertaBot의 모든 기능을 갖게 되지만 현재 기능 중 많은 부분이 완성되지 않았습니다. 다음은 곧 구현될 commandcenter 에 현재 누락된 최신 기능 목록입니다.
StarCraft BW: StarCraft: Broodwar 버전 1.16.1과 BWAPI가 설치되어 있어야 합니다.
스타크래프트 2: 봇을 실행하려면 최신 정품 버전의 스타크래프트 II가 설치되어 있어야 합니다. 또한 봇과 함께 사용할 일부 맵을 다운로드하여 설치해야 합니다. 해당 맵은 https://github.com/Blizzard/s2client-proto#downloads에서 찾을 수 있습니다. zip 파일에서 지도를 추출하기 위해 해당 페이지에 비밀번호가 제공되어 있습니다.
봇에는 빌드 순서를 수정하고, 다양한 디버그 정보를 화면에 인쇄하고, 일부 봇 매개변수를 설정할 수 있는 BotConfig.txt라는 구성 파일이 함께 제공됩니다. 파일의 '전략' 섹션에서 여러 빌드 순서를 정의하고 봇이 특정 레이스를 플레이할 때 구현할 명명된 전략을 선택할 수 있습니다. 빌드 순서의 유닛 이름은 대소문자를 구분하며 게임 내에서 공백 없이 정확하게 표시되어야 합니다. KiteWithRangedUnits 옵션과 같은 구성 파일의 일부 옵션은 현재 구현되지 않습니다.
이 구성 파일은 JSON 형식이므로 올바른 형식의 JSON이 아니면 봇이 실행되지 않습니다. 봇이 올바르게 실행되려면 구성 파일이 commandcenter .exe와 동일한 디렉터리에 있어야 합니다. JSON 구문에 오류가 있어 스스로 찾을 수 없는 경우 온라인 JSON 검사기를 사용하여 확인할 수 있습니다.
기본적으로 commandcenter .exe를 실행하면 SC2 Easy AI에 내장된 무작위 경주 대 무작위 경주로 플레이됩니다. "BotRace" 및 "EnemyRace" 옵션을 통해 구성 파일에서 재생되는 레이스를 수정할 수 있습니다. "MapFile" 옵션을 지정하여 재생할 맵을 수정할 수도 있습니다. MapFile 옵션은 기본적으로 StarCraft_Install_Directory/maps/에 있는 StarCraft II 지도 디렉터리에 상대적이며 유효한 지도 파일을 지정하지 않으면 봇이 실행되지 않습니다.
봇이 충돌하거나 기타 불쾌한 작업을 수행하는 경우 더 안정적으로 만드는 동안 양해해 주시기 바랍니다. :)
이러한 단계를 통해 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 위키를 참조하세요.