AI Interface¶
This is a very early draft with some ideas taken from http://bwmirror.jurenka.sk/javadoc/bwapi/package-summary.html
This file shall provide information about the AI interface design.
General ideas¶
An AI registers hooks for desired events
The C++ engine triggers python AI functions when desired events occur
The AI then can trigger actions on the controllable units
Periodically (1 Hz?), the AI gets ticked to allow event independent decisions
Event types¶
Python interface basic events:
on_start(GameInfo info)
on_frame(Game game)
on_end(Player winner)
Some AIs may prefer an event driven approach (rule based AI):
on_unit_discover(Unit unit)
on_unit_complete(Unit unit)
on_unit_lost(Unit unit)
many more…
Some AIs will need to simulate ticks into the future to help make decisions for the current tick. (min-max, MCTS, etc.)
Relevant structures for the AI¶
Remember: These are just some ideas for possible interfaces, they are not existent in the game yet.
struct game_info {
int num_players;
int map_size;
int pop_limit;
resources_type;
map_view;
starting_age;
victory_mode;
}
class Game {
Player[] allies(); // all the ally players that have not left or been defeated.
bool canBuildHere(Unit builder, TilePosition position, UnitType type);
bool canMake(Unit builder, UnitType type);
bool canResearch(Unit unit, TechType type);
bool canUpgrade(Unit unit, UpgradeType type);
Player[] enemies(); // all the enemy players that have not left or been defeated.
Unit[] getAllUnits(); // returns all the visible units.
// many more examples at: http://bwmirror.jurenka.sk/javadoc/bwapi/Game.html
}
class Player {
string getName(); // returns the name of the player.
Race getRace(); // returns the race of the player.
Unit[] getUnits(); // returns the set of units the player own.
bool hasResearched(TechType tech);
int getWood() // Returns the amount of wood the player owns.
// many more...
}
class Unit {
// used to get information about individual units as well as issue orders to units
}
class Calculation {
// used to get computation heavy calculations from the C++ engine
}