Uma biblioteca fácil de usar para escrever bots AI para Starcraft II no Python 3. O objetivo final é a simplicidade e a facilidade de uso, enquanto ainda preservando toda a funcionalidade. Um bot Rush Rush realmente simples não deve ter mais de vinte linhas de código, nem duzentos. No entanto, esta biblioteca pretende fornecer abstrações de alto e baixo nível.
Esta biblioteca (atualmente) cobre apenas a interface script bruta. Neste momento, não pretendo adicionar suporte para interfaces baseadas em gráficos.
A documentação pode ser encontrada aqui. Para os autores do BOT, observar diretamente os arquivos na pasta SC2 também pode ser benéfico: bot_ai.py, unit.py, units.py, client.py, game_info.py e game_state.py. A maioria das funções nesses arquivos possui documentos, usos de exemplo e dica de tipo.
Estou planejando mudar esse garfo mais radicalmente do que o repositório principal, para benefícios de desempenho de bot e adicionar funções para ajudar novos autores de bot. Isso pode quebrar os bots mais antigos no futuro, no entanto, tento adicionar avisos de depreciação para dar uma notificação de heads up. Isso significa que o tutorial em vídeo feito pelo SentDex está desatualizado e não trabalha mais diretamente com este garfo.
Para obter uma lista de mudanças e diferenças em andamento no repositório principal do dentoso, verifique aqui.
Ao instalar esta biblioteca, você concorda em estar vinculado pelos termos da IA e da licença de aprendizado de máquina.
Para este garfo, você precisará de Python 3.10 ou mais recente.
Instale o pacote Pypi:
pip install --upgrade burnysc2
ou diretamente do Develop Branch:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
Ambos os comandos usarão a pasta da biblioteca sc2 , para que você não possa ter dental e este garfo instalado ao mesmo tempo, a menos que você use ambientes virtuais ou poesia.
Você precisará de um executável StarCraft II. Se você estiver executando o Windows ou MacOS, basta instalar o SC2 no aplicativo Blizzard.
Você pode instalar o Starcraft II no Linux com vinho, Lutris ou até o Binário do Linux, mas o último é sem cabeça, para que você não possa realmente ver o jogo. O StarCraft II pode ser instalado diretamente no Battlenet, uma vez que for baixado com Lutris. Por padrão, ele será instalado aqui:
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
Em seguida, defina as seguintes variáveis de ambiente (globalmente ou em seu ambiente de desenvolvimento, por exemplo, 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/'
Ao executar o WSL no Windows, o Python-Sc2 detecta WSL por padrão e inicia o Windows Starcraft 2 em vez do Linux Starcraft 2. Se você deseja que o jogo seja jogado no Linux, pode desativar esse comportamento definindo SC2_WSL_DETECT Ambiente variável para "0" . Você pode fazer isso dentro do Python com o seguinte código:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"A versão 1 do WSL não deve exigir nenhuma configuração. Você pode ser solicitado a permitir Python através do seu firewall.
Ao executar o WSL versão 2, você precisa fornecer as seguintes variáveis de ambiente para que seu bot possa se conectar:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
Se você estiver adicionando -os ao seu .BashRC, pode ser necessário exportar suas variáveis de ambiente adicionando:
export SC2CLIENTHOST
export SC2SERVERHOST Você pode encontrar seu Windows IP usando ipconfig /all em PowerShell.exe ou CMD.exe .
Você precisará de mapas para executar a biblioteca.
Downloads oficiais de mapa da Blizzard estão disponíveis na Blizzard/S2client-proto.
Extraia esses mapas para seus respectivos subdiretos no diretório MAPS SC2.
por install-dir/Maps/Ladder2017Season1/
Os mapas que são executados na escada do SC2 AI e na Arena SC2 AI podem ser baixados do Wiki SC2AI e do Wiki Aiarena.
Extraia esses mapas na raiz do diretório MAPS SC2 (caso contrário, os replays de escada não funcionam).
por exemplo, install-dir/Maps/AcropolisLE.SC2Map
Depois de instalar a biblioteca, um executável StarCraft II e alguns mapas, você está pronto para começar. Basta executar um arquivo bot para iniciar uma instância do StarCraft II com o bot em execução. Por exemplo:
python examples/protoss/cannon_rush.pyComo prometido, o trabalhador corre em menos de vinte linhas:
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 )Este é provavelmente o bot mais simples que tem alguma chance realista de vencer o jogo. Eu o corri contra a IA média algumas vezes e, de vez em quando, ele vence.
Você pode encontrar mais exemplos nos examples/ pasta.
A API suporta várias opções para configurar como opera.
unit_command_uses_self_do Defina isso como 'true' se o seu bot estiver emitindo comandos usando self.do(Unit(Ability, Target)) em vez de Unit(Ability, Target) .
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionDefinir isso como True melhora um pouco o desempenho do bot.
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_methodO método de cálculo da distância:
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_step No início do jogo ou em qualquer quadro, você pode definir a etapa do jogo. Isso controla com que frequência o método step do seu bot é chamado.
Não defina isso na função __init__, pois o cliente ainda não terá sido inicializado!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 Você tem perguntas, mas não quer criar um problema? Junte -se ao servidor Starcraft 2 AI Discord Server ou AiaRena.net Discord. Perguntas sobre este repositório podem ser feitas no canal de texto #python. Existem discussões e perguntas sobre a programação do SC2 Bot e este repositório todos os dias.
Se você tiver algum problema, idéias ou feedback, crie um novo problema. Solicitações de tração também são bem -vindas!
As mensagens do Git Commit usem mensagens de estilo imperativo, começam com a letra maiúscula e não têm vírgulas à direita.
Para executar ganchos de pré-compromisso (que executam as importações deformatantes automáticas e automóveis), você pode executar
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push