Eine benutzerfreundliche Bibliothek zum Schreiben von AI-Bots für StarCraft II in Python 3. Das ultimative Ziel ist Einfachheit und Benutzerfreundlichkeit und gleichzeitig die gesamte Funktionalität. Ein wirklich einfacher Arbeiter Rush Bot sollte nicht mehr als zwanzig Codezeilen und nicht zweihundert sein. Diese Bibliothek beabsichtigt jedoch, sowohl Abstraktionen mit hohem als auch niedrigem Niveau zu liefern.
Diese Bibliothek (derzeit) deckt nur die Schnittstelle mit rohen Skripten ab. Zu diesem Zeitpunkt beabsichtige ich nicht, Unterstützung für grafischbasierte Schnittstellen hinzuzufügen.
Die Dokumentation finden Sie hier. Für BOT -Autoren kann es auch von Vorteil sein, direkt auf die Dateien im SC2 -Ordner zu suchen: Bot_ai.py, Unit.py, Units.py, Client.py, Game_info.py und Game_State.py. Die meisten Funktionen in diesen Dateien haben DocStrings, Beispielanwendungen und Typ -Hinweise.
Ich plane, diese Gabel radikaler zu ändern als das Haupt -Repository, um Leistungsvorteile von Bots zu erzielen und Funktionen hinzuzufügen, um neuen Bot -Autoren zu helfen. Dies kann in Zukunft ältere Bots brechen, aber ich versuche, Abschaltwarnungen hinzuzufügen, um eine Benachrichtigung zu geben. Dies bedeutet, dass das von Sentdex erstellte Video -Tutorial veraltet ist und nicht mehr direkt mit dieser Gabel funktioniert.
Eine Liste der laufenden Änderungen und Unterschiede zum Haupttrieb von Dentosal finden Sie hier.
Durch die Installation dieser Bibliothek erklären Sie sich damit einverstanden, an die Bedingungen der KI- und maschinellen Lernlizenz gebunden zu sein.
Für diese Gabel benötigen Sie Python 3.10 oder neuer.
Installieren Sie das PYPI -Paket:
pip install --upgrade burnysc2
oder direkt aus der Entwicklung von Branchen:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
Beide Befehle verwenden den sc2 -Bibliotheksordner, sodass Dentosals und diese Gabel nicht gleichzeitig installiert werden können, es sei denn, Sie verwenden virtuelle Umgebungen oder Gedichte.
Sie benötigen eine ausführbare StarCraft II. Wenn Sie Windows oder MacOS ausführen, installieren Sie einfach SC2 aus der Blizzard App.
Sie können StarCraft II unter Linux mit Wein, Lutris oder sogar dem Linux -Binärer installieren, aber letzteres ist kopflos, sodass Sie das Spiel nicht wirklich sehen können. StarCraft II kann direkt von Battlenet installiert werden, sobald es mit Lutris heruntergeladen wurde. Standardmäßig wird es hier installiert:
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
Legen Sie als nächstes die folgenden Umgebungsvariablen fest (entweder global oder in Ihrer Entwicklungsumgebung, z. B. 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/'
Beim Ausführen SC2_WSL_DETECT WSL in Windows erkennt Python-SC2 WSL standardmäßig und startet Windows Starcraft 2 anstelle von Linux StarCraft. . Sie können dies in Python mit dem folgenden Code tun:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL Version 1 sollte keine Konfiguration erfordern. Möglicherweise werden Sie gebeten, Python durch Ihre Firewall zuzulassen.
Wenn Sie die WSL -Version 2 ausführen, müssen Sie die folgenden Umgebungsvariablen angeben, damit Ihr Bot eine Verbindung herstellen kann:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
Wenn Sie diese zu Ihrem .bashrc hinzufügen, müssen Sie möglicherweise Ihre Umgebungsvariablen exportieren, indem Sie hinzufügen:
export SC2CLIENTHOST
export SC2SERVERHOST Sie finden Ihre Windows -IP mit ipconfig /all von PowerShell.exe oder CMD.exe .
Sie benötigen Karten, um die Bibliothek auszuführen.
Offizielle Downloads der Blizzard-Karte sind bei Blizzard/S2Client-Proto erhältlich.
Extrahieren Sie diese Karten in ihre jeweiligen Unterverzeichnisse im SC2 -Kartenverzeichnis.
z. B. install-dir/Maps/Ladder2017Season1/
Karten, die auf der SC2 AI Ladder und der SC2 AI Arena betrieben werden, können aus dem SC2AI -Wiki und dem Aiurena Wiki heruntergeladen werden.
Extrahieren Sie diese Karten in die Wurzel des SC2 -Kartenverzeichnisses (ansonsten funktioniert Leiter wieder nicht).
zB install-dir/Maps/AcropolisLE.SC2Map
Nach der Installation der Bibliothek, einer ausführbaren StarCraft II und einigen Karten können Sie loslegen. Führen Sie einfach eine Bot -Datei aus, um eine Instanz von StarCraft II mit dem Bot zu starten. Zum Beispiel:
python examples/protoss/cannon_rush.pyWie versprochen eilen Arbeiter in weniger als zwanzig Linien:
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 )Dies ist wahrscheinlich der einfachste Bot, der realistische Chancen hat, das Spiel zu gewinnen. Ich habe es ein paar Mal gegen die mittelgroße KI geführt und ab und zu gewinnt es.
Weitere Beispiele finden Sie in examples/ Ordner.
Die API unterstützt eine Reihe von Optionen, um die Funktionsweise des Betriebs zu konfigurieren.
unit_command_uses_self_do Setzen Sie dies auf "True", wenn Ihr Bot Befehle mit self.do(Unit(Ability, Target)) anstelle von Unit(Ability, Target) ausgibt.
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionWenn Sie dies auf True setzen, verbessert es die Bot -Leistung um ein wenig.
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_methodDie Entfernungsberechnungsmethode:
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_step Im Spielstart oder in jedem Rahmen können Sie den Spielschritt festlegen. Dies steuert, wie oft step Ihres Bots aufgerufen wird.
Legen Sie dies nicht in der Funktion __init__ fest, da der Client noch nicht initialisiert wurde!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 Sie haben Fragen, möchten aber kein Problem erstellen? Schließen Sie sich dem StarCraft 2 AI Discord Server oder Aiena.net Discord Server an. Fragen zu diesem Repository können im Textkanal #Python gestellt werden. Es gibt jeden Tag Diskussionen und Fragen zur SC2 -Bot -Programmierung und dieses Repository.
Wenn Sie Probleme, Ideen oder Feedback haben, erstellen Sie bitte ein neues Problem. Pull -Anfragen sind auch willkommen!
Git-Commit-Nachrichten verwenden Nachrichten im Imperativstyle, beginnen mit Großbuchstaben und haben keine nachfolgenden Kommas.
So können Sie ausführen
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push