commandcenter ist ein StarCraft-KI-Bot, der sowohl StarCraft: Broodwar als auch StarCraft 2 spielen kann.
commandcenter ist in C++ unter Verwendung von BWAPI und Blizzards StarCraft II AI API geschrieben. Es bietet viele Wrapper-Funktionen für beide APIs, die es ihm ermöglichen, in beiden Spielen über denselben Quellcode die gleiche Funktionalität auszuführen. Es wurde von David Churchill geschrieben, Assistenzprofessor für Informatik an der Memorial University und Organisator des AIIDE StarCraft AI Competition.
commandcenter basiert auf der Architektur von UAlbertaBot und soll eine benutzerfreundliche Architektur sein, mit der Sie schnell Ihren eigenen Bot ändern, damit spielen und erstellen können. Der Bot selbst enthält nicht viele fest codierte Strategien oder Taktiken, bietet Ihnen jedoch einen guten Ausgangspunkt für die Umsetzung Ihrer eigenen Strategien für jedes Rennen.
commandcenter bietet derzeit die folgenden Funktionen:
commandcenter sollte irgendwann über die gesamte Funktionalität von UAlbertaBot verfügen, viele seiner Funktionen sind jedoch derzeit noch nicht fertiggestellt. Hier ist eine aktuelle Liste der derzeit im commandcenter fehlenden Funktionen, die bald implementiert werden:
StarCraft BW: Sie müssen StarCraft: Broodwar Version 1.16.1 sowie BWAPI installiert haben.
StarCraft 2: Sie müssen eine aktuelle Einzelhandelsversion von StarCraft II installiert haben, um den Bot auszuführen. Sie müssen außerdem einige Karten herunterladen und installieren, um sie mit dem Bot verwenden zu können. Diese finden Sie hier: https://github.com/Blizzard/s2client-proto#downloads. Bitte beachten Sie, dass auf dieser Seite ein Passwort zum Extrahieren der Karten aus den ZIP-Dateien angegeben ist.
Der Bot wird mit einer Konfigurationsdatei namens BotConfig.txt geliefert, in der Sie Build-Aufträge ändern, verschiedene Debug-Informationen auf dem Bildschirm ausgeben und einige Bot-Parameter festlegen können. Sie können im Abschnitt „Strategien“ der Datei mehrere Build-Reihenfolgen definieren und auswählen, welche benannte Strategie implementiert werden soll, wenn der Bot ein bestimmtes Rennen spielt. Bei den Einheitennamen in der Baureihenfolge muss die Groß-/Kleinschreibung beachtet werden und sie müssen genau so sein, wie sie im Spiel erscheinen, ohne Leerzeichen. Einige der Optionen in der Konfigurationsdatei sind derzeit nicht implementiert, beispielsweise die Option KiteWithRangedUnits.
Bitte beachten Sie, dass diese Konfigurationsdatei im JSON-Format vorliegt und der Bot nur ausgeführt werden kann, wenn es sich um ein gut formatiertes JSON handelt. Die Konfigurationsdatei muss sich im selben Verzeichnis wie commandcenter .exe befinden, damit der Bot ordnungsgemäß ausgeführt werden kann. Wenn Ihnen ein Fehler in der JSON-Syntax unterlaufen ist und Sie ihn nicht selbst finden können, können Sie zur Überprüfung einen Online-JSON-Validator verwenden.
Wenn Sie commandcenter .exe ausführen, wird es standardmäßig als Zufallsrennen gegen ein in SC2 Easy AI integriertes Zufallsrennen abgespielt. Sie können in der Konfigurationsdatei über die Optionen „BotRace“ und „EnemyRace“ ändern, welche Rennen gespielt werden. Sie können auch ändern, welche Karte abgespielt werden soll, indem Sie die Option „MapFile“ angeben. Bitte beachten Sie, dass die MapFile-Option relativ zu Ihrem StarCraft II-Kartenverzeichnis ist, das sich standardmäßig in Ihrem StarCraft_Install_Directory/maps/ befindet, und dass der Bot nicht ausgeführt werden kann, ohne eine gültige Kartendatei anzugeben.
Wenn der Bot abstürzt oder andere unangenehme Dinge tut, haben Sie bitte Geduld, während ich ihn stabiler mache :)
Mit diesen Schritten sollten Sie in der Lage sein, die SC2-API zu erstellen, zu installieren und in commandcenter einzubinden. Es wurde erfolgreich für aba2d3813571c344090f3de5b58a5c912cd5acb3 getestet. Wenn die Installationsanweisungen unten nicht funktionieren, testen Sie diese Version der SC2-API
$ git checkout aba2d3813571c344090f3de5b58a5c912cd5acb3 .
und wiederholen Sie die Anweisungen.
$ git clone --recursive https://github.com/Blizzard/s2client-api && cd s2client-api
$ mkdir build && cd build
$ cmake ../
$ make
# Assuming that you are located in the 'build' directory
# after you finished the previous step
$ cd ../
# Install SC2 API headers
$ sudo mkdir -p /opt/local/include
$ sudo cp -R include/{sc2api,sc2renderer,sc2utils} /opt/local/include
$ sudo cp -R build/generated/s2clientprotocol /opt/local/include
# Install protobuf headers
$ sudo cp -R contrib/protobuf/src/google /opt/local/include/sc2api
# Install SC2 API libraries
$ sudo mkdir -p /opt/local/lib/sc2api
$ sudo cp build/bin/{libcivetweb,libprotobuf,libsc2api,libsc2lib,libsc2protocol,libsc2utils}.a /opt/local/lib/sc2api
$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .
$ make
Wenn Sie mit der Architektur von UAlbertaBot vertraut sind, ist die Logik von commandcenter ziemlich ähnlich. Der größte Unterschied besteht darin, dass Informationen zur Karte, zum Basisstandort usw. nicht mehr global zugänglich sind. Diese Daten befinden sich jetzt in der CCBot-Hauptklasse und müssen über einen Verweis auf die Instanz dieser Klasse abgerufen werden. Aus diesem Grund enthalten die meisten Klassen im commandcenter einen Verweis auf das Haupt-CCBot-Objekt des Bots, von dem aus alle spielbezogenen Informationen, Beobachtungen und Abfragen vorgenommen werden können.
Ein ausführlicher Entwicklungsleitfaden wird in Kürze verfügbar sein, aber schauen Sie sich vorerst bitte das UAlbertaBot-Wiki an, da die Architektur sehr ähnlich ist (abzüglich des Build-Reihenfolge-Planers und des Kampfsimulators).