Python 3의 Starcraft II 용 AI 봇을 작성하기 쉬운 라이브러리. 궁극적 인 목표는 모든 기능을 유지하면서 단순성과 사용 편의성입니다. 정말 간단한 노동자 Rush Bot은 200 개가 아닌 20 줄을 넘지 않아야합니다. 그러나이 라이브러리는 높은 수준의 추상화 및 저수준 추상화를 제공하려고합니다.
이 라이브러리 (현재)는 원시 스크립트 인터페이스 만 포함합니다. 현재 그래픽 기반 인터페이스에 대한 지원을 추가하려고하지 않습니다.
문서는 여기에서 찾을 수 있습니다. 봇 저자의 경우 SC2 폴더의 파일을 직접 살펴보면 Bot_ai.py, unit.py, unit.py, client.py, game_info.py 및 game_state.py 등이 도움이 될 수 있습니다. 해당 파일의 대부분의 기능에는 문서, 예제 사용 및 유형 힌트가 있습니다.
봇 성능 혜택을 위해 주요 저장소 보다이 포크를 더 근본적으로 변경하고 새로운 봇 저자를 돕기 위해 기능을 추가 할 계획입니다. 이것은 나중에 오래된 봇을 깨뜨릴 수 있지만, 헤드 업 알림을 제공하기 위해 감가 상각 경고를 추가하려고합니다. 이는 Sentdex가 만든 비디오 자습서가 구식이며 더 이상이 포크와 직접 작동하지 않음을 의미합니다.
Dentosal의 주요 저장소와의 지속적인 변경 및 차이점 목록은 여기를 확인하십시오.
이 라이브러리를 설치함으로써 귀하는 AI 및 기계 학습 라이센스의 조건에 구속된다는 데 동의합니다.
이 포크에는 Python 3.10 또는 최신이 필요합니다.
PYPI 패키지 설치 :
pip install --upgrade burnysc2
또는 직접 개발 지점에서 :
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
두 명령 모두 sc2 라이브러리 폴더를 사용하므로 가상 환경이나시를 사용하지 않는 한 DentoSal 과이 포크를 동시에 설치할 수 없습니다.
스타 크래프트 II 실행 파일이 필요합니다. Windows 또는 MacOS를 실행중인 경우 Blizzard App에서 SC2를 설치하십시오.
와인, 루트리스 또는 리눅스 바이너리로 Linux에 Starcraft II를 설치할 수 있지만 후자는 헤드리스이므로 실제로 게임을 볼 수 없습니다. Starcraft II는 Lutris로 다운로드하면 Battlenet에서 직접 설치할 수 있습니다. 기본적으로 여기에 설치됩니다.
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
다음으로 다음 환경 변수를 설정하십시오 (전 세계 또는 개발 환경 내에서 PyCharm : Run -> Edit Configurations -> Environment Variables ) :
SC2PF=WineLinux
WINE=/usr/bin/wine
# Or a wine binary from lutris:
# WINE=/home/burny/.local/share/lutris/runners/wine/lutris-4.20-x86_64/bin/wine64
# Default Lutris StarCraftII Installation path:
SC2PATH='/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/'
Windows에서 WSL을 실행할 때 Python-SC2는 기본적으로 WSL을 감지하고 Linux Starcraft 2 대신 Windows Starcraft 2를 시작합니다. 대신 Linux에서 게임을 플레이하려면 SC2_WSL_DETECT 환경 변수를 "0"으로 설정 하여이 동작을 비활성화 할 수 있습니다. . 다음 코드로 파이썬 내부 에서이 작업을 수행 할 수 있습니다.
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL 버전 1에는 구성이 필요하지 않아야합니다. 방화벽을 통해 파이썬을 허용하도록 요청받을 수 있습니다.
WSL 버전 2를 실행할 때 봇이 연결할 수 있도록 다음 환경 변수를 제공해야합니다.
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
.BASHRC에이를 추가하는 경우 다음을 추가하여 환경 변수를 내보내야 할 수도 있습니다.
export SC2CLIENTHOST
export SC2SERVERHOST PowerShell.exe 또는 CMD.exe 에서 ipconfig /all 사용하여 Windows IP를 찾을 수 있습니다.
라이브러리를 실행하려면지도가 필요합니다.
공식 블리자드 맵 다운로드는 블리자드/S2Client-Proto에서 구입할 수 있습니다.
SC2 맵 디렉토리에서 이러한 맵을 해당 하위 디렉토리 로 추출하십시오.
예 : install-dir/Maps/Ladder2017Season1/
SC2 AI 사다리 및 SC2 AI 경기장에서 실행되는 맵은 SC2AI Wiki 및 Aiarena Wiki에서 다운로드 할 수 있습니다.
이 맵을 SC2 맵 디렉토리의 루트 로 추출하십시오 (그렇지 않으면 래더 리플레이가 작동하지 않음).
예를 들어 install-dir/Maps/AcropolisLE.SC2Map
도서관, 스타 크래프트 II 실행 파일 및 일부지도를 설치 한 후 시작할 준비가되었습니다. 봇 파일을 실행하여 봇이 실행중인 Starcraft II 인스턴스를 발사하십시오. 예를 들어:
python examples/protoss/cannon_rush.py약속 한 바와 같이, 노동자는 20 줄 미만으로 돌진합니다.
from sc2 import maps
from sc2 . player import Bot , Computer
from sc2 . main import run_game
from sc2 . data import Race , Difficulty
from sc2 . bot_ai import BotAI
class WorkerRushBot ( BotAI ):
async def on_step ( self , iteration : int ):
if iteration == 0 :
for worker in self . workers :
worker . attack ( self . enemy_start_locations [ 0 ])
run_game ( maps . get ( "Abyssal Reef LE" ), [
Bot ( Race . Zerg , WorkerRushBot ()),
Computer ( Race . Protoss , Difficulty . Medium )
], realtime = True )이것은 아마도 게임에서 이길 수있는 현실적인 기회가있는 가장 간단한 봇 일 것입니다. 나는 중간 ai에 대해 몇 차례에 걸쳐 그것을 달렸고, 가끔 승리합니다.
examples/ 폴더에서 더 많은 예제를 찾을 수 있습니다.
API는 작동 방식을 구성하기위한 여러 가지 옵션을 지원합니다.
unit_command_uses_self_do 봇이 self.do(Unit(Ability, Target)) Unit(Ability, Target) 사용하여 명령을 발행하는 경우 이것을 'True'로 설정하십시오.
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selection이것을 진정으로 설정하면 봇 성능이 약간 향상됩니다.
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_method거리 계산 방법 :
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_step 게임 시작 또는 모든 프레임에서 실제로 게임 단계를 설정할 수 있습니다. 봇의 step 방법이 얼마나 자주 호출되는지 제어합니다.
클라이언트가 아직 초기화되지 않았기 때문에 __init__ 함수에서 이것을 설정하지 마십시오!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 질문이 있지만 문제를 만들고 싶지 않습니까? Starcraft 2 AI Discord Server 또는 AIARENA.NET Discord Server에 가입하십시오. 이 저장소에 대한 질문은 텍스트 채널 #python에서 요청할 수 있습니다. SC2 BOT 프로그래밍 과이 저장소에 대한 토론과 질문이 매일 있습니다.
문제, 아이디어 또는 피드백이 있으면 새 문제를 만들어주십시오. 풀 요청도 환영합니다!
GIT 커밋 메시지는 명령 스타일 메시지를 사용하고 대문자로 시작하며 후행 쉼표가 없습니다.
사전 커밋 후크 (자동 지정 및 자동 조종트 수입을 실행하는)를 실행하려면 실행할 수 있습니다.
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push