commandcenter est un robot IA de StarCraft qui peut jouer à la fois à StarCraft : Broodwar et à StarCraft 2.
commandcenter est écrit en C++ à l'aide de BWAPI et de l'API StarCraft II AI de Blizzard. Il fournit de nombreuses fonctions wrapper autour des deux API qui lui permettent d'exécuter les mêmes fonctionnalités dans les deux jeux via le même code source. Il est rédigé par David Churchill, professeur adjoint d'informatique à l'Université Memorial et organisateur du concours AIIDE StarCraft AI.
commandcenter est basé sur l'architecture d'UAlbertaBot et est destiné à être une architecture facile à utiliser pour vous permettre de modifier, de jouer avec et de créer rapidement votre propre bot. Le bot lui-même ne contient pas grand-chose en termes de stratégie ou de tactiques codées en dur, mais il constitue un bon point de départ pour vous permettre de mettre en œuvre vos propres stratégies pour n'importe quelle course.
commandcenter fournit actuellement les fonctionnalités suivantes :
commandcenter devrait à terme avoir toutes les fonctionnalités d'UAlbertaBot, mais une grande partie de ses fonctionnalités ne sont pas actuellement terminées. Voici une liste à jour des fonctionnalités actuellement manquantes dans commandcenter qui seront bientôt implémentées :
StarCraft BW : Vous devez avoir installé StarCraft : Broodwar version 1.16.1, ainsi que BWAPI.
StarCraft 2 : vous devez disposer d'une version commerciale à jour de StarCraft II pour exécuter le bot. Vous devez également télécharger et installer certaines cartes à utiliser avec le bot, que vous pouvez trouver ici : https://github.com/Blizzard/s2client-proto#downloads. Veuillez noter qu'un mot de passe est fourni sur cette page pour extraire les cartes des fichiers zip.
Le bot est livré avec un fichier de configuration nommé BotConfig.txt dans lequel vous pouvez modifier les ordres de construction, imprimer diverses informations de débogage à l'écran et définir certains paramètres du bot. Vous pouvez définir plusieurs ordres de build dans la section « Stratégies » du fichier et choisir la stratégie nommée à mettre en œuvre lorsque le bot joue une course spécifique. Les noms d'unités dans l'ordre de construction sont sensibles à la casse et doivent être exactement tels qu'ils apparaissent dans le jeu, sans espaces. Certaines options du fichier de configuration ne sont actuellement pas implémentées, comme l'option KiteWithRangedUnits.
Veuillez noter que ce fichier de configuration est au format JSON et que le bot ne s'exécutera que s'il est bien formaté en JSON. Le fichier de configuration doit se trouver dans le même répertoire que commandcenter .exe pour que le bot fonctionne correctement. Si vous avez commis une erreur dans la syntaxe JSON et que vous ne parvenez pas à la trouver par vous-même, vous pouvez utiliser un validateur JSON en ligne pour vérifier pour vous.
Par défaut, lorsque vous exécutez commandcenter .exe, il jouera comme une course aléatoire contre une course aléatoire intégrée à SC2 Easy AI. Vous pouvez modifier les courses jouées dans le fichier de configuration via les options "BotRace" et "EnemyRace". Vous pouvez également modifier la carte à jouer en spécifiant l'option "MapFile". Veuillez noter que l'option MapFile est relative à votre répertoire de cartes StarCraft II, qui se trouve par défaut dans votre StarCraft_Install_Directory/maps/, et le bot ne s'exécutera pas sans spécifier un fichier de carte valide.
Si le bot plante ou fait d'autres choses désagréables, soyez patient pendant que je le rends plus stable :)
Avec ces étapes, vous devriez pouvoir créer et installer l'API SC2 et l'inclure dans commandcenter . Il a été testé avec succès pour aba2d3813571c344090f3de5b58a5c912cd5acb3, donc si les instructions d'installation ci-dessous ne fonctionnent pas, consultez cette version de l'API SC2
$ git checkout aba2d3813571c344090f3de5b58a5c912cd5acb3 .
et répétez les instructions.
$ 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
Si vous connaissez l'architecture d'UAlbertaBot, la logique du commandcenter est assez similaire. La plus grande différence est que les informations relatives à la carte, à la localisation de la base, etc. ne sont plus accessibles globalement. Ces données résident désormais dans la classe principale CCBot et doivent être accessibles via une référence à l'instance de cette classe. Pour cette raison, la plupart des classes du commandcenter portent avec elles une référence à l'objet CCBot principal du bot, à partir duquel toutes les informations, observations et requêtes liées au jeu peuvent être effectuées.
Un guide de développement détaillé sera bientôt disponible, mais veuillez vous référer au wiki UAlbertaBot pour l'instant car l'architecture est très similaire (moins le planificateur d'ordres de construction et le simulateur de combat).