Giter Site home page Giter Site logo

commandcenter's Introduction

CommandCenter: AI Bot for Broodwar and Starcraft II

CommandCenter is a StarCraft AI bot that can play both StarCraft: Broodwar and StarCraft 2.

CommandCenter Screenshot

CommandCenter is written in C++ using BWAPI and Blizzard's StarCraft II AI API. It provides many wrapper functions around both APIs that allow it to perform the same functionality in both games via the same source code. It is written by David Churchill, Assistant Professor of Computer Science at Memorial University, and organizer of the AIIDE StarCraft AI Competition.

CommandCenter is based on the architecture of UAlbertaBot, and is intended to be an easy to use architecture for you to quickly modify, play with, and build your own bot. The bot itself does not contain much in the way of hard-coded strategy or tactics, however it provides a good starting point for you to implement your own strategies for any race.

CommandCenter currently provides the following features:

  • Plays both Starcraft games with the same source code
  • Plays all 3 races with generalized micro controllers for combat units
  • Performs online map analysis, extracting information such as base locations and expansions
  • Keeps track of all previously seen enemy units and their last known locations on the map
  • Has a WorkerManager which manages resource gathering and worker allocation / buiding
  • Is able to carry out predefined build-orders written in a configuration file
  • Allows you to easily create your own build-orders and modify them on the fly in-game
  • Contains a building placement algorithm, finding the closest buildable location to a given position for a given building
  • Scouts the map with a worker unit, discovering where the enemy base is located
  • Once a specific condition has been reached (having 12 combat units, by default), it will commence an attack, sending waves of units at the enemy base
  • Squads can be formed, consisting of multiple units following a specific order such as attack or defend a given location

CommandCenter should eventually have all of the functionality of UAlbertaBot, however much of its features are not currently completed. Here is an up-to-date list of features currently missing from CommandCenter that will be implemented soon:

  • Only units and basic buildings can be constructed via the ProductionManager. No add-ons, research, or upgrades yet.
  • There is no automatic build-order planning system
  • There is no combat simulation package for predicting combat battle victory
  • The bot only plays 1v1, and will have undefined behavior / crash if played against multiple enemies or on teams

Download and Run CommandCenter

StarCraft BW: You must have StarCraft: Broodwar version 1.16.1 installed, as well as BWAPI.

StarCraft 2: You must have an up-to-date retail version of StarCraft II installed to run the bot. You must also download and install some maps to use with the bot, which you can find here: https://github.com/Blizzard/s2client-proto#downloads. Please note that there is a password provided on that page to extract the maps from the zip files.

The bot comes with a configuration file named BotConfig.txt in which you can modify build orders, print various debug information to the screen, and set some bot parameters. You can define multiple builds orders in the 'Strategies' section of the file, and choose which named strategy to implement when the bot plays a specific race. Unit names in the build-order are case sensitive, and must be exactly how they appear in-game with no spaces. Some of the options in the configuration file are currently not implemented, such as the KiteWithRangedUnits option.

Please note that this config file is in JSON format, and the bot will not run unless it is well-formatted JSON. The configuration file must be in the same directory as CommandCenter.exe in order for the bot to run correctly. If you have made an error in the JSON syntax and can't find it on your own, you can use an online JSON Validator to check for you.

By default when you run CommandCenter.exe, it will play as Random race vs. a Random race built-in SC2 Easy AI. You can modify which races are played in the configuration file via the "BotRace" and "EnemyRace" options. You can also modify which map to be played by specifying the "MapFile" option. Please note that the MapFile option is relative to your StarCraft II maps directory, which by default is located in your StarCraft_Install_Directory/maps/, and the bot will not run without specifying a valid map file.

If the bot crashes or does other nasty things, please bear with me while I make it more stable :)

Developer Install / Compile Instructions (Windows)

  • Download and install Visual Studio 2017
  • To play BW, you must download and install StarCraft BW v1.16.1 as well as BWAPI
  • To play SC2, you must download and install the StarCraft II AI API. The easiest way to do this is to download the Precompiled Libraries at the bottom of the page, and simply extract them to a folder on your PC. If you are getting the SC2API via cloning the Blizzard github repo and compiling it from scratch, you may need to point VS to different directories for include and lib than the ones described below.
  • Clone this git repository to a folder on your PC
  • Open "CommandCenter/vs/CommandCenter.sln" in VS2017
  • If you compile the CommandCenter project with the x64 Platform, it will compile the SC2 bot
  • If you compile the CommandCenter project with the x86 or Win32 Platform, it will compile the BW bot
  • Set the VS Project include and lib folders to point to the directories
    • Right click the CommandCenter project in VS2017
    • Select "Properties"
    • Select the correct configuration that you want to build in the top left ("Release" or "Debug")
    • Select the target platform you want to build (x64 = SC2, Win32 = BW)
    • Select "VC++ Directories" on the left
    • Select the "Include Directories" option in the table on the right
    • Click the dropdown arrow on the right and click Edit...
    • Modify the existing directory entry to point to your (SC2API|BWAPI)/include directory
    • Select the "Library Directories" option in the table on the right
    • Click the dropdown arrow on the right and click Edit...
    • Modify the existing directory entry to point to your (SC2API|BWAPI)/lib directory
  • From the "Build" menu, click "Build Solution"
  • The binary "CommandCenter_API.exe" should appear in the CommandCenter/bin/ directory
  • Run the CommandCenter bot by either:
    • Double clicking the executable in the CommandCenter/bin/ directory
    • Running the program from the console
    • Click "Local Windows Debugger" in VS to launch the program from within VS. To do this, you need to set the "Working Directory" option under "Debugging" to "$(ProjectDir)/../bin/" (I don't know why this option won't save)
  • If you are running the BW version of the bot, you must then start BW via Chaoslauncher with BWAPI injected
  • The CommandCenter/bin/BotConfig.txt file must be in the same directory as the .exe to run properly

Developer Install / Compile Instructions (Linux and OS X)

With these steps you should be able to build and install the SC2 API and include it into CommandCenter. It has been tested successfully for aba2d3813571c344090f3de5b58a5c912cd5acb3, so if the install instructions below don't work checkout that version of the SC2 API

$ git checkout aba2d3813571c344090f3de5b58a5c912cd5acb3 .

and repeat the instructions.

  • Build SC2 API project
$ git clone --recursive https://github.com/Blizzard/s2client-api && cd s2client-api
$ mkdir build && cd build
$ cmake ../
$ make
  • Install the SC2 API libraries and headers to your system
# 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
  • Build the bot
$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .
$ make

Bot Development

If you are familiar with the architecture of UAlbertaBot, the logic of CommandCenter is quite similar. The biggest difference is that information relating to the map, baselocation, etc are no longer globally accessible. This data now lives inside the main CCBot class, and must be accessed via a reference to the instance of that class. Because of this, most classes in CommandCenter carry with them a reference to the bot's main CCBot object, from which all game related information, observations, and queries can be made.

An in-depth development guide will be coming soon, but please refer to the UAlbertaBot wiki for now since the architecture is so similar (minus the build order planner and combat simulator).

commandcenter's People

Contributors

alkurbatov avatar archiatrus avatar artaseify avatar davechurchill avatar friduric avatar lrcritch avatar pimmen avatar richoux avatar solinas avatar teachmeprogramming avatar vors avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

commandcenter's Issues

localtime_s, vsnprintf_s unsupported on g++/clang++

As seen here, *_s is only available if __STDC_LIB_EXT1__ is defined by the implementation and if __STDC_WANT_LIB_EXT1__ is defined to 1 before including ctime. These are unfortunately not available to me on g++/clang++. Is there a solution to this?

sc2::Unit::tag truncation

In "UnitData.cpp" you are casting "sc2::Unit::tag" to an int when you operate with it. This value is a 64-bit integer, and we DO use the bits in the upper word. By truncating it to a 32-bit integer you may be introducing tag collisions.

I suggest you use the same 64-bit integer type the api library does:
typedef uint64_t Tag;

Feature Request : match result api

I am developing the starcraft2 ladder platform based on the commandcenter and I find it it hard to get the match result.
Could you please expose the match result api? Thanks.

Zerg: exclude queens from attack group

Usually queens are not used for attack purposes especially at the early stage of the game because of quite slow move speed. The bot shouldn't count queens when he checks attack conditions neither include queens into attack group.

However some rare strategies exists which uses large number of queens at the battleground. Dunno should it be supported or not.

Problems compiling CommandCenter BOT on Linux (ubuntu 17.04, debian 9 and Fedora26).

After running "cmake .", in the compilation process:

.... commandcenter/src/BuildingPlacer.cpp: In member function 'sc2::Point2D BuildingPlacer::getRefineryPosition()': ........./commandcenter/src/BuildingPlacer.cpp:244:33: error: invalid initialization of reference of type 'const sc2::Unit&' from expression of type 'const sc2::Unit* '
if (!Util::IsGeyser(unit))

There are also other problems in BuildingPlacer.cpp with request for member 'pos' in 'unit' pointer.


src/CMakeFiles/CommandCenter.dir/build.make:278 with failure of the instructions for the target


Thank you very much for your work and sorry for my bad english.

Question: Set the "Working Directory" option properly in VS2017

In your Compile Instructions, you wrote "Click "Local Windows Debugger" in VS to launch the program from within VS. To do this, you need to set the "Working Directory" option under "Debugging" to "$(ProjectDir)/../bin/" (I don't know why this option won't save)". Is it because your /vs/CommandCenter.vcxproj.user was not pushed due to the .gitignore ? Can a simple git add CommandCenter.vcxproj.user -f will solve this issue ?

python port

Hello, David!

I'm curious about your thoughts on https://github.com/deepmind/pysc2 and an option to align commandcenter-based AI and the pysc2 training agents, for some interop maybe?
My interest in this question arises from the fact that I'd love to use awesome primitives you built in the commandcenter, but at the same time, I'd love to have the flexibility to plug in all the RL training stuff that deepmind team provided. Also doing it casually in Python would be somewhat easier than in c++ for me and possibly some other sc2 enthusiasts.

support of machine learning library

because it is much more efficient to use other language(ie. python) to write some machine learning code on top of some library(ie. tensorflow), but the official AIIDE tournament machine seems do not support such python library.
so I has several questions:

  1. do you have plan to do such things in future?
  2. is the submitted AI folder has space limitation? for example, can i put a pre-config python version in the AI folder which may occupy about 30m.
  3. other recommended alternative?

Thanks

"corecrt.h" not found?

I was trying my hand at creating AI for the first time. after following the guide for a while, when I was trying to build the solution like the guide was said. instead, it gives me a bunch of error saying

Cannot open include file: 'corecrt.h': No such file or directory(compiling source file ..\src*.cpp)

the asterisk means the name of some files in the project. I'm using the precompiled library, since compiling myself seems bleak. It keeps giving me something about submodules and errors.
Does anyone have a suggestion for what I may have done wrong?

asking for advice

Hello and Happy holidays to everyone.
This is not issue, i would just like to ask you for advice.
I want to use this CommandCenter for deep learning research, and i want to train neural network for commanding squad of units in battle. I would like to ask you if i need to use some framework for this, and if you know about some helpful programs that i could use.
I would also like to ask you for any general or specific advices, you could give me about this.

Marry Christmas and Happy New Year.

How do I play against my own AI ?

This is not exactly an issue. I'm finally midway finishing my AI. By somehow follow UAlbertaBot wiki as suggested on the bottom page.
And I want to test it, not against SC2 Computer / BOT. but, against a player (Non-AI) or at least I can test the AI my self.
So, is there any documentation on what to do? or something to change on the code side.
if there is one already and I'm somehow missing it, I'm sorry.

And Thank you in advance.

How to get the outcome of a match?

I am developing a StarCraft2 Ladder platform based on the commandcenter, which lets bots play automatically. However, I cannot find the api of getting the match result. How can I get the outcome of a match?
Thanks.

ubuntu build fail

I tried to build commandcenter in ubuntu16.04 following the steps provided in the readme, However, after I run the make command, countless errors occurred:
Here I list one of them:
/opt/local/lib/sc2api/libsc2protocol.a(data.pb.cc.o):(.rodata._ZTVN14SC2APIProtocol11AbilityDataE[_ZTVN14SC2APIProtocol11AbilityDataE]+0xb0): undefined reference to `google::protobuf::Message::SpaceUsed() const'

How can I solve that? Should I install the specific version of protobuf and rebuild the sc2api?
My cmake version:3.5.1
My g++ version: 5.4.0
My operation system (ubuntu) is newly installed.

commandcenter build failure

I'm building this package and I got some errors.
Enviroment : MacOS Sierra 10.12.6

Build the bot
$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .
$ make
$ make
[  2%] Building CXX object src/CMakeFiles/CommandCenter.dir/BaseLocation.cpp.o
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
/opt/local/include/s2clientprotocol/sc2api.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/sc2api.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/sc2api.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:31:
/opt/local/include/s2clientprotocol/common.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/common.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/common.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^
/opt/local/include/s2clientprotocol/common.pb.h:966:27: error: too many arguments to function call, expected 0, have 1
  return data_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/data.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/data.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^
/opt/local/include/s2clientprotocol/data.pb.h:1289:32: error: too many arguments to function call, expected 0, have 1
  return link_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1367:34: error: too many arguments to function call, expected 0, have 1
  return button_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1421:36: error: too many arguments to function call, expected 0, have 1
  return friendly_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1475:29: error: too many arguments to function call, expected 0, have 1
  return hotkey_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1982:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:2541:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:2719:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:33:
/opt/local/include/s2clientprotocol/debug.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/debug.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [src/CMakeFiles/CommandCenter.dir/BaseLocation.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/CommandCenter.dir/all] Error 2
make: *** [all] Error 2
Chrisui-MacBook-Pro:commandcenter Chris$ make
[  2%] Building CXX object src/CMakeFiles/CommandCenter.dir/BaseLocation.cpp.o
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
/opt/local/include/s2clientprotocol/sc2api.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/sc2api.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/sc2api.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^


In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:31:
/opt/local/include/s2clientprotocol/common.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/common.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/common.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^

/opt/local/include/s2clientprotocol/common.pb.h:966:27: error: too many arguments to function call, expected 0, have 1
  return data_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/data.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
/opt/local/include/s2clientprotocol/data.pb.h:19:2: error: regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
 ^
/opt/local/include/s2clientprotocol/data.pb.h:1289:32: error: too many arguments to function call, expected 0, have 1
  return link_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1367:34: error: too many arguments to function call, expected 0, have 1
  return button_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1421:36: error: too many arguments to function call, expected 0, have 1
  return friendly_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1475:29: error: too many arguments to function call, expected 0, have 1
  return hotkey_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^

In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:1982:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:2541:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:32:
/opt/local/include/s2clientprotocol/data.pb.h:2719:27: error: too many arguments to function call, expected 0, have 1
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
         ~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/google/protobuf/arenastring.h:225:3: note: 'GetNoArena' declared here
  inline const ::std::string& GetNoArena() const { return *ptr_; }
  ^
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.cpp:1:
In file included from /Users/Chris/Documents/ML/commandcenter/src/BaseLocation.h:5:
In file included from /opt/local/include/sc2api/sc2_api.h:3:
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:
In file included from /opt/local/include/sc2api/sc2_unit.h:6:
In file included from /opt/local/include/sc2api/sc2_proto_interface.h:5:
In file included from /opt/local/include/s2clientprotocol/sc2api.pb.h:33:
/opt/local/include/s2clientprotocol/debug.pb.h:17:2: error: This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
 ^
/opt/local/include/s2clientprotocol/debug.pb.h:18:2: error: incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers.  Please
 ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

20 errors generated.
make[2]: *** [src/CMakeFiles/CommandCenter.dir/BaseLocation.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/CommandCenter.dir/all] Error 2
make: *** [all] Error 2

BuildOrder: Terran Orbital Command

Currently one can specify OrbitalCommand as an instruction of OpeningBuildOrder. That leads to fun results:

  • The bot reserves 550 minerals for construction (this looks like sc2api bug because it tells exact mineral cost for the building, currently it is Command Center (400) + Morph Orbital Command (150)).
  • The building itself is never constructed (probably because the bot don't know how to build expansions or because it can't select a proper placement) however the building itself is added into the building queue and the overall build process is slowed down due to large mineral reserve.

It seems that either request to build Orbital Command should be automagically split into 'Create Command Center + Morph to Orbital) or that the bot should restrict such commands in general.
The latter looks more natural to me. In this case one should explicitly request morphing of command center.

I believe the bot behaves the same for the zerg's buildings.

Bug with CatalystLE: unable to find all base locations

The bot is only able to find 12 of the 14 base locations on CatalystLE. Due to this error, it is unable to find its start location. Its start location is thus null and the bot chrashes later.
edit: i got similar issues on other new maps of ladder 2018 Season 1

Bot doesn't check if a Refinery is on top of Geyser in BuildingPlacer

Seems like the bot can't execute this strategy because he can't build reapers:
"3Rax_Reapers" : { "Race" : "Terran", "OpeningBuildOrder" : ["SCV", "SupplyDepot", "SCV", "SCV", "SCV", "Refinery", "SCV", "Barracks", "SCV", "Refinery", "SCV", "Barracks", "SCV", "Barracks", "SCV", "SupplyDepot", "SCV", "SupplyDepot", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper", "Reaper"] },
And sometimes he builds extra refinery, sometimes not, also not clear why.

command center stoped working during initialization of units

Hi, i am trying to make command center work on windows, but when the game starts it trows error.
Could someone help me please?

if I run CommandCenter_d.exe then

WaitJoinGame finished successfully
vc\tools\msvc\14.10.25017\include\vector
line 1754
expression: vector subscript out of range

if run CommandCenter.sln by local windows debuger
then
WaitJoinGame finished successfully
stdthrow.cpp
line 1760
CommandCenter_d.exe has triggered a breakpoint. occurred

Unhandled exception at 0x00007FF7FC27DCBC in CommandCenter_d.exe: An invalid parameter was passed to a function that considers invalid parameters fatal. occurred

if I run CommandCenter.sln by local windows debuger again
then
did not get a join game response
error in returning observation
the main response is of type 12
there is no response/observation message
no error strings in result

Change game speed

Sometimes it is useful to slow down the game and look at the decisions the bot is making however the game is always really fast.
Probably we should make a configurable gamespeed parameter in BotConfig.txt similar to the original game (i.e. fast, very fast).

Currently I don't know how that should be done in a proper way. The following approach works for me:

    while (coordinator.Update()) {
        // Slow down game speed for better look & feel while making experiments.
        sc2::SleepFor(15);
    }

Probably higher step value will do the same?

Please finish getNextExpansion()

// TODO: fix this so we can actually expand
//return m_bot.Bases().getNextExpansion(Players::Self);

in BuildingManager.cpp

note: i've been banging my head against the wall trying to figure out where a valid location for the next hatchery, etc...

maybe someone else can figure this out so i can go back to combat coding. =] thanks.

Wrong resource location calculation

This pull request is similar in nature to this one:
#60

The problem is that the calculated resource locations are a bit off, so it causes problems with expansion (i.e. it can't build new geysers).

The calculations for starting player bases seem to be correct however.
A picture paints a thousand words.

https://imgur.com/a/0rOxk

Bot always go scout as game starts

I don't know how to change this option.

Clearly, the BotConfig.txt:
"ScoutCondition" : [ ["Self", "Pylon"], ">", [ 0 ] ],
but probe always go scout as the game starts.

BotConfig example

I have several suggestion regarding the bot's config:

a. BotConfigs has .txt extension by some reason while it is .json. Could it be renamed? The .txt extension confuses IDEs and disables syntax highlight, making it easier to make a mistake.

b. Rename BotConfig.txt into Botconfig.example.txt (or something like it). The motivation: this config is just a general example. As a user of this project I have several different settings, especially regarding map path and have to rebase the settings on each change.
The example should be renamed manually (or during build) into BotConfig.txt while BotConfig.txt must be ignored in .gitignore.
This approach allows to keep local changes outside of git control while still receive the latest updates. Just for convenience.

Invalid Map Path after first installation.

After following the steps on Windows, when I run the .exe, I get this error:

Launched SC2 (C:\Program Files (x86)\StarCraft II\Versions\Base56787\SC2_x64.exe), PID: 5192
Waiting for connection...
Connected to 127.0.0.1:8167
CreateGame request returned an error code: Invalid Map Path
CreateGame request returned error details: map_path file doesn't exist.
Assertion failed: is_game_created, file c:\projects\s2client-api\src\sc2api\sc2_coordinator.cc, line 511 

In the BotConfig.txt, I have this :

...
"Game Info" :
    {
        "BotRace"                   : "Random",
        "EnemyRace"                 : "Random",
        "MapFile"                   : "InterloperLE.SC2Map",
        "StepSize"                  : 1
    },
... 

I already have this map in C:\Program Files (x86)\StarCraft II\Maps\Ladder2017Season3, should it be elsewhere ?

Can not morph hatchery to lair

Now I try to morph hatchery to lair. But, It dosen't work properly.
I also insert the word "Lair" in "BotConfig.txt"file, the program always skip this build.
I don't know why this program skip morph lair.
Also I already check conditions for morph lair(builting sporning pool, 150 minerals and 100 gas).
How can I made hatchery morph to lair??
Can you give me any hint to solve this problem??

Uncaught exception, key not found.

Hey, so I'm running the bot. I'm using the BotConfig and all is fine. And then suddenly, BAMM.

libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: map::at:  key not found

And that's that. I'm on OSX.

Zerg: Overlord scouting

Currently CommandCenter uses only workers for scouting tasks. However zergs gameplay is reacher:
a. An overlord could be used to scout the enemies position before (instead?) a worker.
b. When current map contains > 2 players starting points the bot should send an overlord to one direction ( e.g, clockwise) and a worker to another in order to find the enemy faster.

Probably the overlord scouting should be optional and enabled via special flag (as it is a bit risky esoecially against terran) or even used instead of worker scouting (not sure).

Cmdline parameters

Current bot implementation allows to pass cmdline parameters to sc2api directly:

   if (!coordinator.LoadSettings(argc, argv)) 
    {
        std::cout << "Unable to find or parse settings." << std::endl;
        return 1;
    }

Is it intended? I can pass things like '--help', 'map_path', 'realtime' and so on while the same parameters are duplicated in BotConfig.txt and some are discarded in the code below. Looks confusing.

Probably better solution will be to limit number of parameters delivered to sc2api::Coordinator, e.g. pass only program name:

    sc2::Coordinator coordinator;
    coordinator.LoadSettings(1, argv);

Error compiling for ubuntu linux (cmake linking commandcenter).

Hi. At the end of the compilation process with cmake fails in linking executable. A sample of the error:

.....
[ 94%] Building CXX object src/CMakeFiles/CommandCenter.dir/WorkerManager.cpp.o
/home/juanj/apps/s2client-api/commandcenter/src/WorkerManager.cpp: In member function ‘void WorkerManager::drawWorkerInformation()’:
/home/juanj/apps/s2client-api/commandcenter/src/WorkerManager.cpp:235:9: warning: unused variable ‘yspace’ [-Wunused-variable]
int yspace = 0;
^~~~~~
[ 97%] Building CXX object src/CMakeFiles/CommandCenter.dir/main.cpp.o
[100%] Linking CXX executable ../bin/CommandCenter
/opt/local/lib/sc2api/libsc2api.a(sc2_agent.cc.o): On function: google::protobuf::RepeatedField<unsigned long long>::Reserve(int)': sc2_agent.cc:(.text._ZN6google8protobuf13RepeatedFieldIyE7ReserveEi[_ZN6google8protobuf13RepeatedFieldIyE7ReserveEi]+0xdf): reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' not defined
sc2_agent.cc:(.text._ZN6google8protobuf13RepeatedFieldIyE7ReserveEi[_ZN6google8protobuf13RepeatedFieldIyE7ReserveEi]+0xf7): reference to google::protobuf::internal::LogMessage::operator<<(char const*)' not defined sc2_agent.cc:(.text._ZN6google8protobuf13RepeatedFieldIyE7ReserveEi[_ZN6google8protobuf13RepeatedFieldIyE7ReserveEi]+0x106): reference to google::protobuf::internal::LogMessage::operator<<(char const*)' not defined
sc2_agent.cc:(.text._ZN6google8protobuf13RepeatedFieldIyE7ReserveEi[_ZN6google8protobuf13RepeatedFieldIyE7ReserveEi]+0x11b): reference to `google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' not defined
...............................................................................................................

Thanks.

A situation about Multiplayer and Addon

Hello! I am a newbie who has just used Github and Commander Center,my bot race is Terran,then i want to use the "CreateParticipant()" to add the custom bot to i fight with my bot,
CreateParticipant(Util::GetRaceFromString(botRaceString), &Player),
CreateParticipant(Util::GetRaceFromString(botRaceString), &bot)
i can open two windows,but the
else if (item.type.getUnitTypeID() == sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR)
Micro::SmartAddon(producer, sc2::ABILITY_ID::BUILD_REACTOR_STARPORT, m_bot);
is invalid in the game.Do other people have encountered such a problem?

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.

Hi, i am instaling commandcenter on linux and i got to the point to do:
$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .

but it throws me error:

-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found SC2Api: SC2Api_INCLUDE_DIR-NOTFOUND;SC2Api_Proto_INCLUDE_DIR-NOTFOUND;/usr/include
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/SC2Api_INCLUDE_DIR
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src
SC2Api_Proto_INCLUDE_DIR
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src
used as include directory in directory /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src

-- Configuring incomplete, errors occurred!
See also "/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/CMakeFiles/CMakeOutput.log".

could you please help me?

xubuntu, make build fail, error: invalid user-defined conversion from ‘sc2::Unit’ to ‘const sc2::Unit*’ [-fpermissive]

[ 2%] Building CXX object src/CMakeFiles/CommandCenter.dir/BuildingManager.cpp.o
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp: In member function ‘void BuildingManager::constructAssignedBuildings()’:
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:180:48: error: invalid user-defined conversion from ‘sc2::Unit’ to ‘const sc2::Unit*’ [-fpermissive]
if (Util::IsGeyser(unit) && Util::Dist(b.finalPosition, unit->pos) < 3)
^
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:0,
from /opt/local/include/sc2api/sc2_api.h:3,
from /home/sklett/starcraft/s2client-api/commandcenter/src/Common.h:3,
from /home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:1:
/opt/local/include/sc2api/sc2_unit.h:182:5: note: candidate is: sc2::Unit::operator sc2::Tag() const
operator Tag() const { return tag; }
^
/opt/local/include/sc2api/sc2_unit.h:182:5: note: no known conversion from ‘sc2::Tag {aka long unsigned int}’ to ‘const sc2::Unit*’
In file included from /home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:5:0:
/home/sklett/starcraft/s2client-api/commandcenter/src/Util.h:29:10: note: initializing argument 1 of ‘bool Util::IsGeyser(const sc2::Unit*)’
bool IsGeyser(const sc2::Unit * unit);
^
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:180:85: error: base operand of ‘->’ has non-pointer type ‘sc2::Unit’
if (Util::IsGeyser(unit) && Util::Dist(b.finalPosition, unit->pos) < 3)
^
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:182:36: error: invalid user-defined conversion from ‘sc2::Unit’ to ‘const sc2::Unit*’ [-fpermissive]
geyser = unit;
^
In file included from /opt/local/include/sc2api/sc2_interfaces.h:13:0,
from /opt/local/include/sc2api/sc2_api.h:3,
from /home/sklett/starcraft/s2client-api/commandcenter/src/Common.h:3,
from /home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:1:
/opt/local/include/sc2api/sc2_unit.h:182:5: note: candidate is: sc2::Unit::operator sc2::Tag() const
operator Tag() const { return tag; }
^
/opt/local/include/sc2api/sc2_unit.h:182:5: note: no known conversion from ‘sc2::Tag {aka long unsigned int}’ to ‘const sc2::Unit*’
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp: In member function ‘void BuildingManager::drawBuildingInformation()’:
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:352:9: warning: unused variable ‘yspace’ [-Wunused-variable]
int yspace = 0;
^
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp: In member function ‘sc2::Point2D BuildingManager::getBuildingLocation(const Building&)’:
/home/sklett/starcraft/s2client-api/commandcenter/src/BuildingManager.cpp:413:12: warning: unused variable ‘numPylons’ [-Wunused-variable]
size_t numPylons = m_bot.UnitInfo().getUnitTypeCount(Players::Self, Util::GetSupplyProvider(m_bot.GetPlayerRace(Players::Self)), true);
^
src/CMakeFiles/CommandCenter.dir/build.make:110: recipe for target 'src/CMakeFiles/CommandCenter.dir/BuildingManager.cpp.o' failed
make[2]: *** [src/CMakeFiles/CommandCenter.dir/BuildingManager.cpp.o] Error 1
CMakeFiles/Makefile2:85: recipe for target 'src/CMakeFiles/CommandCenter.dir/all' failed
make[1]: *** [src/CMakeFiles/CommandCenter.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Config file not found?

Config file could not be found, and is required for starting the bot
Please read the instructions and try again
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

This is the result of running the CommandCenter executable. The BotConfig.txt is located in the bin folder with the executable. The only change I made to it was the map to be played on. I believe I've followed all the instructions for the Mac install. I had to edit a file in the the s2client-api code, comment out line 17867 in civetweb.c, to stop warnings from being treated as errors. The only part I wasn't sure about was downloading the maps from https://github.com/Blizzard/s2client-proto#downloads. I downloaded one map pack and extracted the map files in to a folder that I created in my starcraft2 application called maps. I had to create maps folder because there wasn't a folder with that name already.

Does anyone have a suggestion for what I may have done wrong?

error: #error This file was generated by an older version of protoc which is

Hi , could anyone help me?

when i do last step on linux:

$ git clone https://github.com/davechurchill/commandcenter.git && cd commandcenter
$ cmake .
$ make

it throws me error:

[ 2%] Building CXX object src/CMakeFiles/CommandCenter.dir/BaseLocation.cpp.o
In file included from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_proto_interface.h:5:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_unit.h:6,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_interfaces.h:13,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_api.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/Common.h:17,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.cpp:1:
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
^
In file included from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:31:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_proto_interface.h:5,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_unit.h:6,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_interfaces.h:13,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_api.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/Common.h:17,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.cpp:1:
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/common.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/common.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/common.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
^
In file included from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:32:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_proto_interface.h:5,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_unit.h:6,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_interfaces.h:13,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_api.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/Common.h:17,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.cpp:1:
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/data.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/data.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/data.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
^
In file included from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/sc2api.pb.h:33:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_proto_interface.h:5,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_unit.h:6,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_interfaces.h:13,
from /mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/sc2api/sc2_api.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/Common.h:17,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.h:3,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/commandcenter/src/BaseLocation.cpp:1:
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/debug.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/debug.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
/mnt/minerva1/nlp/projects/ai_in_games19/opt/local/include/s2clientprotocol/debug.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.

Error on Linux during make

I am trying to run command center on Linux but it trows me an error during make.

when i do steps :
$ git clone --recursive https://github.com/Blizzard/s2client-api && cd s2client-api
$ git checkout dd10176ab94cc078a2116ec790b63f0a93ac5527 .
$ mkdir build && cd build
$ cmake ../
$ make

then it will throw me error

[ 83%] Built target sc2protocol
Scanning dependencies of target sc2utils
[ 83%] Building CXX object src/CMakeFiles/sc2utils.dir/sc2utils/sc2_arg_parser.cc.o
[ 83%] Building CXX object src/CMakeFiles/sc2utils.dir/sc2utils/sc2_manage_process.cc.o
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc: In function âbool sc2::HasExtension(const string&, const string&)â:
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:84:5: error: no matching function for call to âequal(__gnu_cxx::__normal_iterator<const char*, std::basic_string >, std::basic_string::const_iterator, std::basic_string::const_iterator, std::basic_string::const_iterator, sc2::HasExtension(const string&, const string&)::__lambda0)â
);
^
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:84:5: note: candidates are:
In file included from /usr/include/c++/4.8/vector:60:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/../include/sc2utils/sc2_manage_process.h:4,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:1:
/usr/include/c++/4.8/bits/stl_algobase.h:1021:5: note: template<class _II1, class _II2> bool std::equal(_II1, _II1, _II2)
equal(_II1 __first1, _II1 __last1, _II2 __first2)
^
/usr/include/c++/4.8/bits/stl_algobase.h:1021:5: note: template argument deduction/substitution failed:
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:84:5: note: candidate expects 3 arguments, 5 provided
);
^
In file included from /usr/include/c++/4.8/vector:60:0,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/../include/sc2utils/sc2_manage_process.h:4,
from /mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:1:
/usr/include/c++/4.8/bits/stl_algobase.h:1053:5: note: template<class _IIter1, class _IIter2, class _BinaryPredicate> bool std::equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate)
equal(_IIter1 __first1, _IIter1 __last1,
^
/usr/include/c++/4.8/bits/stl_algobase.h:1053:5: note: template argument deduction/substitution failed:
/mnt/minerva1/nlp/projects/ai_in_games19/s2client-api/src/sc2utils/sc2_manage_process.cc:84:5: note: candidate expects 4 arguments, 5 provided
);
^
make[2]: *** [src/CMakeFiles/sc2utils.dir/sc2utils/sc2_manage_process.cc.o] Error 1
make[1]: *** [src/CMakeFiles/sc2utils.dir/all] Error 2
make: *** [all] Error 2

Broken OS X compilation

The following are two last compilation issues on OS X and probably Linux:

diff --git a/src/BotAssert.cpp b/src/BotAssert.cpp
index 10eab6e..2aaf9ec 100644
--- a/src/BotAssert.cpp
+++ b/src/BotAssert.cpp
@@ -11,7 +11,7 @@ namespace Assert
         struct tm  tstruct;
         char       buf[80];
         //tstruct = *localtime(&now);
-               localtime_s(&tstruct, &now);
+        localtime_r(&now, &tstruct);
         strftime(buf, sizeof(buf), "%Y-%m-%d_%X", &tstruct);

         for (size_t i=0; i<80; ++i)
@@ -29,8 +29,8 @@ namespace Assert
         {
             va_list args;
             va_start(args, msg);
-            //vsprintf(messageBuffer, msg, args);
-                       vsnprintf_s(messageBuffer, 1024, msg, args);
+            vsprintf(messageBuffer, msg, args);
+            //vsnprintf_s(messageBuffer, 1024, msg, args);
             va_end(args);
         }

Actually I don't know what was original intention thus not sure which fix should be applied.

First, by some reason the compiler fails to find localtime_s. I used localtime_r which is multythread version but I don't think that this fix is correct.
Second, vsnprintf_s is Windows specific. The code contains both versions. Is it forgotten code or there is something behind?

Linker errors after merging latest changes

Hi,

I've been using your project for my undergraduate projects and I am not able to run the bot anymore after merging your latest changes. I am now getting the warning
LNK4098 defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
followed by 80 linker errors (LNK2001) all related to the new class UnitType.
And when I try to add this flag, I get over 3000 errors.
The runtime library setting in Project Properties -> C/C++ -> Code Generation -> Runtime Library is set to Multi-threaded Debug (/MTd) for my debug settings (Debug|x64). I tried the other values with no success.

Do you have an idea of what I need to do?

Thank you,
Raphaël Royer-Rivard

Building on linux

I'm trying to build on Ubuntu 16.04, but the cmake file for finding the api is proving to be a challenge. Because the api doesn't provide a cmake install target (at this rate I'm considering making a PR for one), I'm trying to trick your file into thinking the api is accessible. So far I managed to get the libraries to be found with

sudo mkdir -p /opt/local/lib
sudo ln -s ~/s2client-api/build/bin/ /opt/local/lib/sc2api

but the includes fail to be found using the same method. Reading through the cmake file it seems like you expect the sc2api and sc2utils directories to be found in one of

"/opt/local/include"
"/usr/local/include"
"/usr/include

(plus any directories cmake has defaulted in). And yet I still get failures for finding the first set of includes after doing

sudo mkdir -p /opt/local/include
for i in ~/s2client-api/include/; do sudo ln -s $i $(basename $i); done

I realized that I'll further need to add the protobuf includes since they're generated and build into the build directory, but I can't even get past the first find_path. Do you have any ideas?

Can't build on OSX Proto is not under sc2api.

Hey guys.

Can I get some help over here please? I really would love to tinker with CommandCenter but I'm unable to build it so far.

I have the sc2 api checked out and built nicely. I added the path to my includes to the FindSC2Api.cmake file like this:

# Find main Api headers.
find_path(SC2Api_INCLUDE_DIR
    NAMES
        "sc2api/sc2_api.h"
        "sc2utils/sc2_manage_process.h"
    PATHS
        "/opt/local/include"
        "/usr/local/include"
        "/usr/include"
        "/Users/user/C++/s2client-api/include"
)

However, I'm getting this:

CMake Error at /usr/local/Cellar/cmake/3.9.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find SC2Api (missing: SC2Api_INCLUDE_DIRS SC2Api_LIBRARIES)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.9.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindSC2Api.cmake:77 (find_package_handle_standard_args)
  CMakeLists.txt:11 (find_package)


-- Configuring incomplete, errors occurred!
See also "/Users/user/C++/commandcenter/build/CMakeFiles/CMakeOutput.log".

Having everything setup, I noticed this part:

        "${SC2Api_INCLUDE_DIR}/sc2api/proto"

This isn't there.

I found proto which is a Java thing under here:

find . -name proto
./contrib/protobuf/java/compatibility_tests/v2.5.0/more_protos/src/proto
./contrib/protobuf/java/compatibility_tests/v2.5.0/protos/src/proto
./contrib/protobuf/java/core/src/test/proto
./contrib/protobuf/java/util/src/test/proto

But also could find protobuf like this:

~/C++/s2client-api master*
❯ find . -name protobuf
./.git/modules/contrib/protobuf
./build/contrib/protobuf
./build/contrib/protobuf/cmake/CMakeFiles/Export/lib/cmake/protobuf
./build/contrib/protobuf/cmake/lib/cmake/protobuf
./contrib/protobuf
./contrib/protobuf/java/compatibility_tests/v2.5.0/more_protos/src/proto/com/google/protobuf
./contrib/protobuf/java/compatibility_tests/v2.5.0/more_protos/src/proto/google/protobuf
./contrib/protobuf/java/compatibility_tests/v2.5.0/protos/src/proto/com/google/protobuf
./contrib/protobuf/java/compatibility_tests/v2.5.0/protos/src/proto/google/protobuf
./contrib/protobuf/java/compatibility_tests/v2.5.0/tests/src/main/java/com/google/protobuf
./contrib/protobuf/java/core/src/main/java/com/google/protobuf
./contrib/protobuf/java/core/src/test/java/com/google/protobuf
./contrib/protobuf/java/core/src/test/proto/com/google/protobuf
./contrib/protobuf/java/util/src/main/java/com/google/protobuf
./contrib/protobuf/java/util/src/test/java/com/google/protobuf
./contrib/protobuf/java/util/src/test/proto/com/google/protobuf
./contrib/protobuf/python/google/protobuf
./contrib/protobuf/src/google/protobuf

Sooooo.... which one is it? :)

Thanks!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.