Простая в использовании библиотеку для написания AI-ботов для Starcraft II в Python 3. Конечная цель-простота и простота использования, сохраняя при этом все функциональность. Действительно простой бот работника Rush должен быть не более двадцати строк кода, а не двести. Тем не менее, эта библиотека намеревается обеспечить как высокие, так и низкие абстракции.
Эта библиотека (в настоящее время) охватывает только необработанный интерфейс. В настоящее время я не собираюсь добавлять поддержку интерфейсов на основе графики.
Документацию можно найти здесь. Для авторов бота, поиск непосредственно на файлы в папке SC2 также может быть полезны: bot_ai.py, unit.py, units.py, client.py, game_info.py и game_state.py. Большинство функций в этих файлах имеют Docstrings, примеры использования и подсказки типов.
Я планирую изменить эту вилку более радикально, чем основной репозиторий, для преимуществ производительности бота и добавления функций, чтобы помочь новым авторам бота. В будущем это может сломать старых ботов, однако я стараюсь добавить предупреждения об испаке, чтобы дать уведомление о головах. Это означает, что видеоурок, сделанный Sentdex, устарел и больше не работает напрямую с этой вилкой.
Чтобы получить список текущих изменений и различий в основном хранилище Denosal, проверьте здесь.
Установив эту библиотеку, вы соглашаетесь быть связанными условиями ИИ и лицензии на машинное обучение.
Для этой вилки вам понадобится 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's и эта вилка, установленная одновременно, если вы не используете виртуальные среды или поэзию.
Вам понадобится исполняемый файл Starcraft II. Если вы запускаете Windows или MacOS, просто установите SC2 из приложения Blizzard.
Вы можете установить Starcraft II на Linux с вином, Lutris или даже бинарным Linux, но последний без головы, поэтому вы не можете увидеть игру. Starcraft II может быть непосредственно установлен из Battlenet после загрузки с Lutris. По умолчанию он будет установлен здесь:
/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/'
При запуске WSL в Windows Python-SC2 обнаруживает WSL по умолчанию и запускает Windows StarCraft 2 вместо Linux StarCraft 2. Если вы хотите вместо этого сыграть игру в Linux, вы можете отключить такое поведение, установив переменную среды SC2_WSL_DETECT на «0». Полем Вы можете сделать это внутри Python со следующим кодом:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL версия 1 не должна требовать никакой конфигурации. Вас могут попросить пропустить Python через брандмауэр.
При запуске WSL версии 2 вам необходимо предоставить следующие переменные среды, чтобы ваш бот мог подключиться:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
Если вы добавляете их в свой .bashrc, вам может потребоваться экспортировать переменные среды, добавив:
export SC2CLIENTHOST
export SC2SERVERHOST Вы можете найти свой IP Windows, используя ipconfig /all от PowerShell.exe или CMD.exe .
Вам понадобятся карты для запуска библиотеки.
Официальные загрузки карты Blizzard доступны в Blizzard/S2Client-Proto.
Извлеките эти карты в их соответствующие подкаталоги в каталоге карт SC2.
например, install-dir/Maps/Ladder2017Season1/
Карты, которые проводятся на лестнице SC2 AI и SC2 AI Arena, могут быть загружены с вики SC2AI и вики Aiarena.
Извлеките эти карты в корень каталога карт SC2 (в противном случае повреждения лестницы не сработают).
Например, install-dir/Maps/AcropolisLE.SC2Map
После установки библиотеки, исполняемого файла Starcraft II и некоторых карт, вы готовы начать. Просто запустите файл бота, чтобы запустить экземпляр Starcraft II с запуском бота. Например:
python examples/protoss/cannon_rush.pyКак и было обещано, работник бросится менее чем за двадцать строк:
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 )Это, вероятно, самый простой бот, который имеет какие -либо реалистичные шансы на победу в игре. Я запустил его против Среднего ИИ несколько раз, и время от времени он побеждает.
Вы можете найти больше примеров в examples/ папке.
API поддерживает ряд параметров для настройки того, как он работает.
unit_command_uses_self_do Установите это на «true», если ваш бот выпускает команды, используя self.do(Unit(Ability, Target)) вместо Unit(Ability, Target) .
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionУстановка этого на True немного улучшает производительность бота.
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 У вас есть вопросы, но вы не хотите создавать проблему? Присоединяйтесь к серверу Discord Sarcraft 2 или серверу Discord Aiarena.net. Вопросы об этом хранилище можно задавать в текстовом канале #Python. Есть дискуссии и вопросы о программировании BOT SC2 и этом хранилище каждый день.
Если у вас есть какие -либо проблемы, идеи или отзывы, пожалуйста, создайте новую проблему. Приглашаются также запросы на вытягивание!
Сообщения Commit-Commits используют сообщения в императивном стиле, начните с заглавного письма и не имеют запятых.
Чтобы запустить предварительные крючки (которые запускают автоформирование и импорт автоматического сорта), вы можете запустить
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push