때는 바야흐로 지금으로부터 6년전 내가 대학교 1학년때 이야기이다. 알파고의 등장으로 딥러닝이 급부상한 시기였는데 이 시절에 세종대학교에서 스타크래프트 인공지능 vs 인간 이라는 대회를 개최했었다. 초보, 중급, 프로 세 명의 사람이 스타크래프트 봇과 경기하는 내용이었는데 초보와 중급 플레이어는 학생이었고 프로는 송병구 선수였다. 나도 이 경기를 관람하였고 그 때 스타크래프트 인공지능의 존재를 알게 되었으며 인공지능을 공부하기 시작한 계기가 되었다. 6년이 지난 지금 갑자기 생각나서 옛날의 추억을 회상해보려고 한다.
http://www.sejongpr.ac.kr/sejongnewspaperview.do?boardType=4&pkid=8908
준비물
https://github.com/bwapi/bwapi
스타크래프트 인공지능은 bwapi라는 api를 사용하여 개발된다. 스타 2는 정식으로 api가 제공되지만 스타 1은 해커들이 분석해서 만든 api라고 한다. (생각보다 최근에도 업데이트가 이루어진다.)
visual studio 2017
무슨 이유인지는 모르겠는데 visual studio로만 빌드할 수 있다. 1학년때는 visual studio로 배우기 시작했기 때문에 당연한줄 알았는데 이제와서 생각해보면 좀 서운하다. 그리고 내 기준으로 2017버전에서만 성공했다.
스타크래프트 1.16.1
반드시 위 버전만 가능하다. 어떤 수를 써서라도 구해야 한다. 인터넷에 많이 있으므로 어떻게든 설치만 하면 된다. 랜섬웨어나 바이러스 주의! (여담으로 학창시절 학교에서 1.16.1 립버전을 설치하여 했던 기억이 난다. ㅋㅋ)
실행
bwapi에서 제공하는 기본 봇이 있다. 이것을 한번 테스트해보자. bwapi 레포지토리의 quick_start를 따라하면 된다.
릴리즈에 들어가서 BWAPI_Setup.exe를 다운받고 실행한다.
설치를 받으면 ExampleProjects.sln이라는 솔루션 파일이 존재하는데 이걸 실행시켜서 visual studio를 오픈한다.
빌드 모드를 release로 변경하고 빌드를 실행한다. 성공하면 Release폴더에 ExampleAIModule.dll 파일이 생긴다. 이제 BWAPI/Starcraft폴더 안에 bwapi-data폴더를 스타크래프트가 설치된 폴더에 복사한다. 그 후 AI폴더를 만든 후 안에 ExampleAIModule.dll파일을 넣으면 된다. 스타크래프트의 폴더구조는 다음과 같이 된다.
├─Starcraft
│ ├─bwapi-data
│ │ ├─AI
│ │ └─data
│ ├─...
그 후 BWAPI안에 Chaoslauncher라는 폴더가 있는데 거기에서 Chaoslauncher.exe를 관리자 권한으로 설치한다.
Chaoslauncher란?
"스타크래프트 실행기" 정도로 이해하면 된다. 직접 실행하지 않고 런처를 사용하여 실행하면 창모드, 핵잡기같은 추가적인 기능을 사용할 수 있었다. 아쿠아런처, 카오스런처(a.k.a 카런), w런처등이 있었다.
Settings에서 스타크래프트 폴더를 지정하고 BWAPI 4.4.0 Injector[RELEASE]를 선택한다.
이제 Start를 누르고 UDP로 들어가서 아무 맵이나 들어가면 봇이 게임하는 것을 확인할 수 있다. 게임 설정시 어색하게 속도가 빠를 수 있는데 그러면 정상이다.
잘 작동한다.
API 정보는 아래 사이트에 모두 정리가 되어있다.
레포지토리에 비해 업데이트가 뜸한것 같다.
ExampleAIModule.cpp와 ExampleAIModule.h를 수정하여 개발하면 된다.
예시로 하나 수정해보자.
잘 반영된 것을 확인할 수 있다.
스타크래프트 봇 대회
만약에 본인이 만든 스타크래프트 봇이 잘 만들어졌다면 대회에 한번 나가보자!
비교적 최근까지도 진행되고 있다. 2017년도에 zzzkbot이라는 봇이 승률이 상당히 높았던 것으로 기억하는데 4드론 전략을 사용하여 다른 봇이 대처를 하지 못했다. 이런식으로 봇의 허점을 사용하면 높은 승률을 기록할 수 있을 것이다.
'프로그래밍 > 개발' 카테고리의 다른 글
[개발] VPC 개념잡기 (0) | 2023.07.27 |
---|---|
[개발] AWS 아키텍처 구성하기 (4) | 2023.06.09 |
[개발] 메시지 큐 (0) | 2023.05.19 |
[개발] 샤딩이란 것을 해보자! (3) (2) | 2023.04.21 |
[개발] 샤딩이란 것을 해보자! (2) (0) | 2023.04.21 |