Una biblioteca fácil de usar para escribir bots AI para Starcraft II en Python 3. El objetivo final es la simplicidad y la facilidad de uso, al tiempo que preserva toda la funcionalidad. Un Bot Rush Worker realmente simple no debería ser más de veinte líneas de código, no doscientos. Sin embargo, esta biblioteca tiene la intención de proporcionar abstracciones de alto y bajo nivel.
Esta biblioteca (actualmente) cubre solo la interfaz con guión sin procesar. En este momento no tengo la intención de agregar soporte para interfaces basadas en gráficos.
La documentación se puede encontrar aquí. Para los autores de BOT, mirar directamente los archivos en la carpeta SC2 también puede ser de beneficio: bot_ai.py, unit.py, units.py, client.py, game_info.py y game_state.py. La mayoría de las funciones en esos archivos tienen documentos, usos de ejemplo y escriben sugerencias.
Estoy planeando cambiar esta bifurcación más radicalmente que el repositorio principal, para los beneficios de rendimiento de BOT y agregar funciones para ayudar a los nuevos autores Bot. Esto puede romper los bots más antiguos en el futuro, sin embargo, trato de agregar advertencias de deprecación para notificar una notificación. Esto significa que el video tutorial realizado por SentDex está desactualizado y ya no funciona directamente con esta bifurcación.
Para obtener una lista de cambios y diferencias continuas en el repositorio principal de la densaal, consulte aquí.
Al instalar esta biblioteca, acepta estar sujeto a los términos de la AI y la licencia de aprendizaje automático.
Para este tenedor, necesitará Python 3.10 o más nuevo.
Instale el paquete PYPI:
pip install --upgrade burnysc2
o directamente de la rama de desarrollo:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
Ambos comandos utilizarán la carpeta de la biblioteca sc2 , por lo que no podrá tener dentasal y esta bifurcación instalada al mismo tiempo, a menos que use entornos virtuales o poesía.
Necesitará un ejecutable de StarCraft II. Si está ejecutando Windows o MacOS, simplemente instale SC2 desde la aplicación Blizzard.
Puede instalar Starcraft II en Linux con vino, Lutris o incluso en el binario de Linux, pero este último no tiene cabeza, por lo que no puedes ver el juego. Starcraft II se puede instalar directamente desde Battlenet una vez que se descarga con Lutris. Por defecto, se instalará aquí:
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
A continuación, establezca las siguientes variables de entorno (ya sea a nivel mundial o dentro de su entorno de desarrollo, por ejemplo, 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/'
Cuando se ejecuta WSL en Windows, Python-SC2 detecta WSL de forma predeterminada e inicia Windows Starcraft 2 en lugar de Linux Starcraft 2. Si desea que el juego se juegue en Linux, puede deshabilitar este comportamiento configurando SC2_WSL_DETECT Environment Variable en "0" . Puede hacer esto dentro de Python con el siguiente código:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL versión 1 no debe requerir ninguna configuración. Es posible que se le solicite que permita a Python a través de su firewall.
Al ejecutar WSL versión 2, debe suministrar las siguientes variables de entorno para que su bot pueda conectarse:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
Si los está agregando a su .BASHRC, es posible que deba exportar sus variables de entorno agregando:
export SC2CLIENTHOST
export SC2SERVERHOST Puede encontrar su IP de Windows usando ipconfig /all desde PowerShell.exe o CMD.exe .
Necesitará mapas para ejecutar la biblioteca.
Las descargas oficiales de mapa de Blizzard están disponibles en Blizzard/S2Client-Proto.
Extraiga estos mapas en sus respectivos subdirectorios en el directorio de mapas SC2.
por ejemplo install-dir/Maps/Ladder2017Season1/
Los mapas que se ejecutan en la escalera SC2 AI y SC2 AI Arena se pueden descargar del SC2AI Wiki y la Wiki de Aiarena.
Extraiga estos mapas en la raíz del directorio de mapas SC2 (de lo contrario, las repeticiones de la escalera no funcionarán).
por ejemplo, install-dir/Maps/AcropolisLE.SC2Map
Después de instalar la biblioteca, un ejecutable de Starcraft II y algunos mapas, está listo para comenzar. Simplemente ejecute un archivo BOT para encender una instancia de StarCraft II con el bot en ejecución. Por ejemplo:
python examples/protoss/cannon_rush.pySegún lo prometido, los trabajadores se apresuran en menos de veinte líneas:
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 es probablemente el bot más simple que tiene posibilidades realistas de ganar el juego. Lo he ejecutado contra la IA mediana varias veces, y de vez en cuando, gana.
Puede encontrar más ejemplos en los examples/ carpeta.
La API admite una serie de opciones para configurar cómo funciona.
unit_command_uses_self_do Establezca esto en 'verdadero' si su bot está emitiendo comandos usando self.do(Unit(Ability, Target)) en lugar de Unit(Ability, Target) .
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionEstablecer esto en verdadero mejora el rendimiento de Bot por un poco.
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_methodEl método de cálculo de distancia:
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_step En el inicio del juego o en cualquier cuadro en realidad, puedes establecer el paso del juego. Esto controla la frecuencia con la que se llama el método step de su bot.
¡No establezca esto en la función __init__ ya que el cliente aún no se habrá inicializado!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 ¿Tienes preguntas pero no quieres crear un problema? Únase al servidor Starcraft 2 AI Discord o al servidor de discordia AIARENA.NET. Las preguntas sobre este repositorio se pueden hacer en el canal de texto #Python. Hay discusiones y preguntas sobre la programación BOT SC2 y este repositorio todos los días.
Si tiene algún problema, ideas o comentarios, cree un nuevo problema. ¡Las solicitudes de extracción también son bienvenidas!
Los mensajes de confirmación de git usan mensajes de estilo imperativo, comienzan con una letra mayúscula y no tienen comas finales.
Para ejecutar ganchos previos al compromiso (que ejecutan autoformating y importaciones de autosort) que puede ejecutar
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push